Проблема:
Ваша задача состоит в том, чтобы решить, содержит ли каждое число в последовательности чисел хотя бы одну из цифр предшествующего ему числа.
Например, следующее должно вернуть truey:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
Следующее должно вернуть фальси:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Ваше представление может быть функцией или полной программой.
Входные данные:
Ввод может быть любой разумный тип последовательности. Массив чисел, массив строк, разделенная строка чисел и т. Д.
Однако порядок имеет значение, поэтому любая структура, которую вы выбираете в качестве входных данных, очевидно, должна иметь определенный порядок.
Ввод может быть взят через стандартный ввод или в качестве аргумента.
Вы можете предположить:
все числа будут неотрицательными целыми числами
вход всегда будет содержать как минимум 2 числа
ввод цифр не начинается с 0
Выход:
Выводом будет истинное или ошибочное значение (как определено вашим языком), показывающее, соблюдается ли вышеуказанная спецификация или нет.
Значения истина / ложь не должны быть согласованными между тестами.
Он может быть либо выведен на стандартный вывод, либо возвращен.
Тестовые случаи:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
Это код-гольф, поэтому выигрывает наименьшее количество байтов.
JavaScript (ES6),
4744 *43 байтаСохранено байт благодаря @Neil
Принимает ввод в виде списка строк.
Тестовый фрагмент
Показать фрагмент кода
* ( зачеркнуто 44, по-прежнему регулярно 44 )
источник
`[${p}]`
работает?a=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(который также работает для числового ввода).p&&
если вы установитеp=1/19
?05AB1E , 10 байтов
Попробуйте онлайн! или как тестовый набор
объяснение
источник
€Sü.å
- Я бы хотел, чтобы это сработало так, как я думал.ü.å
или€Süå
.CJam ,
181514 байтовСохранено 4 байта благодаря Мартину Эндеру
Попробуйте онлайн!
объяснение
источник
Haskell,
514835 байт-3 байта благодаря @NickHansen! Мне действительно нужно поправиться с этими операторами монады
-4 и -9 байтов благодаря @Laikoni и @nimi соответственно!
Эта версия принимает входные данные в виде массива строк, что устраняет необходимость в них
show
, но, насколько я вижу, оно работает в основном так же, как и в старой версии:(Я вполне уверен, что мне разрешено отправлять анонимную функцию, подобную этой, но я исправлю ее при необходимости)
Сначала числа конвертируются в строки. Затем магия монад
zip=<<tail
создает функцию, которая объединяет список с самим собой, который связывает каждую запись со своими соседями. Затемall
сопоставляет лямбду с каждой парой, которая проверяет, содержит ли одна строка символы из другой, и, наконец, проверяет, все ли они вышлиTrue
.Старая версия, которая работает в основном так же:
источник
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
, так что вы можете удалить.map show
.Mathematica
62 4735 байтС сохранением 12 байтов благодаря MartinE.
источник
Рубин,
4948 байтовВывод
nil
для false и «случайное» целое для true.источник
Ява 8,
949087 байтВвод - это массив строк, представляющих числа. Начиная со второй строки, он выполняет сравнение регулярных выражений с каждой предыдущей строкой, чтобы увидеть, содержит ли он какой-либо из своих символов:
.*[previous string].*
.Golfed:
Ungolfed:
источник
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Желе , 6 байт
Попробуйте онлайн!
объяснение
Это наиболее очевидно, чтобы попытаться использовать
2/
здесь, но он запускает унарную функцию на всех срезах размера 2."Ḋ
эффективно запускает двоичную функцию на всех парах смежных элементов, что означает, что мы можем использоватьf
напрямую (вместо того, чтобы преобразовывать ее в унарный функционировать какf/
). Это в конечном итоге оставляет последний элемент ввода на месте, но, к счастью, даже ввод 0 не становится пустым списком при преобразовании в десятичную, поэтому он не влияет наẠ
.источник
Python 3 , 48 байт
Попробуйте онлайн!
источник
Желе , 8 байт
Попробуйте онлайн!
Как?
источник
05AB1E , 5 байтов
Код:
Использует кодировку CP-1252 . Попробуйте онлайн! или проверьте все контрольные примеры! ,
Объяснение:
источник
RüÃõå_
было то, что я придумал самостоятельно. Для меня большая честь быть так близко к вашему лучшему ответу, удаляя мой. Почему вам не нужно,R
хотя?R
тогда? : pPowerShell , 87 байт
Попробуйте онлайн!
Не самый короткий по какой-либо мере, но немного иной подход, чем другие, который демонстрирует отличную
|?{}
функциональность.Это принимает входные данные в виде массива строк
$n
, а затем циклически переходит от1
доlength-1
. Мы используемWhere-Object
(|?{...}
), чтобы вытащить те индексы, которые соответствуют действительности для конкретного условия. Вы можете думать об этом как о комбинированнойfor
петле сif
предложением.Пункт здесь есть
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. То есть мы берем текущий индекс$_
, устанавливаем его$i
и вычитаем1
, и используем его для индексации$n
(т.е. мы получаем предыдущий элемент в нашем входном массиве). Затем он приводится какchar
-array и отправляется через другуюWhere-Object
процедуру.Внутреннее предложение
$n[$i]-like"*$_*"
указывает, что строка в текущем индексе$i
является-like
текущим символом$_
из предыдущего индекса. Поэтому будут выведены любые символы, которые являются общими для двух элементов массива. Таким образом, внешнее предложение будет правдивым только в том случае, если есть общий символ (поскольку в PowerShell пустой массив ложный), и поэтому индекс будет выбран только при наличии общих символов.Затем, мы собираем все индексы , которые соответствуют критериям, и убедитесь , что
.count
их является-eq
UAL длиной входного массива. Этот логический результат остается в конвейере, а вывод неявным.источник
Perl 5 , 31 байт
Порт Мартина Эндера красивый ответ .
30 байт кода +
-p
флаг.Попробуйте онлайн!
источник
APL (Dyalog APL) , 9 байтов
Попробуйте онлайн!
∧/
все в списке×
знаки≢
из подсчета¨
каждый из2∩/
парные пересечения⎕
вход?источник
PHP,
6568переберите все числа и удалите все цифры, которые появились в предыдущем. Посчитайте, как часто оно совпадает с самим числом (без удаления цифры). Если хотя бы один из них равнялся, у нас не было совпадений в одной из пар.
Исправлена ошибка с использованием
trim
insted ofstrtr
. Благодаря @ JörgHülsermannисточник
["filename",1,11,414]
не работаетtrim
работает только для начальных и конечных символов. Починил это.a&
вместоnull!==
(-5 байт).$argv[$i]
, потому что "Если из и иметь разную длину, дополнительные символы в длинных из двух игнорируются". (из руководства)PHP, 75 байт
принимает числа из аргументов командной строки;
1
выходить с ложью, с0
правдой.Запустите
-r
или протестируйте его онлайн .$b
= число, содержащее все цифры$b
из аргумента$b
1
0
источник
PHP, 77 байт
источник
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
77 байт (не проверено).$k--
на--$k
одну и отказаться от нее ), после этого ваш подход должен сработать, и вы должны добавить @ для предупреждения$k--
. Я специально использовал его, чтобы $ k по-прежнему равнялось 0 при первом запуске. И предупреждения игнорируются. Это означает, что код теперь составляет 76 байтов, но все еще не проверен.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
работает как надо. Тестирование с помощью$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
дисплеев1
и тестирование с помощью$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
дисплеев0
, как и ожидалось.MATL , 14 байтов
Попробуйте онлайн!
Спасибо @LuisMendo за сохранение байта. Объяснение:
источник
1)VG
на1&)
(и это позволит избежать повторения первого числа))
дает выбранные значения в качестве первого выхода, а затем оставшиеся значения в качестве второго выводаClojure, 71 байт
Анонимная функция, которая принимает последовательность чисел. Возвращает
true
/false
.Мне нравится, как это читается. Здесь определенно есть несколько областей, которые можно улучшить. Моя функция передается
map
не может быть легко изменена, так что для нее не требуется макрос функции, что означает, что вся функция не может использовать макрос, который, вероятно, добавил несколько байтов. Также было бы хорошо, если бы я мог найти лучший способ распаковки значений вevery?
предикате.источник
SimpleTemplate, 124 байта
Вау, это была тренировка!
Это «просто» делает регулярное выражение, используя старый элемент, показывая
1
как истинное значение, или ничего другого.Ungolfed:
источник
JavaScript (ES6), 37 байт
Принимает ввод как строку разделенных новой строкой чисел. Основано на превосходном ответе Retina @ MartinEnder, но выполняет весь тест в одном регулярном выражении, потому что в этом случае он короче в JavaScript.
источник
зернышко ,
1210 байтПринимает ввод как последовательность аргументов командной строки. Вывод - непустой список для правды и пустой список для фалси.Попробуйте онлайн или проверьте все контрольные примеры .
объяснение
источник
Röda ,
4535 байтПопробуйте онлайн!
Это похоже на решение Perl 5, которое является портом решения Retina от Martin Ender. -10 байт благодаря @Neil.
Вот другое решение (
7372 байта):Это анонимная функция, которая извлекает строки из потока и проверяет, что последовательные строки содержат одинаковые символы. Объяснение:
Это может быть в гольф больше ...
источник
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Утилиты Bash + Unix,
7169 байтПопробуйте онлайн!
Ввод на стандартный ввод, один номер в строке.
Выход находится в коде выхода: 0 для правды, 1 для фальси.
Это, вероятно, может быть в гольф больше.
Чтобы приведенный выше код работал, в текущем каталоге не может быть ни одного файла, имя которого состоит из одной цифры. Если это не приемлемо, замените
[\1]
в программе'[\1]'
(стоимостью 2 дополнительных байта).Пробный прогон (последний тестовый пример, представленный в задании):
(1 вот фальси.)
Как это работает:
Я продемонстрирую на примере выше.
Команда sed преобразует ввод в:
Команда tr затем преобразует это в строку:
Эта строка является командой оболочки для выполнения желаемой операции, поэтому я передаю ее в sh и все готово.
источник
Q, 57 байт
Примечание: 0 добавляется к началу входного массива внутри функции. Это было сделано для того, чтобы сравнение по первому элементу было сделано зачислено. В противном случае последний символ первого элемента будет выбран для сравнения. Однако можно выполнить проверку типа, которая добавляет 7 байтов к текущему количеству.
источник