Inspirado por esta postagem migrada mal recebida .
O chefe de segurança da sua empresa está preocupado com o seu sistema de geração de PIN depois que ele o forneceu 12345
. Ele também não gostou da piada de Spaceballs que você fez às custas dele, então você foi delegado a reescrever o gerador de PIN. Como ele precisa se encaixar em algum hardware especial, você deve torná-lo o menor possível.
Sua tarefa
- Você pega duas entradas - número de PINs e tamanho do PIN em dígitos.
- Gere o número especificado de PINs do tamanho especificado aleatoriamente e imprima-o.
- Todos os PINs válidos do tamanho devem poder ser impressos, mesmo que não sejam uniformemente prováveis.
No entanto, existem algumas restrições nos PINs - eis os inválidos:
- Se todos os pares tiverem o mesmo dígito:
114422
(Nota: isso obviamente incluirá todos os PINs do mesmo dígito). - PINs cada vez mais lineares (10): modificação
246802
. - Todos os grupos de 3 são linhas físicas no teclado de
1 2 3;4 5 6;7 8 9;bksp 0 enter;
:147369
. - O PIN pode ser totalmente dividido em grupos da regra 1 e 3.
- Se todos os pares tiverem o mesmo dígito:
- Isso é código-golfe , então o código mais curto em bytes vence!
55123
)?123
, mas55432
seria bom.Respostas:
Pitão, 120 bytes
Achei que eu deveria adicionar uma implementação real então. Gera números aleatórios até encontrar um que atenda a todos os requisitos. Provavelmente pode ser melhorado muito!
Versão online
fonte
Perl 5, 244
Começa com a geração de números aleatórios para o tamanho especificado.
E apenas imprime aqueles que não atendem às restrições.
Encontrar uma solução para as linhas do teclado (sem combinações codificadas) foi meio divertido.
Teste
fonte