感谢您在“ 标记我的邮件”挑战中的帮助,PPCG-Post已成功地在所有包裹上盖印了生成的条形码!
现在,该解码它们了。
在此挑战中,给定从“ 标记我的邮件”挑战生成的条形码,您的程序将对其解码并返回编码的整数。
但是要当心!条码可能上下颠倒...
4状态条形码
如果您错过了编码挑战,则需要了解我们正在谈论的条形码类型。4状态条形码是一行带有四个可能状态的条,每个状态代表以4为底的整数:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
条形码以ASCII呈现,将占用三行文本,使用竖线(|
)字符代表条形的一部分,并使用空格()代表空白部分。每个小节之间只有一个空格。条形码示例如下所示:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
要将条形码转换回其编码的整数,请将每个条形码映射到其对应的以4为底的数字,将其连接起来,然后将其转换为十进制。
由于每个条形码在上下颠倒时也会代表不同的条形码,因此我们执行了一个开始/停止序列,以便可以计算方向。为了解决这一挑战,我们将使用澳大利亚邮政指定的开始/停止序列:每个条形码以一个1 0
序列开头和结尾。
挑战
给定ASCII 4状态条形码,您的任务是解析它并返回它编码的整数-本质上与Mark My Mail相反。
但是要使事情变得有趣,有一个陷阱- 条形码可以上下颠倒。与现实世界一样,它将由条形码读取器(您的程序)使用开始/停止序列确定正确的方向。
例:
给定以下条形码:
| | | | | | | | | | | | | | | | | | | |
我们可以清楚地看到第一对数字和最后一对数字0, 2
不是1, 0
。这意味着条形码是上下颠倒的-因此我们必须将条形码旋转180度(而不仅仅是翻转每个条形码)以实现正确的方向:
| | | | | | | | | | | | | | | | | | | |
现在,我们可以开始解码了。我们将每个小节映射到其对应的以4为基数的数字,而忽略开始/停止序列,因为它们不对数据进行编码。
| | | | | | | | | | | | | | | | | | | | --2 1 0 3 0 2 3--
我们将其连接到以4为底的整数2103023
,然后将其转换为十进制表示形式9419
以获得最终结果。
规则
- 输入将始终是有效的4状态条形码,以上述ASCII格式呈现,并带有描述的开始/停止顺序。
- 您可以索取尾随空格,带状线以及尾随换行符-无论哪种格式都适合您的高尔夫运动。
- 它的方向可能正确或不正确-您的程序必须通过使用开始/停止顺序来确定是否将其上下颠倒读取。
- 它将不会以4为基数的整数编码前导零数字。
- 您可以将输入作为行列表或带换行符的字符串。
- 输出应该是您语言的标准整数基数的整数,代表由条形码编码的数据。
- 由于邮票很小,并且只能容纳很少的代码,因此您的代码将需要尽可能的短:这是一个代码高尔夫 -因此,最短的程序(以字节为单位)将获胜!
测试用例
| | | | | | | | | | | | | |
= 4096(翻转)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145(翻转)
| | | | | | | | | | | | | | | | | | | |
= 9419(翻转)
| | | | | | | | | | | | | | | | | | |
= 990(未翻转)
| | | | | | | | | | | | | | | | | | |
= 12345(未翻转)
[String]
,[{#Char}]
,[{Char}]
,[[Char]]
?,因为String
相当于{#Char}