- 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]). Не придумал ничего лучше :(
3.14159265 22.06.2010 14:11 # +1
поставь в ветке if (l[i] - l[i - 1] == 1) цикл, который проверяет остальные 4 элемента причем лучше заменить for на while и инкрементить i вручную (во вложеном цикле тож будет i)
cignatov 22.06.2010 14:13 # 0
Stalker 22.06.2010 15:20 # +1
Как-то так. Извините за мой русский.
cignatov 22.06.2010 16:45 # 0
Stalker 22.06.2010 16:58 # 0
if (c >= 5) {
cignatov 22.06.2010 17:24 # −3
[0, 1, 4, 6, 8, 9, 10]
Когда программа сравнит 0 и 1, переменная с примет значение 1, затем ничего не изменится до тех пор, пока не будут сравниваться 8, 9 и 10. То есть, мы выясним, что в последовательности есть 5 случаев, когда соседние члены отличаются на единицу, а задача в том, чтобы выяснить, есть ли в последовательности sub-последовательность из 5 чисел, отличающихся на единицу (извините и за мой русский тоже :)
Stalker 22.06.2010 17:32 # +3
cignatov 22.06.2010 18:12 # 0
(разумеется, сперва необходимо отсортировать список)
Stalker 22.06.2010 18:27 # +3
Нахуя? // извините за мой C++
cignatov 22.06.2010 18:33 # −2
xXx_totalwar 22.06.2010 19:26 # +3
тебе же нужно найти последовательность в исходном списке, так зачем же его сортировать?
cignatov 22.06.2010 19:52 # −3
Этот код — часть проверки комбинации из 7 карт на содержание в ней покерного стрита:
http://en.wikipedia.org/wiki/List_of_poker_hands#Straight
Stalker 22.06.2010 21:11 # +2
cignatov 23.06.2010 00:47 # −3
KoirN 23.06.2010 11:33 # −6
Webkill 22.06.2010 16:16 # −9
как элемент может "начинаться" на определённой позиции? это не элемент, а множетво, что ли? что это предложение вообще значит?
Webkill 22.06.2010 16:20 # −10
в русском языке "Нужно было найти в списке 5 элементов, которые могут начинаться на любой позиции" может значить:
1) Нужно было найти в списке 5 элементов, каждый из которых может начинаться на любой позиции
2) Нужно было найти в списке 5 элементов, последовательный ряд которых может начинаться на любой позиции
Умейте выражаться мысли чётко!
cignatov 22.06.2010 16:35 # −2
3.14159265 22.06.2010 16:37 # +6
lol
Webkill 22.06.2010 16:43 # −6
Да и вообще, это банальная механическая опечатка, а не врытое глубоко в когнитивные структуры неумение выражать мысли чётко :)
xXx_totalwar 22.06.2010 17:59 # +2
Webkill 22.06.2010 23:11 # −4
Vindicar 22.06.2010 23:11 # +1
Строго говоря, даже конструкция "len(l)-maxlen+1" необязательна - максимум, будет несколько холостых прогонов в конце.
Vindicar 22.06.2010 23:18 # +1
cignatov 22.06.2010 23:23 # +1
Vindicar 22.06.2010 23:30 # 0
Но вот это не сработало:
Боюсь, in ищет элемент списка - объект range, а не вхождение последовательности, как в моем коде выше.
cignatov 22.06.2010 23:32 # 0
cignatov 22.06.2010 23:34 # 0
Vindicar 22.06.2010 23:35 # 0
Suor 26.06.2010 16:13 # 0
Vindicar 26.06.2010 19:15 # 0
Ваше предложение?
Suor 26.06.2010 19:19 # 0
и под очень неэффективным я имел в виду не исходный вариант (хотя он тоже не самый быстрый), а тот где для каждого элемента конструируется массив и сравнивается со слайсом
Vindicar 26.06.2010 19:41 # +1
Вот итог:
Где нулевой метод - обсуждаемый говнокод, первый метод - мой, а третий - Сталкера. Так что вы правы.
P.S.: Список из семи элементов выбран как максимальное число карт на руках в покере (AFAIK).
Wеbkill 26.06.2010 22:14 # −7
Wеbkill 26.06.2010 22:17 # −7
Wеbkill 26.06.2010 22:18 # −7
xa4a 24.08.2010 10:53 # 0
как-то так
Nakilon 01.09.2010 12:14 # −4
Denis Popov 01.09.2010 13:12 # +2
Nakilon 01.09.2010 13:20 # −1