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, n
da n
dove 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 è x
dopo 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!