Riesci a inserire il codice a barre in una barra?


12

Benvenuti al bar piNapple, Melbourne. Tutti i migliori golfisti di codice sono qui, con i loro laptop, campionando cocktail e programmando sempre più male.

Sento un bisogno speciale di ribadire l'ultimo punto. Sempre più male. L'alcol può fare cose divertenti per la logica di programmazione.

Quindi - alcuni golfisti stavano tentando alcune quine nidificate in lingue sempre più esotiche. Qualcuno aveva raggiunto il quarto ordine in INTERCAL. Quindi il flusso di alcol si fermò. Ha ubriaco, cancellato accidentalmente gli algoritmi di lettura dei codici a barre da un computer completamente diverso ... che non era nemmeno collegato a nessuna rete! (Bambini - non INTERCAL. Per il bene di voi. Per il bene della vostra famiglia.)

Normalmente, questo non sarebbe un grosso problema. Ma alcuni golfisti avevano progettato il sistema anni fa e nessuno dei codici a barre era standard. Supponendo che 1 sia una linea e 0 sia spazio, iniziano tutti con 101 e finiscono con 1001. Tutto al centro è codificato ASCII a 7 bit.

Il barista ha un grande lettore di codici a barre che restituirà una stringa di lunghezza arbitraria (anche se inferiore a 300 bit) di 1 e 0, tramite STDIN, argomento o file a seconda del programma. E potrebbe venire avanti o indietro a seconda del modo in cui viene tenuta la bottiglia. Il programma deve restituire la stringa dalla metà del codice a barre, tramite STOUT o file.

Sfortunatamente, non ha speso molto per la sua memoria, quindi verrà scelto il programma con la fonte più breve e vincerà bevande gratuite e tutorial di programmazione da ubriachi dagli altri giocatori di golf.

In bocca al lupo!


7
In altre parole, determinare se l'input è 101...1001o 1001...101e invertire in quest'ultimo caso, quindi impacchettare il centro in byte.
John Dvorak,

1
Completamente accurato Ma che divertimento c'è? : p
lochok,

Risposte:


9

GolfScript, 30 caratteri

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

L'ingresso è fornito su STDIN. Esempio :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC

1

J - 35 byte

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

Spiegazione in arrivo :).


4
Quanto dopo? ;-)
Tim

0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Spiegazione:

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

Si noti che mentre la domanda è più antica della lingua, l'esistenza della domanda non ha influenzato in alcun modo il design della lingua, perché non ho visto la domanda prima di oggi.

Comunque le regole sono regole, quindi lo sto facendo in CW.


OK, lo farò in CW allora.
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}}

So che questa domanda non ha visto molto amore, ma ero curioso di vedere e AWKrisolvere. Non è poi così intelligente, ma sembra funzionare e non vedo aree ovvie per il golf. Inizialmente ho invertito la stringa quando necessario, ma ciò ha aggiunto più byte rispetto alla semplice modifica della logica di incremento per spostarsi indietro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.