Bisakah Anda kode barcode di bar?

12

Selamat datang di bar piNapple, Melbourne. Semua pegolf kode terbaik ada di sini, dengan laptop mereka, koktail sampel, dan pemrograman semakin buruk.

Saya merasakan kebutuhan khusus untuk menekankan kembali poin terakhir. Semakin buruk. Alkohol dapat melakukan hal-hal lucu pada logika pemrograman.

Jadi - beberapa pegolf mencoba beberapa quines bersarang dalam bahasa yang semakin eksotis. Seseorang telah mencapai urutan keempat dalam INTERCAL. Kemudian aliran alkohol berhenti. Dia mabuk, secara tidak sengaja menghapus algoritma membaca barcode dari komputer yang sama sekali berbeda ... yang bahkan tidak terhubung ke jaringan apa pun! (Anak-anak - jangan INTERCAL. Demi Anda. Demi keluarga Anda.)

Biasanya, ini bukan masalah besar. Tapi, beberapa pegolf telah merancang sistem bertahun-tahun yang lalu, dan tidak ada barcode yang standar. Dengan asumsi 1 adalah garis, dan 0 adalah ruang, mereka semua mulai dengan 101 dan selesai dengan 1001. Segala sesuatu di tengah adalah 7-bit ASCII disandikan.

Barkeep memang memiliki pembaca barcode mewah besar yang akan mengembalikan string dengan panjang sewenang-wenang (meskipun kurang dari 300 bit) dari 1 dan 0, melalui STDIN, argumen atau file tergantung pada program Anda. Dan itu mungkin maju, atau mundur tergantung pada cara botol itu dipegang. Program Anda harus mengembalikan string dari tengah kode batang, melalui STOUT atau file.

Sayangnya, dia tidak menghabiskan banyak uang untuk penyimpanannya, sehingga program dengan sumber terpendek akan dipilih, dan memenangkan minuman gratis dan tutorial pemrograman mabuk dari pegolf lain.

Semoga berhasil!

lochok
sumber
7
Dengan kata lain, tentukan apakah inputnya 101...1001atau 1001...101dan balikkan dalam kasus yang terakhir, kemudian kemas pusat menjadi byte.
John Dvorak
1
Benar-benar akurat. Tapi apa yang menyenangkan dari itu? : p
lochok

Jawaban:

9

GolfScript, 30 karakter

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

Masukan diberikan pada STDIN. Contoh :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Howard
sumber
1

J - 35 byte

_7(a.{~#.)\_4}.3}.|.^:([:-.2{])"."0

Penjelasan datang nanti :).

jpjacobs
sumber
4
Berapa lama kemudian? ;-)
Tim
0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Penjelasan:

        ?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.

Perhatikan bahwa sementara pertanyaannya lebih tua dari bahasa, keberadaan pertanyaan tidak mempengaruhi desain bahasa dengan cara apa pun, karena saya belum melihat pertanyaan itu sebelum hari ini.

Aturan masih aturan, jadi saya membuatnya CW.

isaacg
sumber
OK, saya akan membuatnya CW kalau begitu.
isaacg
0

AWK, 116 byte

/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}}

Saya tahu pertanyaan ini belum melihat banyak cinta, tetapi saya ingin tahu tentang melihat dan AWKsolusi. Ini tidak terlalu pintar, tetapi tampaknya berhasil dan saya tidak melihat area yang jelas untuk golf. Saya awalnya membalikkan string ketika dibutuhkan, tetapi itu menambahkan lebih banyak byte daripada hanya mengubah logika kenaikan untuk bergerak mundur.

Robert Benson
sumber