Czy umiesz kod kreskowy na pasku?

12

Witamy w barze piNapple w Melbourne. Wszyscy najlepsi golfiści z kodem są tutaj, ze swoimi laptopami, próbowaniem koktajli i programowaniem coraz gorzej.

Czuję szczególną potrzebę ponownego podkreślenia ostatniego punktu. Coraz gorzej. Alkohol może robić śmieszne rzeczy w programowaniu logiki.

Tak więc - kilku golfistów próbowało zagrać w zagnieżdżone piny w coraz bardziej egzotycznych językach. Ktoś wykonał czwarte zamówienie w INTERCAL. Potem zatrzymał się przepływ alkoholu. Pijany przypadkowo usunął algorytmy odczytu kodów kreskowych z zupełnie innego komputera ... który nie był nawet podłączony do żadnej sieci! (Dzieci - nie INTERCAL. Ze względu na was. Ze względu na waszą rodzinę.)

Zwykle nie byłby to duży problem. Ale jakiś golfista zaprojektował system lata temu i żaden z kodów kreskowych nie był standardem. Zakładając, że 1 to linie, a 0 to spacja, wszystkie zaczynają się od 101, a kończą na 1001. Wszystko w środku jest zakodowane w 7-bitowym ASCII.

Barman ma duży fantazyjny czytnik kodów kreskowych, który zwróci ciąg o dowolnej długości (choć mniej niż 300 bitów) 1 i 0, poprzez STDIN, argument lub plik, w zależności od programu. I może wystąpić do przodu lub do tyłu, w zależności od tego, w jaki sposób trzymana jest butelka. Twój program musi zwrócić ciąg znaków od środka kodu kreskowego, poprzez STOUT lub plik.

Niestety nie wydał tyle na swoje przechowywanie, więc wybierany jest program z najkrótszym źródłem i wygrywaj darmowe drinki i pijane samouczki programistyczne od innych golfistów.

Powodzenia!

Lochok
źródło
7
Innymi słowy, określ, czy dane wejściowe są 101...1001lub 1001...101odwróć w tym drugim przypadku, a następnie spakuj środek do bajtów.
John Dvorak,
1
Całkowicie dokładne. Ale jaka jest w tym zabawa? : p
lochok

Odpowiedzi:

9

GolfScript, 30 znaków

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

Dane wejściowe są dostarczane przez STDIN. Przykład :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Howard
źródło
1

J - 35 bajtów

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

Wyjaśnienie nastąpi później :).

jpjacobs
źródło
4
Ile później ;-)
Tim
0

Pyth , 21 lat

smCid2c:?zv@z2_z3_4 7

Wyjaśnienie:

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

Zauważ, że chociaż pytanie jest starsze niż język, istnienie pytania nie wpłynęło w żaden sposób na projekt języka, ponieważ nie widziałem tego pytania do dziś.

Nadal reguły są regułami, więc robię to CW.

isaacg
źródło
OK, zrobię to CW.
isaacg
0

AWK, 116 bajtów

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

Wiem, że to pytanie nie spotkało się z dużą miłością, ale byłem ciekawy tego AWKrozwiązania i rozwiązania. To nie jest wcale takie mądre, ale wydaje się, że działa i nie widzę żadnych oczywistych obszarów do gry w golfa. Oryginalnie odwróciłem łańcuch, gdy było to potrzebne, ale to dodało więcej bajtów niż tylko udoskonalenie logiki przyrostowej, aby przejść do tyłu.

Robert Benson
źródło