On vous donne un entier non négatif (base 9) non négatif composé des chiffres de 0 à 8 comme d'habitude. Cependant, le nombre de chiffres de ce nombre (sans zéros de tête) est un carré préfet.
Pour cette raison, le nombre peut être organisé dans une grille carrée (avec l'ordre de lecture toujours préservé).
Exemple avec 1480 (1125 base 10):
14
80
Maintenant, laissez chaque chiffre dans une telle grille nonaire indiquer un mouvement vers un autre espace de la grille (avec des conditions aux limites périodiques ):
432
501
678
Cela veut dire que
0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down
Donc, si dans la grille 1480 vous commencez au 4, vous montez ensuite (rappelez-vous pbc) et à gauche au 8, ce qui signifie que vous vous déplacez à droite et en bas vers le 4, en commençant un cycle avec la période 2.
En général, ce processus se poursuit jusqu'à ce que vous atteigniez un 0 ou qu'un cycle soit remarqué. (A 0 est considéré comme un cycle avec la période 1.)
Dans le cas de 1480, la période finalement atteinte à chacun des 4 chiffres de départ est 2 2 2 1
respectivement.
Pour une grille plus grande, ces nombres peuvent être supérieurs à 8, mais nous pouvons toujours les utiliser comme "chiffres" dans un nouveau nombre nonaire (simplement les coefficients de 9 ^ n comme s'il s'agissait de chiffres):
2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)
Nous appellerons cela la force du nombre nonaire d'origine. La force de 1480 est donc 1639 (base 10) ou, de manière équivalente, 2221 (base 9).
Défi
Écrivez le programme le plus court qui indique si la force d'un nombre nonaire est supérieure, inférieure ou égale au nombre nonaire lui-même. (Vous n'avez pas nécessairement besoin de calculer la force.)
L'entrée sera un nombre nonaire non négatif qui contient un nombre carré de chiffres (et pas de zéros non significatifs à part le cas spécial de 0 lui-même). Il doit provenir de la ligne de commande ou de stdin.
La sortie devrait aller à stdout comme:
G if the strength is larger than the original number (example: 1480 -> strength = 2221)
E if the strength is equal to the original number (example: 1 -> strength = 1)
L if the strength is less than the original number (example: 5 -> strength = 1)
Fun Bonus Challenge:
Quelle est la plus grande contribution que vous pouvez trouver qui est égale à sa force? (Y a-t-il une limite?)