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. Ma qui è il primo di cui iniziare.
Un cifrario informatico codificherà il testo dato in gruppi di caratteri "casuali" di un dato length. Se un tale gruppo contiene una cifra, utilizzerà quella cifra per indicizzarsi nel proprio gruppo per il carattere codificato. Se nessuna cifra è presente nel gruppo, significa che viene utilizzato il primo carattere.
Ad esempio, supponiamo di voler crittografare il testo this is a computer ciphercon una determinata lunghezza di 5. Questo è un potenziale output (nota: i numeri sono 1 indicizzati nell'esempio seguente):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Prendiamo alcuni gruppi come esempi per spiegare come decifrare il gruppo:
qu5dt: Questo gruppo contiene una cifra5, quindi la (1-indicizzato) 5th carattere di questo gruppo è il carattere utilizzato per il testo decifrato:t.hprit: Questo gruppo non contiene cifre, in modo che il primo carattere di questo gruppo viene utilizzato in modo implicito per il testo decifrato:h.osyw2: Questo gruppo contiene una cifra2, in modo che il (1-indicizzato) 2 ° carattere di questo gruppo è il carattere utilizzato per il testo decifrato:s.
Sfida:
Dato un numero intero lengthe una stringa word_to_encipher, genera una stringa codificata casuale come descritto sopra.
Devi solo crittografare dato il lengthe word_to_encipher, quindi non è necessario creare anche un programma / funzione di decifrazione. Potrei comunque fare una sfida nella seconda parte per la decifrazione in futuro.
Regole della sfida:
- Puoi presumere che
lengthsarà nell'intervallo[3,9]. - Puoi presumere
word_to_encipherche conterrà solo lettere. - È possibile utilizzare lettere maiuscole o minuscole (indicare quale è stato utilizzato nella risposta).
- Le uscite, ogni gruppo e le posizioni delle cifre in un gruppo (se presente) devono essere uniformemente casuali . Quindi tutte le lettere casuali dell'alfabeto hanno le stesse possibilità di verificarsi; la posizione della lettera codificata in ciascun gruppo ha le stesse possibilità di verificarsi; e la posizione della cifra ha le stesse possibilità di verificarsi (tranne quando è il primo carattere e nessuna cifra è presente; e ovviamente non può trovarsi nella stessa posizione del carattere codificato).
- È inoltre consentito utilizzare cifre indicizzate 0 anziché 1 indicizzate. Indica quale dei due hai utilizzato nella tua risposta.
- La cifra
1(o0quando 0-indicizzata) non sarà mai presente nell'output. Quindib1ndhnon è un gruppo valido per codificare il carattere 'b'. Tuttavia,b4tbwè valido, dove i4codificherà iballa 4a posizione (1-indicizzato), e gli altri caratterib,t,wsono casuali (che contiene anche una coincidenzab). Altri possibili gruppi validi dilength5 per cifrare il carattere 'b' sono:abcd2,ab2de,babbk,hue5b, etc.
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. - Le regole standard si applicano alla tua risposta con le regole I / O predefinite , quindi puoi utilizzare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Le scappatoie predefinite sono vietate.
- 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:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2, ab2de, babbktutti uguali? È anche b1akkvalido?
b1akkdirei di no. Lo modificherà nella descrizione della sfida per chiarire. Se il primo carattere è quello crittografato, non dovrebbe essere presente alcuna cifra.
"a??"ha 676 possibili risultati, ma "1a?", "?a1", "2?a", "?2a", ha only104 risultati. Quindi, se sto provando a scegliere un risultato tra tutti questi 780 risultati, la distribuzione di "posizione della lettera codificata" è 13: 1: 1, non 1: 1: 1. E lo considero come un lavoro "uniformemente casuale".