Grazie al tuo aiuto nella sfida Mark My Mail , PPCG-Post ha timbrato con successo tutti i suoi pacchi con i codici a barre generati!
Ora è il momento di decodificarli.
In questa sfida, il tuo programma, dato un codice a barre generato dalla sfida Mark My Mail , lo decodificherà e restituirà il numero intero codificato.
Ma attenzione! Il codice a barre potrebbe essere capovolto ...
Codici a barre a 4 stati
Nel caso in cui tu abbia perso la sfida della codifica, dovrai sapere di che tipo di codici a barre stiamo parlando. Un codice a barre a 4 stati è una riga di barre con quattro possibili stati, ognuno dei quali rappresenta un numero intero di base 4:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
Resi in ASCII, i codici a barre occuperanno tre righe di testo, usando il carattere pipe ( |
) per rappresentare parte di una barra e uno spazio ( ) per rappresentare una sezione vuota. Ci sarà un singolo spazio tra ogni barra. Un codice a barre di esempio potrebbe essere simile al seguente:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Per riconvertire un codice a barre nell'intero che codifica, mappare ogni barra sulla corrispondente cifra di base 4, concatenarli e convertirli in decimali.
Poiché ogni codice a barre rappresenterà anche un codice a barre diverso quando capovolto, implementiamo una sequenza di avvio / arresto in modo da poter calcolare l'ordine. Ai fini di questa sfida, utilizzeremo la sequenza di avvio / arresto specificata da Australia Post: ogni codice a barre inizia e termina con una 1 0
sequenza.
La sfida
Il tuo compito è, dato un codice a barre ASCII a 4 stati, analizzarlo e restituire l'intero che codifica, essenzialmente il contrario di Mark My Mail .
Ma per rendere le cose più interessanti, c'è un problema: il codice a barre può essere fornito capovolto. Come nel mondo reale, sarà lasciato al lettore di codici a barre (il tuo programma) per determinare l'orientamento corretto usando la sequenza di avvio / arresto.
Esempio:
Dato il seguente codice a barre:
| | | | | | | | | | | | | | | | | | | |
Possiamo vedere chiaramente che la prima e l'ultima coppia di cifre sono 0, 2
e non 1, 0
. Ciò significa che il codice a barre è capovolto, quindi dobbiamo ruotarlo di 180 gradi (non solo capovolgere ogni barra) per ottenere l'orientamento corretto:
| | | | | | | | | | | | | | | | | | | |
Ora possiamo iniziare la decodifica. Mappiamo ogni barra sulla corrispondente cifra di base 4, ignorando le sequenze di avvio / arresto in quanto non codificano i dati.
| | | | | | | | | | | | | | | | | | | | - - 2 1 0 3 0 2 3 - -
Lo concateniamo all'intero base-4 2103023
, quindi lo convertiamo nella sua rappresentazione decimale 9419
per il risultato finale.
Regole
- L'ingresso sarà sempre un codice a barre valido a 4 stati, reso in ASCII come indicato sopra, con la sequenza di avvio / arresto descritta.
- È possibile richiedere spazi finali o linee spogliate, nonché una nuova riga finale, qualunque sia il formato adatto al proprio golf.
- Potrebbe essere o meno nell'orientamento corretto: il programma deve determinare se leggerlo sottosopra, utilizzando la sequenza di avvio / arresto.
- Non codificherà le cifre zero iniziali nell'intero di base 4.
- È possibile prendere l'input come un elenco di righe o una stringa con newline.
- L'output deve essere un numero intero nella base di numeri interi standard della tua lingua, che rappresenta i dati codificati dal codice a barre.
- Poiché i francobolli sono piccoli e possono contenere pochissimo codice, il codice dovrà essere il più corto possibile: si tratta di un codice-golf - quindi vince il programma più breve (in byte)!
Casi test
| | | | | | | | | | | | | |
= 4096 (capovolto)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 (capovolto)
| | | | | | | | | | | | | | | | | | | |
= 9419 (capovolto)
| | | | | | | | | | | | | | | | | | |
= 990 (non capovolto)
| | | | | | | | | | | | | | | | | | |
= 12345 (non capovolto)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
?, Visto che String
è equivalente a{#Char}