バーにコードをバーコードできますか?


12

メルボルンのpiNappleバーへようこそ。最高級のコードゴルファーのすべてがここにいます。ラップトップ、カクテルのサンプリング、プログラミングがますます悪くなっています。

最後の点を強調する必要があると感じています。ますますひどく。アルコールは、プログラミングロジックに面白いことができます。

だから-ゴルファーの何人かは、ますますエキゾチックな言語でネストされたクインを試みていました。INTERCALで誰かが4番目の注文をした。その後、アルコールの流れが止まりました。彼は酔っぱらって、まったく別のコンピューターからバーコード読み取りアルゴリズムを誤って削除しました...それはどのネットワークにも接続されていませんでした!(子供-INTERCALはしないでください。あなたのために。あなたの家族のために。)

通常、これは大きな問題ではありません。しかし、何人かのゴルファーは何年も前にシステムを設計しており、バーコードはどれも標準ではありませんでした。1が行であり、0がスペースであると仮定すると、それらはすべて101で始まり、1001で終わります。中央のすべては、エンコードされた7ビットASCIIです。

barkeepには、プログラムに応じてSTDIN、引数、またはファイルを介して、1と0の任意の長さ(300ビット未満)の​​文字列を返す、豪華なバーコードリーダーがあります。そして、ボトルが保持されている方法に応じて、前方または後方に来る可能性があります。プログラムは、STOUTまたはファイルを介して、バーコードの中央から文字列を返す必要があります。

残念ながら、彼はストレージにそれほど費やしなかったので、ソースが最も短いプログラムが選択され、他のゴルファーから無料の飲み物と酔っ払ったプログラミングチュートリアルを獲得します。

幸運を!


7
言い換えると、後者の場合、入力がである101...1001か1001...101、またはその逆であるかを判断し、中央をバイトにパックします。
— ジョンドボラック

1
完全に正確。しかし、その面白さは何ですか?:p
— lochok

回答:


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にしています。


OK、それからCWにします。
— isaacg 14年

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解決策に興味がありました。これはそれほど賢いわけではありませんが、うまくいくようで、ゴルフの明らかな領域は見当たりません。必要に応じて元々文字列を反転しましたが、増分ロジックを微調整して逆方向に移動するよりも多くのバイトを追加しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.