Ecco le lettere dell'alfabeto inglese in ordine di frequenza:
e t a o i n s h r d l c u m w f g y p b v k j x q z
Cioè, eè la lettera più usata ed zè la meno comune. (Dati da Wikipedia .)
La tua sfida è prendere del testo ROT-n'd, come:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Questo è il testo "thisisaverysecretmessagethatisverysecureandsafe" che è "crittografato" tramite ROT-21 (metà di 42). Il tuo programma, usando la tabella delle frequenze sopra, dovrebbe essere in grado di determinare di quanto è stato ruotato ogni carattere e il testo originale.
(Se non si ha familiarità con ROT-n, sta essenzialmente spostando ciascun carattere di n. Ad esempio, in ROT-2 a -> c, b -> d, ..., x -> z, y -> a, z -> b).
Come lo chiedi? L'algoritmo (molto ingenuo) che devi usare è:
- per ciascuno
nda0a25incluso, applicare ROT--nalla stringa di input. (Negativonperché vogliamo invertire la crittografia. ROT--nè equivalente a ROT-26-n, se è più semplice.) - converte ogni stringa di input in un numero sommando le frequenze relative dei caratteri.
eè0,tè1,aè2, ecc. Ad esempio, il numero corrispondente per la stringa"hello"è 7 + 0 + 10 + 10 + 3 = 30. - trova la stringa che ha il numero corrispondente più basso.
- output quella stringa e la sua corrispondente
n.
Regole:
- l'input può essere ovunque ragionevole (STDIN, argomenti di funzione, da un file, ecc.), così come l'output (STDOUT, valore di ritorno della funzione, in un file, ecc.)
- è possibile utilizzare un algoritmo diverso, purché produca sempre risultati identici. Ad esempio, avere
z0 ee25 e anche scegliere il numero più alto va bene. - se due stringhe hanno punteggi identici, puoi scegliere di emetterne una (o entrambe). Questo è un caso limite e non è necessario tenerne conto.
- questo è code-golf , quindi vincerà il codice più breve in byte!
Casi test:
Ingresso: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Uscita:21 thisisaverysecretmessagethatisverysecureandsafe
Ingresso: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Uscita:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Ingresso: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Uscita:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Ingresso: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Uscita:2 hereisthefinaltestcasethatyoumustdecrypt
Nel caso ti stavi chiedendo, ecco un JSFiddle del codice di test JavaScript che ho scritto, che ha decifrato con successo tutti i casi di test che ho lanciato.
wtaaddovrebbe dare0 wtaadcome risultato evszzcdovrebbe dare25 wtaadcome risultato.