Самоограничивающиеся списки
Рассмотрим непустой список L, содержащий неотрицательные целые числа. Выполнения в L представляет собой непрерывный подсписок равных элементов, которые не могут быть сделаны больше. Например, прогоны [0,0,1,1,3,3,3,2,1,1] : [0,0], [1,1], [3,3,3], [2 ], [1,1] . Список L является самоограничивающим, если для каждого целого числа N ≥ 1 число вхождений N меньше или равно количеству прогонов N-1 . Приведенный выше список не является самоограничивающим, потому что есть 4 вхождения по 1 , но только один прогон из 0 с.
Вот пример самоограничивающегося списка: [0,0,3,4,1,0,2,1,1,0,2,1,0,0,0,1,0] . Она имеет
- 5 прогонов 0 и 5 вхождений 1 ,
- 4 прогона из 1 и 2 вхождения по 2 ,
- 2 прогона 2 и 1 вхождение 3 ,
- 1 прогон 3 и 1 вхождение 4 ,
- 1 прогон из 4 и без 5 случаев ,
- нет вхождений других целых чисел.
Задание
Ваша задача - решить, является ли список самоограниченным. Более конкретно, ваш ввод должен быть непустым списком неотрицательных целых чисел. Если список самоограничен, ваш вывод должен быть правдивым; в противном случае это должно быть ложно. Ввод и вывод могут быть в любом разумном формате.
Наименьшее количество байтов в каждом языке программирования является победителем. Применяются стандартные правила игры в гольф .
Контрольные примеры
Истинные случаи:
[0]
[1,0]
[0,1,1,0,2]
[3,1,1,0,0,2,0,0]
[5,0,4,1,3,0,2,2,0,1,1,1,0]
[0,0,1,1,0,0,1,1,0,0,2,2,0,0]
[6,0,0,0,2,2,1,0,5,0,3,4,0,1,1,1]
[5,0,1,0,0,0,0,4,0,3,1,1,1,2,2,0,0,0,0,0]
[4,5,1,3,2,0,5,2,0,3,0,1,0,1,0,0,0,1,0,0,1,0,3,4,4,0,2,6,0,2,6]
[0,4,1,3,10,6,0,1,3,7,9,5,5,0,7,4,2,2,5,0,1,3,8,8,11,0,0,6,2,1,1,2,0,4]
Ложные случаи:
[2]
[1,1,0]
[0,0,1,1,1,0,0,2]
[0,1,0,1,1,2,2,3,0,0,4,6]
[1,1,2,1,2,0,2,0,3,0,0,2,2,1,2,3,2,0,1,1,1,0,0,3,3,0]
[3,4,1,0,0,0,5,5,0,2,2,0,0,0,0,0,2,0,1,1,0,4,3,5,4,3]
[1,0,0,0,2,5,3,1,1,0,3,3,1,3,5,4,0,4,0,0,2,0,2,1,1,5,0,0,2,4,4,0,2,0,1,4,4,2,3,3,5,3,4,0,2,0,5]
[4,3,1,0,0,4,6,6,1,0,1,2,1,3,0,1,0,2,0,3,4,0,2,1,1,3,0,2,2,2,0,5,5,0,5,2,5,5,0,4,3,2,3,1,1,3,5,1,4,1,6,2,6,2,4,0,4,0,4,5,3,3,0,0,6,1,0,0,0,6,2,1,0,1,2,6,2,4]
[5,1,1,1,0,2,0,6,1,0,2,1,2,2,5,3,1,0,0,0,3,2,3,0,1,1,0,1,0,1,1,2,0,6,4,1,2,1,1,6,4,1,2,2,4,0,1,2,2,1,3,0,1,2,0,0,0,2,0,2,2,0,1,0,0,1,3,0,0,0,6,2,0,1,0,1,2,1,1,1,0,4,0,0,5,2,0,0,0,4,1,2,2,2,2,0,5,3,2,4,5,0,5]
[2]
тоже, но такие случаи должны быть ложными, да.Ответы:
Perl 6 , 29 байт
Попробуйте онлайн!
Очень хорошая задача для Perl 6. Использует оператор подмножеств в Bags (целочисленные множества). Объяснение:
источник
JavaScript (ES6),
9289 байтПопробуйте онлайн!
Как?
Массив c [] используется для хранения как количества прогонов, так и числа целочисленных вхождений. Прогоны хранятся с неотрицательными индексами, а целочисленные вхождения - с индексами 1-го дополнения ( c [-1] = число 0 , c [-2] = число 1 и т. Д.).
Отрицательные индексы фактически сохраняются как свойства базового объекта массива, и .some () не выполняет их итерацию.
источник
Perl 5
-p
,494844 байтовПопробуйте онлайн!
источник
Желе , 10 байт
Попробуйте онлайн!
Как это устроено
источник
Желе , 19 байт
Попробуйте онлайн!
источник
Желе , 17 байт
Попробуйте онлайн!
источник
Python 3 , 94 байта
Попробуйте онлайн!
источник
sum(1for ... if x==j!=y)
=>sum(x==j!=y for ...)
.Japt , 21 байт
Проверьте это онлайн!
источник
Stax ,
139 байтДеннис нашел гораздо лучший алгоритм . Я безбожно портировал его на Stax.
Запустите и отладьте его онлайн
Распакованный, распакованный и прокомментированный, вот как это выглядит.
Запустите этот
Старый ответ:
Запустите и отладьте его
Он перебирает ввод и проверяет условия:
> 0
?occurrences(element) >= runs(element - 1)
?Если какое-либо из этих условий выполняется для элемента, то этот элемент является совместимым. Если все элементы соответствуют, результат
1
.Вот распакованное, разархивированное, закомментированное представление той же программы.
Запустите этот
источник
Haskell, 80 байт
Попробуйте онлайн!
источник