Дети, которые учатся считать, часто знают серии чисел, но, похоже, не могут правильно их составить.
Например, они могут сказать:
1,2,3,4,7,8,9,10
Иногда дети понимают, что пропустили некоторые цифры, и возвращаются:
1,2,3,4,7,8,5,6,7,8,9,10
Это явно превосходный образец. Нам нужно их идентифицировать.
Чтобы определить эти списки:
Определяем минимум
M
и максимумN
из спискаМы шагаем по списку. Если текущий номер больше или равен любому члену списка справа от него, мы удаляем текущий номер.
Если оставшийся список содержит все числа от
M
доN
, то мы возвращаем истинное значение.
Вы можете предположить, что ваш входной список будет содержать как минимум 1 элемент. Вы можете предположить, что все целые числа будут неотрицательными.
Тестовые случаи:
Truthy:
0
10
0 0 0
1 0 1
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 0 1 2 3
0 1 2 3 4 5 5
0 1 1 2 2 3
0 3 6 1 4 7 2 5 8 3 4 5 6 7 8
1 3 5 7 2 3 4 5 6 7
5 6 0 1 2 3 6 7 4 5 6 7
5 6 7 8
5 5 6 7 8
4 6 7 8 3 4 5 6 7 8
Falsy:
1 0
4 3 2 1
1 2 3 7 8 9
0 1 2 3 1 3
0 1 2 3 1 3 4
0 1 2 3 1 3 2 4
0 1 2 3 1 3 2 4 3
1 3 5 7 2 4 6 8
0 1 2 1 3 4 5 6
4 5 6 3 4 5
Это код-гольф , поэтому делайте ваши ответы как можно короче!
1
позже). Вы также удалили бы все остальные элементы (кроме последнего 1), так что в итоге вы0 1
0 1 2 3 4 5
Ответы:
05AB1E , 5 байтов
Я не уверен на 100%, что это работает, но он проходит все тестовые случаи, и я не смог найти ни одной ситуации, когда это не удалось.
Попробуйте онлайн!
источник
Желе ,
109 байтПопробуйте онлайн!
Как это устроено
источник
ɓ
это относительно новая функция?«\
на мой взгляд, хотя.Рубин ,
59 5441 байтПопробуйте онлайн!
источник
Python 2 , 81 байт
Попробуйте онлайн!
источник
PHP ,
148130 байт-18 байт, спасибо @Christoph
Попробуйте онлайн!
источник
$argn
всегда строкаforeach
не работает на нем. Вы можете использовать$argv
для получения массива в качестве входных данных, но имейте в виду, что он всегда содержит имя файла в качестве первого элемента. Вы можете использовать$m
и$n
только один раз , так что вы можете сэкономить много байт , создавая$b
ранее:$b=range(min($a),max($a));
. Актерский состав(bool)
совершенно не нужен.if($k>=$a[$s])$a[$i]=null;
к$k<$a[$s]?:$a[$i]=-1;
. Используя ссылку , мы можем сделать это:foreach($a as$i=>&$k)
(+1 байт) и$a[$i]
до$k
(-4 байта). Более того, это позволяет нам отказаться,$s=$i
потому что мы можем перебирать$i
прямо сейчас.$a=$argn;$b=range(min($a),max($a));foreach($a as$i=>&$k)for(;++$i<count($a);)$k<$a[$i]?:$k=-1;echo!array_diff($b,$a);
(117 байт). Но он все еще использует$argn
неправильный путь.$a=explode(' ',$argn);
исправит это для 13 дополнительных байтов.$_GET
качестве входного массива? В этом случае нет необходимости использоватьexplode
дополнительные -6 байт для использования не$b
переменной~
Попробуй онлайн»!Java 8,
264262 байтаОбъяснение:
Попробуй это здесь.
источник
R
8885 байтЭто может быть, вероятно, дальше. Перебирает элементы
x
, проверяет, все ли последующие значения больше, и только затем сохраняет этот элемент. После цикла он создает последовательность изmin(x)
кmax(x)
, и проверяет с ,%in%
если все значения включены в обрезке версииx
.источник
function(n)all(unique(cummin(rev(n)))==max(n):min(n))
JavaScript (ES6), 60 байт
Ungolfed:
Это более простой алгоритм:
Выполните итерацию массива в обратном порядке и убедитесь, что каждое число (кроме первого) на единицу меньше или равно уже увиденному числу.
Отрывок:
Показать фрагмент кода
источник
Haskell, 62 байта
Попробуйте онлайн!
Прямая реализация определения, где
g
элементы удаляются, если они> =, чем элементы справа от него.источник
C #, 69 байт
Вкратце:
s = input (s) equence
берет из элемента s, где все элементы после этого (skip (I) ndex + 1 items), текущее значение выше,
подсчитайте их, и посмотрите, равна ли оставшаяся сумма ожидаемой ((max) imum value минус (min) imum) количество чисел
Попробуйте онлайн!
источник
JavaScript (ES6),
82737270 байтВозвращает логическое значение.
Как?
Мы выполняем итерацию для каждого элемента x входного массива a , отслеживая максимальное встречаемое значение m и число -k значений, которые не превышают или не равны ни одному из элементов справа от них. По определению действительные значения отображаются в строго возрастающем порядке.
Мы используем
filter()
вместоmap()
, чтобы все элементы отфильтровывались, пока k не станет отрицательным. Это позволяет нам изолировать первый действительный элемент, который также гарантированно будет минимальным значением массива.Наконец, мы проверяем
minimum - (maximum + 1) == -number_of_valid_elements
:Контрольные примеры
Показать фрагмент кода
источник