Introdução
Em um bate-papo particular, um amigo meu aparentemente tropeçou recentemente em um sistema de segurança que possui as duas restrições a seguir nos pinos válidos:
- Cada dígito deve ser exclusivo ("1" pode aparecer apenas uma vez)
- A ordem dos dígitos não importa ("1234" = "4321")
Então, para ilustrar o quão ruim é esse sistema de cadeados, vamos enumerar todos os PINs válidos!
Entrada
Sua entrada consistirá em um único número inteiro positivo, que indica o comprimento do PIN.
Resultado
Sua saída consiste em uma lista de números inteiros não negativos ou sequências *, que enumeram todos os PINs válidos do comprimento especificado.
* Mais precisamente, algo que um ser humano pode usar para experimentar todas as combinações, se você as imprimir. Isso significa que conjunto de conjuntos de dígitos e matrizes de matrizes de dígitos estão corretos.
Quem ganha?
Isso é código-golfe, então a resposta mais curta em bytes vence! Aplicam-se regras e brechas padrão .
Estojos de canto
- O comportamento da saída é indefinido se um número inteiro maior que 10 for inserido.
- A ordem dos dígitos em cada entrada de saída é indefinida, pois as entradas com zero realmente contêm o referido zero, ou seja, você não pode retirar de "0123" a "123", mas "1230", "1203" e "1023" são válidos como é "0123".
Casos de teste
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]
fonte
Respostas:
Gelatina , 4 bytes
Experimente online!
Explicação
Comportamento para
n > 10
é lista vazia.fonte
05AB1E , 5 bytes
Experimente online!
Explicação
fonte
ù
era uma coisa. Tenho certeza que já usei filtro antes. Quão novo é esse?JavaScript (ES7), 89 bytes
Retorna uma lista de listas de dígitos (como caracteres) ou uma lista vazia se n> 10 .
Experimente online!
Quão?
Primeiro, geramos uma lista de todos os dígitos decimais como caracteres, calculando 2 29 = 536870912 , adicionando o número ausente '4' e dividindo:
Em seguida, calculamos o conjunto de potência:
Por fim, filtramos os resultados em seu comprimento:
fonte
Python 3 , 57 bytes
Experimente online!
Encontra todas as combinações de
0 .. 9
de comprimentol
.O comportamento de
n > 10
é lista vazia.fonte
Wolfram Language (Mathematica) , 22 bytes
Experimente online!
fonte
Python 2 , 62 bytes
Retorna um conjunto de strings.
Experimente online!
fonte
Pitão, 4 bytes
Experimente aqui
Explicação
fonte
R , 17 bytes
Experimente online!
Erros para entrada maior que
10
.Retorna um
matrix
onde cada coluna é um PIN.fonte
Ruby , 30 bytes
Experimente online!
fonte
MATL , 6 bytes
Experimente online!
Retorna nada (matriz vazia) para
k>10
.fonte
Haskell ,
5650 bytes-6 bytes graças ao Hat Wizard .
Experimente online!
fonte
Java (JDK 10) , 105 bytes
Experimente online!
fonte
Haskell , 47 bytes
Experimente online!
Explicação
Quando o número de dígitos é zero, existe apenas uma combinação, ou seja, a vazia:
Quando o número de dígitos é
n
en/=0
as combinações são todas as formas de adicionar dígitos a combinações, def$n-1
modo que nenhum dígito seja adicionado a uma combinação que já o contém.fonte
Gaia ,
43 bytesExperimente online!
Já faz um tempo desde que eu postei uma resposta em Gaia! Obrigado ao Sr. Xcoder por salvar um byte!
fonte
@
.Retina ,
5136 bytesExperimente online! Não produz nada para
n>10
. Explicação:Substitua a entrada por 10
_
s.Repita o restante dos
n
tempos do programa .Prefixe cada número com
_
repetido de acordo com seu primeiro dígito.Corresponda a todos os
_
s, mas inclua todos os seguintes_
s na correspondência também, para os quais precisamos ativar correspondências sobrepostas.Para cada
_
encontrado, prefixe o número de_
s à esquerda do número.Isso é um pouco complicado, então talvez um caso real seja melhor. Vamos supor que já executamos o loop duas vezes, para que todos os PINs de dois dígitos tenham sido gerados e, atualmente, estamos trabalhando neles para criar PINs de três dígitos. Veremos o que acontece com
36
: O primeiro dígito é3
, portanto, três_
s são prefixados, para serem criados___36
. Isso cria as seguintes correspondências, marcadas aqui com`'
s:$%'
resulte em36
em todos os três casos, resultando nos pinos 3 dígitos036
,136
e236
.Se formos criar PINs de quatro dígitos,
036
não teremos nenhum_
s como prefixo e, portanto, não resultará em nenhuma correspondência na saída final.fonte
^0
e¶
a um custo de 5 bytes.Próton , 43 bytes
Experimente online!
Proton finalmente supera o Python: o DI pensou
(import itertools)
que retornaria o valor, mas aparentemente eu falhei nisso. A importação*
posterior também não funciona porque não está em um lambda, é uma expressão de nível superior.fonte
Japt, 5 bytes
Gera uma matriz de matrizes de dígitos. Produz todas as combinações se a entrada for
0
ou uma matriz vazia se a entrada for<0
ou>10
.Tente
Explicação
fonte
Stax , 4 bytes
Experimente online!
Vd
é"0123456789"
.,
empurra a entrada para a pilha principal.S
obtém combinações do tamanho especificado.No link tio,
m
é usado no rodapé para imprimir cada saída.fonte
ML padrão ,
124122121 bytesExperimente online! Exemplo de uso:
!2
rendimentos[[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:
Algumas alternativas:
125123 bytesExperimente online! Define uma função anônima à qual está vinculado
it
.127124 bytesExperimente online!
fonte
JavaScript (Node.js) , 53 bytes
Experimente online!
fonte
Oracle 18 SQL, 169 bytes
Não é um idioma de golfe, mas:
Esperava que a entrada estivesse em uma tabela
i
com colunaa
:Experimente online no Oracle Live SQL (é necessário um login gratuito e copie e cole a solução em uma planilha) ou SQLFiddle (sem login, mas requer +7 bytes para trabalhar na versão inferior do Oracle).
fonte
CJam ,
1311 bytesExperimente online!
Tecnicamente, não é executado no tio.run, pois o espaço da pilha acaba. No entanto, ele funciona corretamente para teclados de até 9 dígitos e deve funcionar bem com mais RAM.
Economizou 2 bytes graças a Dennis
fonte
Bash ,
11399 bytesExperimente online!
fonte
r 0
não funcionar
é a função recursiva: não deve ser lançada com apenas 1 parâmetro.p 0
comportamento não é especificado na pergunta.JavaScript (Firefox 30-57), 67 bytes
Porta da minha resposta Retina, mas funciona
n=0
também (retornando uma lista de uma sequência vazia, diferente de uma lista vazia paran>10
).fonte
Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Envie a sequência vazia para a lista predefinida.
Faça um loop sobre cada dígito.
Anexe o dígito a todas as strings da lista.
Anexe o resultado à lista original.
Imprima todas as strings com o número correto de dígitos.
fonte
Perl 6 , 20 bytes
Experimente online!
É exatamente para isso
combinations
(como uma sub-rotina ou.combinations
em uma lista).https://docs.perl6.org/routine/combinations
fonte
J , 32 bytes
.. frustrantemente mais do que Mathematica e R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOfonte