Print the length of the longest continuous sequence of alternating odd and even numbers

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



Print the length of the longest continuous sequence of alternating odd and even numbers



How would I go about reading integers until -1 is input and then printing the length of the longest continuous sequence of numbers where there are
alternating odd then even numbers?



I've achieved the first section but it went downhill from there.



Some testing lists:


[1,2,3,4,5,10,6,7,8,20,25,30,40,-1]
[6,7,8,20,25,30,40,1,2,3,4,5,10,15,20,-1]



Here is my code:


evenOdd=

while True:
try:
n=int(input())
if n != -1:
evenOdd.append(n)
except:
break
evenOdd=
longest = 0
length = 0
for i in range(len(evenOdd)):
if ((evenOdd[i-2]% 2 == 0) and (evenOdd[i-1]% 2 == 1) and (evenOdd[i]% 2 == 0):
length += 1
else:
longest = max(longest, length)
length = 0

print(longest)




2 Answers
2



One option would be to keep track of the longest sequence as you go:


longest =
current =

while True:
n = int(input("Enter value: "))
if n == -1:
break

if current and current[-1] % 2 != n % 2:
current.append(n)
else:
current = [n]

if len(current) > len(longest):
longest = current



The upside here is there's no post-processing to be done when the -1 is entered, the result is ready to go.


-1



You can apply itertools.groupby twice:


itertools.groupby


import itertools
d = [[1,2,3,4,5,10,6,7,8,20,25,30,40,-1], [6,7,8,20,25,30,40,1,2,3,4,5,10,15,20,-1]]
def key_func(d):
start= not d[0]%2
for i in d[1:]:
if i%2 == start:
start = (not i%2)
else:
return False
return True

for l in d:
new_l = [list(b) for _, b in itertools.groupby(l, key=lambda x:x%2)]
second_l = [[i for [i] in b] for a, b in itertools.groupby(new_l, key=lambda x:len(x) ==1) if a]
print(max(second_l, key=lambda x:[key_func(x), len(x)]))



Output:


[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 10, 15, 20, -1]





Why the downvote?
– Ajax1234
Aug 9 at 14:35






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard