マークマイメールチャレンジでの支援のおかげで、PPCG-Postは生成されたバーコードですべての小包に正常にスタンプしました!
次に、それらをデコードします。
このチャレンジでは、Mark My Mailチャレンジから生成されたバーコードを指定して、プログラムがそれをデコードし、エンコードされた整数を返します。
しかし、気をつけて!バーコードが上下逆になっている可能性があります...
4ステートバーコード
エンコードの課題を逃した場合は、どのようなバーコードについて話しているのかを知る必要があります。4状態バーコードは、4つの可能な状態を持つバーの行で、それぞれが4を超える整数を表します。
| |
Bar: | | | |
| |
Digit: 0 1 2 3
ASCIIでレンダリングされたバーコードは3行のテキストを取り、パイプ(|
)文字を使用してバーの一部を表し、スペース()を使用して空のセクションを表します。各バーの間に1つのスペースがあります。バーコードの例は次のようになります。
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
バーコードをエンコードした整数に戻すには、各バーを対応する4進数にマッピングし、それらを連結して、10進数に変換します。
各バーコードは上下を逆にすると異なるバーコードを表すため、オリエンテーションを計算できるように開始/停止シーケンスを実装します。この課題のために、Australia Postが指定する開始/停止シーケンスを使用します。各バーコードは1 0
シーケンスで始まり、シーケンスで終わります。
チャレンジ
あなたの仕事は、ASCII 4状態バーコードを与えられ、それを解析し、それがエンコードする整数を返すことです-基本的にはMark My Mailの逆です。
しかし、物事を刺激するために、キャッチがあります - バーコードは逆さまに与えられるかもしれません。現実世界と同様に、バーコードリーダー(プログラム)に任せて、開始/停止シーケンスを使用して正しい方向を決定します。
例:
次のバーコードがある場合:
| | | | | | | | | | | | | | | | | | | |
数字の最初と最後のペアがあるか0, 2
ないかをはっきりと見ることができ1, 0
ます。これは、バーコードが上下逆になっていることを意味します。したがって、正しい向きを実現するには、バーコードを180度回転する必要があります(各バーを反転するだけではありません)。
| | | | | | | | | | | | | | | | | | | |
これで、デコードを開始できます。データをエンコードしないため、開始/停止シーケンスを無視して、各バーを対応するベース4桁にマッピングします。
| | | | | | | | | | | | | | | | | | | | --2 1 0 3 0 2 3--
これを基数4の整数2103023
に連結9419
し、最終結果のために10進表現に変換します。
ルール
- 入力は常に、前述の開始/停止シーケンスを使用して、上記のようにASCIIでレンダリングされた有効な4ステートバーコードになります。
- ゴルフに適した形式であれば、末尾のスペース、またはストリップされた行、および末尾の改行を要求できます。
- 正しい向きである場合とそうでない場合があります-プログラムは、開始/停止シーケンスを使用して、逆さまに読み取るかどうかを判断する必要があります。
- 基数4整数の先行ゼロ桁はエンコードしません。
- 入力は、行のリスト、または改行を含む文字列として取得できます。
- 出力は、バーコードによってエンコードされたデータを表す、言語の標準整数ベースの整数でなければなりません。
- 郵便切手は小さく、それらに非常に小さなコードを収めることができるため、コードはできるだけ短くする必要があります。これはコードゴルフです -最短のプログラム(バイト単位)が勝ちます!
テストケース
| | | | | | | | | | | | | |
= 4096(反転)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145(反転)
| | | | | | | | | | | | | | | | | | | |
= 9419(反転)
| | | | | | | | | | | | | | | | | | |
= 990(反転しない)
| | | | | | | | | | | | | | | | | | |
= 12345(反転しない)
[String]
、[{#Char}]
、[{Char}]
、[[Char]]
?、与えられたものString
と同等である{#Char}