Introduzione:
Ho un sacco di cifre diverse memorizzate in un documento che una volta ho compilato da bambino, ne ho scelte alcune che pensavo fossero le più adatte alle sfide (non troppo banali e non troppo difficili) e le trasformavo in sfide. Molti di loro sono ancora nella sandbox e non sono ancora sicuro se li posterò tutti o solo alcuni. Ecco il secondo (il Computer Cipher è stato il primo che ho pubblicato).
Per il Trifid Cipher (senza usare una parola chiave) l'alfabeto (e un carattere jolly aggiuntivo) è diviso in tre tabelle 3 per 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Un testo che vogliamo codificare è il primo carattere per carattere codificato in numeri di tabella-riga-colonna. Ad esempio, il testo this is a trifid cipher
diventa:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Mettiamo quindi tutto uno dopo l'altro riga per riga nella tabella sopra in gruppi di tre:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
E quelli vengono trasformati in caratteri usando le stesse tabelle:
s y y z a g d d y y u i q u z w u u h u y o
Una cosa da notare, la lunghezza di input dovrebbe essere coprime a 3. Quindi, se la lunghezza è un multiplo di 3, aggiungeremo uno o due spazi finali per rendere la lunghezza di input non più un multiplo 3.
Sfida:
Data una stringa sentence_to_encipher
, codificala come descritto sopra.
Devi solo codificare dato sentence_to_encipher
, quindi non è necessario creare anche un programma / funzione di decifrazione. In futuro, tuttavia, potrei presentare una sfida della seconda parte per la decifrazione (anche se ho la sensazione che sia banale / simile al processo di codifica).
Regole della sfida:
- Puoi presumere
sentence_to_encipher
che conterrà solo lettere e spazi. - È possibile utilizzare lettere maiuscole o minuscole (indicare quale è stato utilizzato nella risposta).
- Puoi scegliere di aggiungere uno o due spazi finali quando la lunghezza di input è 3 per renderlo non più un multiplo di 3.
- L'I / O è flessibile. Sia l'input che l'output possono essere una stringa, un elenco / un array / un flusso di caratteri, ecc.
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard con regole I / O predefinite , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi test:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)