您可以在酒吧中对条形码进行编码吗?


12

欢迎来到墨尔本的piNapple酒吧。所有最好的代码高尔夫球手都在这里,他们的笔记本电脑,鸡尾酒的采样和编程变得越来越糟糕。

我感到特别需要强调最后一点。越来越严重。酒精可以使编程逻辑变得有趣。

所以-一些高尔夫球手正在尝试使用越来越异国情调的语言制作一些嵌套的奎因。有人在INTERCAL中命中了第四名。然后,酒精的流动停止了。他喝醉了,不小心从一台完全不同的计算机上删除了条形码读取算法……甚至没有连接任何网络!(孩子们-不要INTERCAL。为了您。为了您的家人。)

通常,这不是大问题。但是,几年前,有些高尔夫球手已经设计了该系统,而且条形码都不是标准的。假设1是行,0是空格,它们都以101开头并以1001结尾。中间的所有内容都是7位ASCII编码的。

barkeep确实有一个大型花式条形码读取器,它会根据您的程序,通过STDIN,参数或文件返回任意长度的字符串(虽然少于300位),它们的值为1和0。根据瓶子的存放方式,它可能向前还是向后。您的程序必须通过STOUT或文件从条形码中间返回字符串。

不幸的是,他没有在存储上花费太多,因此将选择来源最短的程序,并从其他高尔夫球手那里获得免费饮料和醉酒编程教程。

祝好运!


7
换句话说,确定输入是101...1001or还是1001...101在后一种情况下反转,然后将中心打包成字节。
John Dvorak 2013年

1
完全准确。但是那有什么乐趣呢?:p
lochok

Answers:


9

GolfScript,30个字符

.-1%]$1=3>7/);{{1&}%2base}%""+

输入在STDIN上提供。范例

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC


0

佩斯 21

smCid2c:?zv@z2_z3_4 7

说明:

        ?zv@z2_z           Input if 3rd character of input is 1, else reversed input.
       :        3_4        Slice out the middle portion, ASCII of the above string.
      c             7      Chop into 7 character chunks.
 mCid2                     Convert each chunk from binary to integer, then to a character.
s                          Sum up the characters into a string and print.

请注意,尽管问题比语言还老,但问题的存在并没有以任何方式影响语言的设计,因为我之前从未见过该问题。

规则仍然是规则,因此我将其定为CW。


好,那我把它设为CW。
isaacg 2014年

0

AWK,116个字节

/101$/{r=1}{L=split($0,a,"")
n=r?L-2:3
N=r?-1:1
while(d<L-7){c=0
for(k=0;k<7;k++){c*=2;c+=a[n+=N];d++}printf"%c",c}}

我知道这个问题并没有引起太多的关注,但是我对观察和AWK解决感到好奇。这并不是那么聪明,但是它似乎可行,而且我看不到任何明显的领域。我最初在需要时反转了字符串,但是增加了更多的字节,而不仅仅是调整增量逻辑以向后移动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.