Можете ли вы штрих-код в баре?

12

Добро пожаловать в бар piNapple, Мельбурн. Все лучшие игроки в кодовый код находятся здесь, с их ноутбуками, пробуя коктейли и программируя все более и более плохо.

Я чувствую особую необходимость перефразировать последний пункт. Всё плохо. Алкоголь может делать забавные вещи с логикой программирования.

Итак, некоторые из игроков в гольф пытались использовать несколько вложенных квинов на экзотических языках. Кто-то ударил четвертый заказ в INTERCAL. Затем поток алкоголя прекратился. Он в пьяном виде случайно удалил алгоритмы считывания штрих-кода с совершенно другого компьютера ... который даже не был подключен ни к одной сети! (Дети - не ИНТЕРКАЛ. Ради вас. Ради вашей семьи.)

Обычно это не будет большой проблемой. Но какой-то гольфист разработал систему несколько лет назад, и ни один из штрих-кодов не был стандартным. Предполагая, что 1 - это строки, а 0 - это пробел, все они начинаются с 101 и заканчиваются 1001. Все посередине кодируется 7-битным ASCII.

Barkeep действительно имеет большое устройство чтения штрих-кодов, которое будет возвращать строку произвольной длины (хотя и менее 300 бит) из 1 и 0 через STDIN, аргумент или файл в зависимости от вашей программы. И это может произойти вперед или назад в зависимости от того, каким образом держится бутылка. Ваша программа должна вернуть строку из середины штрих-кода, через STOUT или файл.

К сожалению, он не потратил так много на свое хранилище, поэтому будет выбрана программа с самым коротким источником, и выиграть бесплатные уроки по напиткам и пьяному программированию от других игроков в гольф.

Удачи!

lochok
источник
7
Другими словами, определите, является ли ввод 101...1001или 1001...101обратным в последнем случае, затем упакуйте центр в байты.
Джон Дворак
1
Абсолютно точно. Но что в этом весёлого? : p
lochok

Ответы:

9

GolfScript, 30 символов

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

Вход предоставляется на STDIN. Пример :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Говард
источник
1

J - 35 байт

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

Объяснение будет позже :).

jpjacobs
источник
4
Сколько позже? ;-)
Тим
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 тогда.
Исаак
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решение. Это не все, что умно, но, кажется, работает, и я не вижу никаких очевидных областей для гольфа. Я изначально перевернул строку, когда это было необходимо, но это добавило больше байтов, чем просто настройка логики приращения для перемещения назад.

Роберт Бенсон
источник