Dank Ihrer Hilfe bei der Mark My Mail Challenge hat PPCG-Post alle Pakete erfolgreich mit den generierten Barcodes versehen!
Jetzt ist es Zeit, sie zu entschlüsseln.
Bei dieser Abfrage decodiert Ihr Programm anhand eines Barcodes, der aus der Abfrage " Mark My Mail" generiert wurde, diesen und gibt die codierte Ganzzahl zurück.
Aber achten Sie auf! Der Barcode ist möglicherweise verkehrt herum angebracht ...
4-Staaten-Barcodes
Falls Sie die Codierungsaufforderung verpasst haben, müssen Sie wissen, um welche Art von Barcodes es sich handelt. Ein 4-Zustands-Barcode ist eine Reihe von Balken mit vier möglichen Zuständen, die jeweils eine Ganzzahl zur Basis 4 darstellen:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
In ASCII gerendert, belegen die Barcodes drei Textzeilen, wobei das Pipe ( |) -Zeichen einen Teil eines Strichs und ein Leerzeichen ( ) einen leeren Abschnitt darstellt. Zwischen den einzelnen Balken befindet sich jeweils ein Leerzeichen. Ein Beispiel-Barcode könnte folgendermaßen aussehen:
| | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | |
Um einen Barcode wieder in die von ihm codierte Ganzzahl umzuwandeln, ordnen Sie jeden Barcode der entsprechenden 4-stelligen Basis zu, verknüpfen Sie diese und konvertieren Sie ihn in eine Dezimalzahl.
Da jeder Barcode verkehrt herum auch einen anderen Barcode darstellt, implementieren wir eine Start- / Stopp-Sequenz, damit die Ausrichtung berechnet werden kann. Für diese Herausforderung verwenden wir die von Australia Post festgelegte Start- / Stopp-Sequenz: Jeder Barcode beginnt und endet mit einer 1 0Sequenz.
Die Herausforderung
Ihre Aufgabe ist es, einen ASCII-4-Status-Barcode zu analysieren und die codierte Ganzzahl zurückzugeben - im Wesentlichen die Umkehrung von Mark My Mail .
Aber um die Dinge aufzupeppen, gibt es einen Haken: Der Barcode kann verkehrt herum ausgegeben werden. Wie in der Realität wird es dem Barcode-Leser (Ihrem Programm) überlassen, die richtige Ausrichtung mithilfe der Start- / Stopp-Sequenz zu bestimmen .
Beispiel:
Mit folgendem Barcode:
| | | | | | | | | | | | | | | | | | | |
Wir können deutlich sehen, dass das erste und das letzte Ziffernpaar gleich sind 0, 2und nicht 1, 0. Dies bedeutet, dass der Barcode auf dem Kopf steht. Wir müssen ihn also um 180 Grad drehen (nicht nur jeden Balken umdrehen), um die richtige Ausrichtung zu erzielen:
| | | | |
| | | | | | | | | | |
| | | |
Jetzt können wir mit der Dekodierung beginnen. Wir ordnen jeden Balken der entsprechenden Basis-4-Ziffer zu und ignorieren dabei die Start- / Stopp-Sequenzen, da sie die Daten nicht codieren.
| | | | |
| | | | | | | | | | |
| | | |
- - 2 1 0 3 0 2 3 - -
Wir verketten dies mit der Ganzzahl zur Basis 4 2103023und konvertieren es dann in seine Dezimaldarstellung 9419für das Endergebnis.
Regeln
- Die Eingabe ist immer ein gültiger 4-Status-Barcode, der wie oben beschrieben in ASCII mit der beschriebenen Start- / Stopp-Sequenz gerendert wird.
- Sie können ein Leerzeichen oder eine gestrippte Linie sowie eine nachgestellte Linie anfordern - je nachdem, welches Format für Ihr Golfspiel geeignet ist.
- Es kann in der richtigen Ausrichtung sein oder nicht - Ihr Programm muss mithilfe der Start- / Stopp-Sequenz bestimmen, ob es verkehrt herum gelesen werden soll.
- Führende Nullstellen in der Ganzzahl zur Basis 4 werden nicht codiert.
- Sie können die Eingabe als Liste von Zeilen oder als Zeichenfolge mit Zeilenumbrüchen verwenden.
- Die Ausgabe sollte eine Ganzzahl in der Standard-Ganzzahlbasis Ihrer Sprache sein, die die vom Barcode codierten Daten darstellt.
- Da Briefmarken klein sind und nur sehr wenig Code enthalten, muss Ihr Code so kurz wie möglich sein: Dies ist ein Code-Golf - also gewinnt das kürzeste Programm (in Bytes)!
Testfälle
| | | | | | | | | | | | | |
= 4096 (gespiegelt)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 ( gespiegelt )
| | | | | | | | | | | | | | | | | | | |
= 9419 ( gespiegelt )
| | | | | |
| | | | | | | | |
| | | |
= 990 (nicht gespiegelt)
| | | | |
| | | | | | | | | | |
| | |
= 12345 (nicht gespiegelt)
[String], [{#Char}], [{Char}], [[Char]]?, Da Stringentspricht{#Char}