Inspirado por esta publicación migrada mal recibida .
El jefe de seguridad de su empresa está preocupado por su sistema generador de PIN después de que se lo dio 12345
. Tampoco apreciaba realmente la broma de Spaceballs que hiciste a su costa, por lo que se te ha delegado para volver a escribir el generador de PIN. Como tiene que caber en un hardware especial, debe hacerlo lo más pequeño posible.
Tu tarea
- Toma dos entradas: número de PIN y tamaño de PIN en dígitos.
- Genere al azar el número especificado de PIN del tamaño especificado e imprímalo.
- Todos los PIN válidos del tamaño deben poder imprimirse, incluso si no son uniformemente probables.
Sin embargo, existen algunas restricciones en los PIN: aquí están los inválidos:
- Si todos los pares son del mismo dígito:
114422
(Nota: obviamente, esto incluirá todos los PIN de los mismos dígitos). - PINs Cada vez más lineales (mod 10):
246802
. - Todos los grupos de 3 líneas físicas en el teclado de
1 2 3;4 5 6;7 8 9;bksp 0 enter;
:147369
. - El PIN se puede dividir por completo en grupos de la regla 1 y la regla 3.
- Si todos los pares son del mismo dígito:
- Este es el código de golf , por lo que gana el código más corto en bytes .
55123
)?123
, pero55432
estaría bien.Respuestas:
Pyth, 120 bytes
Pensé que debería agregar una implementación real entonces. Genera números aleatorios hasta encontrar uno que cumpla con todos los requisitos. ¡Probablemente se puede mejorar mucho!
Versión en línea
fuente
Perl 5, 244
Comienza generando números aleatorios para el tamaño dado.
Y solo imprime aquellos que no cumplen con las restricciones.
Encontrar una solución para las líneas del teclado (sin combinaciones de codificación) fue un poco divertido.
Prueba
fuente