Scénario
J'utilise un écran de verrouillage correspondant à un motif et j'ai malheureusement oublié mon motif. Je voudrais savoir combien de temps il me faudra pour le déverrouiller. Voici les spécifications de l'écran de verrouillage de Google, que nous utiliserons pour ce défi.
- Tous les 5 mauvais codes, l'utilisateur doit attendre
30 seconds
avant toute nouvelle entrée. Un modèle doit au moins consister en
4 points
(voir ci-dessous)Un point ne peut être utilisé qu'une seule fois, mais vous pouvez le parcourir plusieurs fois (voir l'image ci-dessous):
Ici, le point central n'est utilisé qu'une seule fois, même si nous le repassons pour ce motif particulier.
Hypothèse et faits
Nous supposerons que nous sommes des super-héros et que nous pouvons dessiner n'importe quel motif 1 second
, nous n'avons jamais besoin de manger ou de dormir. Oui, nous sommes surhumains.
Je suis une personne très malchanceuse. "Le pire des cas" est ma vie quotidienne, donc le schéma que je vais essayer en dernier sera le bon.
Que devons-nous pwn?
Pour ceux qui ne le savent pas, Android (et d'autres téléphones maintenant) offre la possibilité de déverrouiller le téléphone en dessinant un motif sur une matrice à 9 points. Cette matrice peut être décrite comme suit:
C(A) M(B) C(C)
M(D) X(E) M(F)
C(G) M(H) C(I)
- C signifie "point d'angle"
- M pour "point médian"
- X pour "point central"
- J'ai donné des identifiants aux points pour le rendre plus facile
Les connexions directes autorisées sont les suivantes:
Point d'angle:
Point médian:
Point central :
Cependant, comme l'a souligné steveverrill, "une fois que le centre a été utilisé (et devient donc indisponible), une connexion directe entre le coin inférieur gauche et le coin supérieur droit devient sans ambiguïté et donc possible". Il en va de même pour chaque "point médian", si par exemple le point B a déjà été compté, alors une connexion directe entre A et C est possible. Si par exemple F a déjà été compté, alors une connexion directe entre C et I est possible. Etc...
Règles
- Le but de ce défi est de restituer combien de temps (sous forme lisible par l'homme, alias année / jour / mois / heure / quelle que soit l'heure que vous trouverez), j'aurai besoin de déverrouiller ce putain de téléphone.
- Vous ne pouvez pas coder en dur le nombre de modèles valides possibles (ne le faites même pas sur Google, vous tromper), le calculer (c'est en fait la partie amusante, n'est-ce pas?)
- Le morceau de code le plus court gagne
- Bonne chance !
la source
Réponses:
Rebmu :
197 175 168167 caractèresGénère des combinaisons sous la forme d'une série de nombres (ex. 12369 est en haut à gauche à en haut à droite à en bas à droite), vérifie si la combinaison est valide et incrémente un compteur si elle l'est. L' exécution peut prendre un certain temps * . Renvoie le nombre de secondes nécessaires pour déverrouiller le téléphone.
Imperturbable et commenté:
Le programme boucle de 1 à (987654321-1233), vérifiant 1233 + compteur de boucles (donc vérifiant 1234 à 987654321).
Si le numéro
987653088
est remplacé par,9876-1233
ou8643
, le programme trouvera le temps nécessaire pour toutes les combinaisons de 4 points.Sortie pour
9876-1233=8643
(combinaisons à 4 points):Sortie pour
98765-1233=97532
(combinaisons 4 et 5 points):Sortie pour
987654-1233=986421
(combinaisons de 4,5,6 points):* 4/5 points m'a pris environ 8 secondes pour courir; 4-6 a pris environ 77 secondes. Cela peut prendre environ 24 heures ou plus, selon la personne qui l'exécute, pour calculer le nombre de combinaisons pour les combinaisons de 4 à 9 points.
la source