Motivazione
In questa sfida il tuo compito era quello di moltiplicare due stringhe, questo introduce naturalmente un modo per prendere la radice quadrata di una stringa.
Come funziona?
Data una stringa (ad esempio pub
) la prima cosa che devi fare è determinare il codice ASCII per ogni carattere:
"pub" -> [112, 117, 98]
Successivamente si mappano questi codici all'intervallo [0..94]
sottraendo 32
ogni valore:
[112, 117, 98] -> [80, 85, 66]
Ora devi trovare per ogni valore il suo modulo radice 95
(es. 40*40 % 95 = 80
, Puoi anche scegliere 55
):
[80, 85, 66] -> [40, 35, 16]
E infine lo ricollegherai all'intervallo [32..126]
e lo convertirai nuovamente in una stringa:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
In effetti, "HC0" ⊗ "HC0" = "pub"
come puoi verificare con una soluzione dell'altra sfida qui .
Quelli che hanno familiarità con l'aritmetica modulare probabilmente hanno notato che il modulo radice quadrata 95
non esiste sempre, per esempio non esiste una radice per 2
. In tal caso, la radice quadrata di una stringa non è definita e il programma / funzione potrebbe bloccarsi, eseguire un ciclo indefinitamente ecc.
Per comodità, ecco l'elenco dei caratteri che hanno una radice quadrata (il primo è uno spazio):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Regole
- Scriverai un programma / funzione che accetta una stringa (o un elenco di caratteri) come argomento e restituisce qualsiasi radice quadrata se esiste
- Si può presumere che l'input abbia sempre una radice quadrata
- L'input può essere costituito da una stringa vuota
- L'input sarà compreso nell'intervallo stampabile (
[32..126]
) - L'output viene stampato sulla console o si restituisce una stringa se esiste la radice quadrata
- Nel caso in cui la radice quadrata non esista, il comportamento del programma / funzione rimane indefinito
- Se si sceglie di stampare il root sulla console, le nuove righe o gli spazi bianchi vanno bene
Casi test
Nota che queste non sono necessariamente le uniche soluzioni:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(questo è l'intervallo stampabile), questo è un errore di battitura - mi dispiace per quello.