Ti viene dato un numero intero non negativo (base 9) composto dalle cifre da 0 a 8 come al solito. Tuttavia, il numero di cifre in questo numero (senza zeri iniziali) è un quadrato perfetto.
Per questo motivo, il numero può essere organizzato in una griglia quadrata (con l'ordine di lettura ancora conservato).
Esempio con 1480 (1125 base 10):
14
80
Ora lascia che ogni cifra in una griglia non binaria indichi un movimento verso un altro spazio della griglia (con condizioni al contorno periodiche ):
432
501
678
Questo sta dicendo questo
0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down
Quindi, se nella griglia del 1480 inizi dal 4, ti sposti in alto (ricorda pbc) e poi a sinistra verso l'8, il che significa che ti sposti a destra e in basso al 4, iniziando un ciclo con il periodo 2.
In generale questo processo continua fino a quando si arriva a 0 o si nota un ciclo. (Uno 0 è considerato un ciclo con il periodo 1)
Nel caso del 1480, il periodo eventualmente raggiunto in corrispondenza di ciascuna delle 4 cifre iniziali è 2 2 2 1
rispettivamente.
Per una griglia più grande questi numeri potrebbero essere più grandi di 8, ma possiamo ancora usarli come "cifre" in un nuovo numero non reale (semplicemente i coefficienti di 9 ^ n come se fossero cifre):
2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)
Chiameremo questo il punto di forza del numero non nota originale. Quindi la forza di 1480 è 1639 (base 10) o, equivalentemente, 2221 (base 9).
Sfida
Scrivi il programma più breve che indichi se la forza di un numero non è maggiore di, minore di o uguale al numero non reale stesso. (Non è necessario calcolare necessariamente la forza.)
L'input sarà un numero nonary non negativo che contiene un numero quadrato di cifre (e nessuno zero iniziale oltre al caso speciale di 0 stesso). Dovrebbe venire dalla riga di comando o stdin.
L'output dovrebbe andare su stdout come:
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)
Divertente sfida bonus:
qual è l'input più alto che riesci a trovare uguale alla sua forza? (C'è un limite?)