Sfida
Il tuo compito è codificare un numero intero come una stringa di caratteri ASCII , quindi decodificarlo correttamente dopo che la stringa è stata mescolata casualmente.
Scriverete due programmi / funzioni , che saranno chiamati Encoder e Decoder .
Codificatore
- Input: un numero intero nell'intervallo .
- Output: una stringa di ASCII caratteri (non necessariamente stampabile).
decoder
- Input: una permutazione casuale della stringa .
- Output: l'intero .
punteggio
Sia la lunghezza massima di per tutti i possibili valori di . Se l' encoder agisce in modo non deterministico (il che è consentito, vedere di seguito), allora sarà la lunghezza massima di che può verificarsi (possibilmente ).
Sia la lunghezza dell'encoder in byte e la lunghezza del decoder in byte.
Quindi il tuo punteggio è .
Alla vittoria viene assegnato il punteggio più basso .
Limite di tempo
C'è un limite al tempo arbitrario di 1 minuto sul tempo di esecuzione sia dell'Encoder che del Decoder per un singolo testcase (cioè un singolo valore di ).
L'obiettivo è quello di evitare una soluzione che trovi quella forza bruta della codifica enumerando tutte le sequenze con determinate proprietà. Se la tua soluzione fa qualcosa di più intelligente di così, molto probabilmente si adatta al vincolo di tempo e sarà considerata valida. Allo stesso modo, se funziona su TIO per alcuni valori casuali di sarà considerato valido. Altrimenti lo proverò sulla mia macchina, ma nota che se la tua soluzione è pura forza bruta quasi sicuramente fallirà.
Regole
- L' encoder e il decoder devono essere scritte nella stessa lingua .
- Il decodificatore deve emettere il numero intero corretto per ogni possibile permutazione della stringa restituita dall'encoder .
- L' Encoder e il Decoder non sono autorizzati a condividere informazioni in alcun modo (ad es. Tramite variabili o file globali).
- L'output dell'Encoder non deve necessariamente essere deterministico (ovvero, lo stesso input può produrre stringhe di output diverse se l' Encoder viene eseguito più volte), ma il Decoder deve sempre indovinare il numero intero corretto .
- L' encoder e il decodificatore possono accettare e restituire l'intero in qualsiasi modo conveniente (ad es. Se va bene che l'ingresso sia
14
,"14"
o[1,4]
). - Il codificatore può restituire la stringa mediante stampa su
stdout
o da restituendo una stringa, una lista / array di caratteri o un elenco / array di interi nell'intervallo ; nota che il Decoder riceverà come input una permutazione di come restituito dall'encoder , quindi dovrebbe accettare la stringa nello stesso formato di . - Sono vietate le scappatoie standard .
- Se possibile, spiega come funziona il tuo codice e perché il punteggio che rivendichi è corretto.
Esempio
Supponiamo che .
- L' encoder riceve
14
come input. Potrebbe emettere"qwerty"
.- Il decodificatore riceve una permutazione di
"qwerty"
come input, ad esempio"tweyqr"
. Deve produrre14
(in qualsiasi formato conveniente).
Anche l' Encoder avrebbe potuto essere restituito [113,119,101,114,116,121]
, nel qual caso il Decoder avrebbe ricevuto (ad esempio) [116,119,101,121,113,114]
.
Si noti che la stringa restituita dall'encoder può includere anche caratteri ASCII non stampabili (ma sempre nell'intervallo [0x00, ..., 0x7F]
).