Вступление
В приватном чате мой друг, по-видимому, недавно наткнулся на систему безопасности, которая имеет следующие два ограничения на действительные контакты:
- Каждая цифра должна быть уникальной (то есть «1» может появляться только один раз)
- Порядок цифр не имеет значения ("1234" = "4321")
Итак, чтобы проиллюстрировать, насколько плоха эта система блокировки, давайте на самом деле перечислим все действующие ПИН-коды!
вход
Ваш ввод будет состоять из единственного положительного целого числа, которое обозначает длину PIN-кода.
Выход
Ваш вывод состоит из списка неотрицательных целых чисел или строк *, которые перечисляют все действительные PIN-коды заданной длины.
* Точнее, то, что человек может использовать, чтобы попробовать все комбинации, если бы вы напечатали это для них. Это означает, что набор наборов цифр и массивов массивов цифр в порядке.
Кто выигрывает?
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах! Применяются стандартные правила и лазейки .
Угловые чехлы
- Поведение вывода не определено, если введено целое число больше 10.
- Порядок цифр в каждой выходной записи не определен, так как записи с нулем на самом деле содержат указанный ноль, то есть вы не можете разделять «0123» до «123», но «1230», «1203» и «1023» действительны как это "0123".
Тестовые случаи
1
[0,1,2,3,4,5,6,7,8,9]
2
[10,20,30,40,50,60,70,80,90,21,31,41,51,61,71,81,91,32,42,52,62,72,82,92,43,53,63,73,83,93,54,64,74,84,94,65,75,85,95,76,86,96,87,97,98]
3
[210,310,410,510,610,710,810,910,320,420,520,620,720,820,920,430,530,630,730,830,930,540,640,740,840,940,650,750,850,950,760,860,960,870,970,980,321,421,521,621,721,821,921,431,531,631,731,831,931,541,641,741,841,941,651,751,851,951,761,861,961,871,971,981,432,532,632,732,832,932,542,642,742,842,942,652,752,852,952,762,862,962,872,972,982,543,643,743,843,943,653,753,853,953,763,863,963,873,973,983,654,754,854,954,764,864,964,874,974,984,765,865,965,875,975,985,876,976,986,987]
4
[3210,4210,5210,6210,7210,8210,9210,4310,5310,6310,7310,8310,9310,5410,6410,7410,8410,9410,6510,7510,8510,9510,7610,8610,9610,8710,9710,9810,4320,5320,6320,7320,8320,9320,5420,6420,7420,8420,9420,6520,7520,8520,9520,7620,8620,9620,8720,9720,9820,5430,6430,7430,8430,9430,6530,7530,8530,9530,7630,8630,9630,8730,9730,9830,6540,7540,8540,9540,7640,8640,9640,8740,9740,9840,7650,8650,9650,8750,9750,9850,8760,9760,9860,9870,4321,5321,6321,7321,8321,9321,5421,6421,7421,8421,9421,6521,7521,8521,9521,7621,8621,9621,8721,9721,9821,5431,6431,7431,8431,9431,6531,7531,8531,9531,7631,8631,9631,8731,9731,9831,6541,7541,8541,9541,7641,8641,9641,8741,9741,9841,7651,8651,9651,8751,9751,9851,8761,9761,9861,9871,5432,6432,7432,8432,9432,6532,7532,8532,9532,7632,8632,9632,8732,9732,9832,6542,7542,8542,9542,7642,8642,9642,8742,9742,9842,7652,8652,9652,8752,9752,9852,8762,9762,9862,9872,6543,7543,8543,9543,7643,8643,9643,8743,9743,9843,7653,8653,9653,8753,9753,9853,8763,9763,9863,9873,7654,8654,9654,8754,9754,9854,8764,9764,9864,9874,8765,9765,9865,9875,9876]
источник
Ответы:
Желе , 4 байта
Попробуйте онлайн!
объяснение
Поведение для
n > 10
пустого списка.источник
05AB1E , 5 байтов
Попробуйте онлайн!
объяснение
источник
ù
была вещь. Я уверен, что раньше использовал фильтр. Насколько новый это?JavaScript (ES7), 89 байт
Возвращает список списков цифр (в виде символов) или пустой список, если n> 10 .
Попробуйте онлайн!
Как?
Сначала мы генерируем список всех десятичных цифр в виде символов, вычисляя 2 29 = 536870912 , добавляя пропущенное «4» и разделяя:
Затем мы вычисляем powerset:
Наконец, мы фильтруем результаты по их длине:
источник
Python 3 , 57 байт
Попробуйте онлайн!
Находит все комбинации
0 .. 9
длиныl
.Поведение для
n > 10
пустого списка.источник
Wolfram Language (Mathematica) , 22 байта
Попробуйте онлайн!
источник
Python 2 , 62 байта
Возвращает набор строк.
Попробуйте онлайн!
источник
Pyth, 4 байта
Попробуй здесь
объяснение
источник
R , 17 байт
Попробуйте онлайн!
Ошибки для ввода больше, чем
10
.Возвращает
matrix
где каждый столбец является PIN-кодом.источник
Рубин , 30 байтов
Попробуйте онлайн!
источник
MATL , 6 байтов
Попробуйте онлайн!
Ничего не возвращает (пустой массив) для
k>10
.источник
Haskell ,
5650 байт-6 байт благодаря Hat Wizard .
Попробуйте онлайн!
источник
Java (JDK 10) , 105 байт
Попробуйте онлайн!
источник
Haskell , 47 байтов
Попробуйте онлайн!
объяснение
Когда количество цифр равно нулю, существует только одна комбинация - пустая:
Когда количество цифр равно,
n
аn/=0
комбинации - это все способы добавить цифры к комбинациямf$n-1
, чтобы ни одна цифра не добавлялась к комбинации, которая уже содержит ее.источник
Gaia ,
43 байтаПопробуйте онлайн!
Прошло много времени с тех пор, как я опубликовал ответ в Gaia! Спасибо мистеру Xcoder за сохранение байта!
источник
@
.Retina ,
5136 байтПопробуйте онлайн! Выходы ничего не для
n>10
. Объяснение:Заменить вход на 10
_
с.Повторите остальное время программы
n
.Префикс каждого числа
_
повторяется в соответствии с его первой цифрой.Сопоставьте все
_
s, но_
включите также все следующие s в совпадение, для которого нам нужно включить перекрывающиеся совпадения.Для каждого
_
найденного префикса число_
s слева от номера.Это немного сложно, поэтому, возможно, реальный случай будет лучше. Давайте предположим, что мы уже выполнили цикл дважды, так что все двухзначные PIN-коды были сгенерированы, и в настоящее время мы работаем над их созданием трехзначных PIN-кодов. Мы посмотрим, что происходит с
36
: первая цифра3
, так что три_
с префиксом, чтобы сделать___36
. Затем создаются следующие совпадения, помеченные здесь с помощью`'
s:$%'
расценивается как36
во всех трех случаях, в результате чего 3-значный PIN - коды036
,136
и236
.Если бы мы тогда продолжали создавать 4-значные ПИН-коды, то
036
не имели бы_
префикса s и, следовательно, не приводили бы ни к каким совпадениям в конечном результате.источник
^0
и¶
стоимость 5 байт.Протон , 43 байта
Попробуйте онлайн!
Proton finally outgolfs Python :D I thought
(import itertools)
would return the value but apparently I failed at that. Also importing*
afterwards doesn't work because it's not in a lambda, it's a top-level expression.источник
Japt, 5 bytes
Outputs an array of digit arrays. Outputs all combinations if input is
0
or an empty array if input is<0
or>10
.Try it
Explanation
источник
Stax , 4 байта
Попробуйте онлайн!
Vd
есть"0123456789"
.,
толкает ввод в основной стек.S
gets combinations of the specified size.В ссылке tio
m
используется в нижнем колонтитуле для печати каждого вывода.источник
Стандарт ML ,
124122121 байтПопробуйте онлайн! Пример использования:
!2
доходность[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[1,0],[1,2],[1,3], ...]
.Ungolfed:
Некоторые альтернативы:
125123 байтаПопробуйте онлайн! Определяет анонимную функцию, которая связана с
it
.127124 байтаПопробуйте онлайн!
источник
JavaScript (Node.js) , 53 байта
Попробуйте онлайн!
источник
Oracle 18 SQL, 169 байт
Не язык игры в гольф, но:
Ожидается, что вход будет в таблице
i
со столбцомa
:Попробуйте онлайн в Oracle Live SQL (требуется бесплатный вход в систему, затем скопируйте и вставьте решение в рабочую таблицу) или в SQLFiddle (без входа в систему, но для работы в более низкой версии Oracle требуется +7 байт).
источник
CJam ,
1311 байтПопробуйте онлайн!
Технически не работает на tio.run, так как место в куче заканчивается. Тем не менее, он работает должным образом для 9-значных клавиатур и должен нормально работать с большим объемом оперативной памяти.
Сохранено 2 байта благодаря Денису
источник
Bash,
11399 bytesTry it online!
источник
r 0
doesn't work.r
is the recursive function: it's not meant to be launched with only 1 parameter.p 0
behaviour is unspecified in the question.JavaScript (Firefox 30-57), 67 bytes
Port of my Retina answer, but works for
n=0
too (returning a list of an empty string, as distinct from an empty list forn>10
).источник
Charcoal, 21 bytes
Try it online! Link is to verbose version of code. Explanation:
Push the empty string to the predefined list.
Loop over each digit.
Append the digit to every string in the list.
Append the result to the original list.
Print all strings with the correct number of digits.
источник
Perl 6, 20 bytes
Try it online!
This is exactly what
combinations
(as a subroutine, or.combinations
on a list) is for.https://docs.perl6.org/routine/combinations
источник
J, 32 bytes
.. frustratingly longer than Mathematica and R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOисточник