Introducción
En un chat privado, un amigo mío aparentemente se topó recientemente con un sistema de seguridad que tiene las siguientes dos restricciones en sus pines válidos:
- Cada dígito debe ser único (es decir, "1" solo puede aparecer una vez)
- El orden de los dígitos no importa ("1234" = "4321")
Entonces, para ilustrar cuán malo es este sistema de candado, ¡enumeremos todos los PIN válidos!
Entrada
Su entrada consistirá en un único número entero positivo, que denota la longitud del PIN.
Salida
Su salida consiste en una lista de enteros o cadenas * no negativos, que enumeran todos los PIN válidos de la longitud dada.
* Más precisamente, algo que un humano puede usar para probar todas las combinaciones si lo imprime para ellos. Esto significa que un conjunto de conjuntos de dígitos y conjuntos de conjuntos de dígitos están bien.
¿Quién gana?
Este es el código de golf, por lo que gana la respuesta más corta en bytes. Se aplican reglas estándar y lagunas .
Casos de esquina
- El comportamiento de salida no está definido si se ingresa un entero mayor que 10.
- El orden de los dígitos dentro de cada entrada de salida no está definido, ya que las entradas con un cero realmente contienen dicho cero, es decir, no puede quitar "0123" a "123" pero "1230", "1203" y "1023" son válidos como es "0123".
Casos de prueba
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]
fuente
Respuestas:
Jalea , 4 bytes
Pruébalo en línea!
Explicación
El comportamiento para
n > 10
es una lista vacía.fuente
05AB1E , 5 bytes
Pruébalo en línea!
Explicación
fuente
ù
era una cosa. Estoy bastante seguro de que he usado filtro antes. ¿Qué tan nuevo es ese?JavaScript (ES7), 89 bytes
Devuelve una lista de listas de dígitos (como caracteres) o una lista vacía si n> 10 .
Pruébalo en línea!
¿Cómo?
Primero generamos una lista de todos los dígitos decimales como caracteres calculando 2 29 = 536870912 , agregando el '4' que falta y dividiendo:
Luego calculamos el conjunto de potencia:
Finalmente, filtramos los resultados en su longitud:
fuente
Python 3 , 57 bytes
Pruébalo en línea!
Encuentra todas las combinaciones
0 .. 9
de longitudl
.El comportamiento para
n > 10
es una lista vacía.fuente
Wolfram Language (Mathematica) , 22 bytes
Pruébalo en línea!
fuente
Python 2 , 62 bytes
Devuelve un conjunto de cadenas.
Pruébalo en línea!
fuente
Pyth, 4 bytes
Pruébalo aquí
Explicación
fuente
R , 17 bytes
Pruébalo en línea!
Errores de entrada mayores que
10
.Devuelve un
matrix
donde cada columna es un PIN.fuente
Rubí , 30 bytes.
Pruébalo en línea!
fuente
MATL , 6 bytes
Pruébalo en línea!
No devuelve nada (matriz vacía) para
k>10
.fuente
Haskell ,
5650 bytes-6 bytes gracias a Hat Wizard .
Pruébalo en línea!
fuente
Java (JDK 10) , 105 bytes
Pruébalo en línea!
fuente
Haskell , 47 bytes
Pruébalo en línea!
Explicación
Cuando el número de dígitos es cero, solo hay una combinación, que es la vacía:
Cuando el número de dígitos es
n
yn/=0
las combinaciones son todas las formas de agregar dígitos a combinaciones def$n-1
tal manera que no se agrega ningún dígito a una combinación que ya lo contiene.fuente
Gaia ,
43 bytesPruébalo en línea!
¡Ha pasado un tiempo desde que publiqué una respuesta en Gaia! ¡Gracias al Sr. Xcoder por guardar un byte!
fuente
@
.Retina ,
5136 bytesPruébalo en línea! Salidas para nada
n>10
. Explicación:Reemplace la entrada con 10
_
s.Repita el resto del programa.
n
tiempos del .Prefije cada número con
_
repetido según su primer dígito.Coincide con todos los
_
s, pero incluye todos los siguientes_
s en el partido, para lo cual debemos habilitar coincidencias superpuestas.Para cada
_
encontrado, prefije el número de_
s a su izquierda al número.Esto es un poco complicado, por lo que quizás un caso real sería mejor. Supongamos que ya hemos ejecutado el ciclo dos veces, de modo que se han generado todos los PIN de 2 dígitos, y actualmente estamos trabajando para crear PIN de 3 dígitos. Veremos qué sucede con
36
: El primer dígito es3
, por lo tanto, tres_
prefijos, para hacer___36
. Esto crea las siguientes coincidencias, marcadas aquí con`'
s:$%'
evalúa36
en los tres casos, dando como resultado los PIN de 3 dígitos036
,136
y236
.Si luego creáramos PIN de 4 dígitos, entonces
036
no tendríamos ningún_
prefijo y, por lo tanto, no habría coincidencias en la salida final.fuente
^0
y¶
a un costo de 5 bytes.Protón , 43 bytes
Pruébalo en línea!
Proton finalmente supera a Python: DI pensó
(import itertools)
que devolvería el valor, pero aparentemente fallé en eso. También importar*
después no funciona porque no está en una lambda, es una expresión de nivel superior.fuente
Japt, 5 bytes
Emite una matriz de matrices de dígitos. Emite todas las combinaciones si input es
0
o una matriz vacía si input es<0
o>10
.Intentalo
Explicación
fuente
Stax , 4 bytes
Pruébalo en línea!
Vd
es"0123456789"
.,
empuja la entrada a la pila principal.S
obtiene combinaciones del tamaño especificado.En el enlace tio,
m
se utiliza en el pie de página para imprimir cada salida.fuente
ML estándar ,
124122121 bytesPruébalo en línea! Ejemplo de uso:
!2
rendimientos[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[1,0],[1,2],[1,3], ...]
.Sin golf:
Algunas alternativas:
125123 bytesPruébalo en línea!Define una función anónima a la que está vinculado
it
.127124 bytesPruébalo en línea!
fuente
JavaScript (Node.js) , 53 bytes
Pruébalo en línea!
fuente
Oracle 18 SQL, 169 bytes
No es un lenguaje de golf pero:
Se esperaba que la entrada estuviera en una tabla
i
con columnaa
:Pruébelo en línea en Oracle Live SQL (se requiere un inicio de sesión gratuito y luego copie y pegue la solución en una hoja de trabajo) o SQLFiddle (sin inicio de sesión, pero requiere +7 bytes para funcionar en la versión inferior de Oracle).
fuente
CJam ,
1311 bytesPruébalo en línea!
Técnicamente no se ejecuta en tio.run, ya que se agota el espacio de almacenamiento dinámico. Sin embargo, funciona correctamente para teclados de hasta 9 dígitos, y debería funcionar bien con más RAM.
Guardado 2 bytes gracias a Dennis
fuente
Bash ,
11399 bytesPruébalo en línea!
fuente
r 0
no funcionar
es la función recursiva: no se debe lanzar con solo 1 parámetro.p 0
El comportamiento no se especifica en la pregunta.JavaScript (Firefox 30-57), 67 bytes
El puerto de mi respuesta Retina, pero también funciona para
n=0
(devolver una lista de una cadena vacía, a diferencia de una lista vacía paran>10
).fuente
Carbón , 21 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Empuje la cadena vacía a la lista predefinida.
Pase sobre cada dígito.
Agregue el dígito a cada cadena en la lista.
Agregue el resultado a la lista original.
Imprima todas las cadenas con el número correcto de dígitos.
fuente
Perl 6 , 20 bytes
Pruébalo en línea!
Esto es exactamente para qué sirve
combinations
(como una subrutina o.combinations
en una lista).https://docs.perl6.org/routine/combinations
fuente
J , 32 bytes
.. frustrantemente más largo que Mathematica y R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOfuente