- 1
- 2
- 3
for i in range(4, len(l)):
if l[i] - l[i - 1] == 1 and l[i - 1] - l[i - 2] == 1 and l[i - 2] - l[i - 3] == 1 and l[i - 3] - l[i - 4] == 1:
return True
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−142
for i in range(4, len(l)):
if l[i] - l[i - 1] == 1 and l[i - 1] - l[i - 2] == 1 and l[i - 2] - l[i - 3] == 1 and l[i - 3] - l[i - 4] == 1:
return True
Нужно было найти в списке 5 элементов, которые могут начинаться на любой позиции, но должны идти по порядку (например [9, 10, 11, 12, 13]). Не придумал ничего лучше :(
поставь в ветке if (l[i] - l[i - 1] == 1) цикл, который проверяет остальные 4 элемента причем лучше заменить for на while и инкрементить i вручную (во вложеном цикле тож будет i)
Как-то так. Извините за мой русский.
if (c >= 5) {
[0, 1, 4, 6, 8, 9, 10]
Когда программа сравнит 0 и 1, переменная с примет значение 1, затем ничего не изменится до тех пор, пока не будут сравниваться 8, 9 и 10. То есть, мы выясним, что в последовательности есть 5 случаев, когда соседние члены отличаются на единицу, а задача в том, чтобы выяснить, есть ли в последовательности sub-последовательность из 5 чисел, отличающихся на единицу (извините и за мой русский тоже :)
(разумеется, сперва необходимо отсортировать список)
Нахуя? // извините за мой C++
тебе же нужно найти последовательность в исходном списке, так зачем же его сортировать?
Этот код — часть проверки комбинации из 7 карт на содержание в ней покерного стрита:
http://en.wikipedia.org/wiki/List_of_poker_hands#Straight
как элемент может "начинаться" на определённой позиции? это не элемент, а множетво, что ли? что это предложение вообще значит?
в русском языке "Нужно было найти в списке 5 элементов, которые могут начинаться на любой позиции" может значить:
1) Нужно было найти в списке 5 элементов, каждый из которых может начинаться на любой позиции
2) Нужно было найти в списке 5 элементов, последовательный ряд которых может начинаться на любой позиции
Умейте выражаться мысли чётко!
lol
Да и вообще, это банальная механическая опечатка, а не врытое глубоко в когнитивные структуры неумение выражать мысли чётко :)
Строго говоря, даже конструкция "len(l)-maxlen+1" необязательна - максимум, будет несколько холостых прогонов в конце.
Но вот это не сработало:
Боюсь, in ищет элемент списка - объект range, а не вхождение последовательности, как в моем коде выше.
Ваше предложение?
и под очень неэффективным я имел в виду не исходный вариант (хотя он тоже не самый быстрый), а тот где для каждого элемента конструируется массив и сравнивается со слайсом
Вот итог:
Где нулевой метод - обсуждаемый говнокод, первый метод - мой, а третий - Сталкера. Так что вы правы.
P.S.: Список из семи элементов выбран как максимальное число карт на руках в покере (AFAIK).
как-то так