Чи можете ви штрих-коду в барі?


12

Ласкаво просимо в бар piNapple, Мельбурн. Всі найкращі гольфісти з кодом є тут, з їх ноутбуками, відбором коктейлів та програмуванням все гірше.

Я відчуваю особливу потребу переосмислити останню точку. Все частіше погано. Алкоголь може робити смішні речі для логіки програмування.

Отож - кілька гольфістів намагалися зробити кілька вкладених лайків на все більш екзотичні мови. Хтось потрапив на четвертий порядок в INTERCAL. Тоді потік алкоголю припинився. Він п’яно, випадково видалив алгоритми зчитування штрих-коду з зовсім іншого комп'ютера ... який навіть не був підключений до жодної мережі! (Діти - не робіть ІНТЕРКАЛ. Ради вас. Ради вашої родини.)

Зазвичай це не буде великою проблемою. Але деякі гольфісти розробили цю систему багато років тому, і жоден із штрих-кодів не був стандартним. Припустимо, що "1" - це рядки, а "0" - це простір, всі вони починаються з 101 і закінчуються з 1001. Усе в середині кодовано 7-бітним ASCII.

У barkeep є великий фантазійний зчитувач штрих-кодів, який повертає рядок довільної довжини (хоча менше 300 біт) від 1 до 0, через аргумент STDIN, аргумент або файл залежно від вашої програми. І може виходити вперед або назад, залежно від того, яким способом тримається пляшка. Ваша програма повинна повернути рядок із середини штрих-коду, через STOUT або файл.

На жаль, він не витратив стільки на своє сховище, тому програма з найкоротшим джерелом буде обрана, і виграють безкоштовні напої та п'яні навчальні програми з інших гольфістів.

Удачі!


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

Пояснення надходять пізніше :).


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 тоді.
isaacg

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вирішувати. Це не все так розумно, але, здається, працює, і я не бачу очевидних областей для гольфу. Я спочатку перевернув рядок при необхідності, але це додало більше байтів, ніж просто налаштування логіки приросту для переміщення назад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.