introduzione
In questa sfida risolverai le trasformazioni diagonali di Burrows-Wheeler. Ecco una panoramica generale di cosa sia una trasformazione diagonale di Burrows-Wheeler. Per codificare un messaggio, devi prima assicurarti che sia di lunghezza dispari (cioè 5, 7, 9, ecc.). Poi fate una griglia, nda ndove nè la lunghezza del messaggio. La prima riga è il messaggio originale. Ogni riga successiva è la riga sopra di essa, ma spostava 1 carattere a sinistra con il primo personaggio che si spostava indietro. Per esempio:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Quindi prendi ogni lettera sulla diagonale da NO a SE e la inserisci in una nuova stringa:
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
Il tuo messaggio codificato è HloWrdel ol. Per decodificare, prendere innanzitutto la lunghezza del messaggio codificato, aggiungere 1 e dividere per 2. Consente di chiamare questo numero x. Ora che sappiamo x, a partire dalla prima lettera, ogni lettera è xdopo l'ultima, in loop. Per esempio:
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
Ora riorganizza le lettere nell'ordine corretto per ottenere Hello World!
Sfida
La tua sfida è scrivere due programmi, funzioni o uno di ciascuno. Tuttavia, entrambi devono usare la stessa lingua. Il primo programma accetterà una stringa come input tramite STDIN, argomenti del programma o parametri di funzione e la codificherà utilizzando questo metodo. Il secondo programma accetterà una stringa come input tramite STDIN, argomenti del programma o parametri di funzione e la decodificherà utilizzando questo metodo.
Requisiti
Primo programma / funzione
- Una singola stringa di input che utilizza qualsiasi metodo sopra elencato.
- È necessario codificare la stringa utilizzando uno stile di trasformazione diagonale di Burrows-Wheeler.
Secondo programma / funzione
- Una singola stringa di input che utilizza qualsiasi metodo sopra elencato.
- Deve decodificare la stringa usando uno stile di trasformazione diagonale Burrows-Wheeler.
vincoli
- Non è possibile utilizzare alcuna funzione incorporata o esterna che compia questo compito.
- Non sono ammesse scappatoie standard.
- Entrambi i programmi / funzioni devono essere nella stessa lingua.
punteggio
Questo è il golf del codice, quindi vince il programma più breve in byte .
Se devo aggiungere ulteriori informazioni, lascia un commento!