Crea un'implementazione del cifrario rotazionale, talvolta chiamato anche cifrario di Cesare.
Il cifrario di Cesare è un semplice cifrario a scorrimento che si basa sul trasporre tutte le lettere dell'alfabeto usando una chiave intera compresa tra 0 e 26.
Usare una chiave di 0 o 26 produrrà sempre lo stesso output per via dell'aritmetica modulare.
La lettera viene spostata di tanti valori quant'è il valore della chiave.
La notazione generale per i cifrari rotazionali è ROT + <key>.
Il cifrario rotazionale più usato è ROT13.
Un ROT13 sull'alfabeto latino sarebbe il seguente:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
È più forte del cifrario Atbash perché ha 27 chiavi possibili e 25 chiavi utilizzabili.
Il testo cifrato è scritto con la stessa formattazione dell'input, inclusi spazi e punteggiatura.
omg dà trl
c dà c
Cool dà Cool
The quick brown fox jumps over the lazy dog. dà Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
Gur dhvpx oebja sbk whzcf bire gur ynml qbt. dà The quick brown fox jumps over the lazy dog.
Questo è un buon esercizio per sperimentare con letterali stringa non standard e con la metaprogrammazione.
Una breve introduzione ai letterali stringa non standard si trova in questo post del blog. Una guida dettagliata alla metaprogrammazione si trova nel manuale.
Puoi estendere la soluzione aggiungendo la funzionalità descritta di seguito.
Il bonus A richiede solo le basi illustrate nel post del blog. Il bonus B richiede una conoscenza molto più approfondita della metaprogrammazione in Julia.
Implementa un letterale stringa che applica ROT13 alla stringa:
R13"abcdefghijklmnopqrstuvwxyz" == "nopqrstuvwxyzabcdefghijklm"
Implementa i letterali stringa R<i>, i = 0, ..., 26, che spostano la stringa di i valori:
R0"Hello, World!" == "Hello, World!"
R4"Testing 1 2 3 testing" == "Xiwxmrk 1 2 3 xiwxmrk"
R13"abcdefghijklmnopqrstuvwxyz" == "nopqrstuvwxyzabcdefghijklm"
Iscriviti a Exercism per imparare e padroneggiare Julia con 35 concetti128 esercizi e il mentoring di persone reali, tutto gratis.