Inspiré par ce post migré mal reçu .
Le responsable de la sécurité de votre entreprise s'inquiète de votre système de génération de code PIN après sa remise 12345
. Il n'a pas non plus vraiment apprécié la blague Spaceballs que vous avez faite à ses dépens, vous avez donc été délégué pour réécrire le générateur de code PIN. Puisqu'il doit tenir sur du matériel spécial, vous devez le rendre aussi petit que possible.
Ta tâche
- Vous prenez deux entrées: le nombre de PIN et la taille du PIN en chiffres.
- Générez au hasard le nombre spécifié de codes PIN de la taille spécifiée et imprimez-le.
- Tous les codes PIN valides de la taille doivent pouvoir être imprimés, même s'ils ne sont pas uniformément probables.
Cependant, il existe certaines restrictions sur les codes confidentiels - voici les non valides:
- Si toutes les paires ont le même chiffre:
114422
(Remarque: cela inclura évidemment tous les mêmes chiffres PIN). - De plus en plus PINs linéaires (mod 10):
246802
. - Tous les groupes de 3 sont des lignes physiques sur le clavier
1 2 3;4 5 6;7 8 9;bksp 0 enter;
:147369
. - Le code PIN peut être entièrement divisé en groupes de la règle 1 et de la règle 3.
- Si toutes les paires ont le même chiffre:
- C'est le code-golf , donc le code le plus court en octets gagne!
55123
)?123
, mais ce55432
serait bien.Réponses:
Pyth, 120 octets
Je pensais que je devrais alors ajouter une véritable implémentation. Génère des nombres aléatoires jusqu'à ce qu'il en trouve un qui réponde à toutes les exigences. Peut probablement être beaucoup amélioré!
Version en ligne
la source
Perl 5, 244
Commence par générer des nombres aléatoires pour la taille donnée.
Et n'imprime que ceux qui ne respectent pas les restrictions.
Trouver une solution pour les lignes du clavier (sans combinaisons de codage en dur) était plutôt amusant.
Tester
la source