Професионална програма
Loading...
s_antonov avatar s_antonov 1 Точки

Python - логически условия за задаване на интервали

sorted_datalines = [-640, -547, -414, -313, -182, -181, 441, 622, 679, 782, 889]

Привет,

Решавам малко по-сложна за мен задачка свързана с интервали, не давам моето решение защото то не работи в случаите когато един интервал съдържа две или повече цифри  - накратко сортиран лист с положителни и отрицателни integers. Идеята е да се мине през всеки и да отвари интервал, съответно затваря интервала когато не открие поредност и преминава на следващия. Корекния output трябва да бъде:

[-640, -640], [-547, -547], [-414, -414], [-313, -313], [-182, -181], [441, 441], [622, 622], [782, 782], [889, 889]

Пробвах дирекно с loop да насипя резултатите в матрица и работи до момента в който стигне до -182 където дава като интервали:

...[-182, -182], [-182, -181]...

Не съм си избистрил логиката как да задам логическите ограничения, но понеже е сортиран лист би трябвало да се следи за наличие на поредност в предходната цифра. Също май не трябва ползвам матрица преди да знам къде започва и свършват интервалите. Малко зациклих, предложения?

Пример: For the input: 

123
567
124
568
-100
-99

The output should be:

[-100, -99] with consecutive count of 2
[123, 124] with consecutive count of 2
[567, 568] with consecutive count of 2

 

Тагове:
0
Programming Fundamentals
andrey_bg avatar andrey_bg 4 Точки
Здравей, не знам как е точно условието за вход и изход, но с този код си получаваш изхода :) Ако изпратиш цялото условие на задачата, мога да го редактирам :)
nums=sorted([int(val) for val in input().split()]) 
res=[] 
diff=0 
for i,val in enumerate(nums):
    if res==[]:
        res.append([val,val])
    elif nums[i]!=nums[i-1]+1:
        if i<len(nums)-1 and nums[i]!=nums[i+1]-1:
            res.append([val, val])
        elif i==len(nums)-1:
            res.append([val, val])
        else:
            res.append([val])
    else:
        res[i-diff-1].append(val)
        diff+=1

for i in res:
    print(i)

 

 

0
s_antonov avatar s_antonov 1 Точки

Аз добавих -182 за да се уверя, че работи. Мерси!

0