¿Se puede código de barras en una barra?

12

Bienvenido al bar piNapple, Melbourne. Todos los mejores golfistas de código están aquí, con sus computadoras portátiles, probando cócteles y programando cada vez más mal.

Siento una necesidad especial de enfatizar nuevamente el último punto. Cada vez más mal. El alcohol puede hacer cosas divertidas para la lógica de programación.

Entonces, algunos de los golfistas intentaban algunas quines anidadas en idiomas cada vez más exóticos. Alguien había dado el cuarto orden en INTERCAL. Entonces el flujo de alcohol se detuvo. Borracho, borró accidentalmente los algoritmos de lectura de códigos de barras de una computadora completamente diferente ... ¡que ni siquiera estaba conectada a ninguna red! (Niños - no INTERCAL. Por el bien de ustedes. Por el bien de su familia.)

Normalmente, esto no sería un gran problema. Pero, algún jugador de golf había diseñado el sistema hace años, y ninguno de los códigos de barras era estándar. Suponiendo que los 1 son líneas y los 0 son espacios, todos comienzan con 101 y terminan con 1001. Todo en el medio está codificado en ASCII de 7 bits.

El barkeep tiene un gran lector de código de barras elegante que devolverá una cadena de longitud arbitraria (aunque menos de 300 bits) de 1 y 0, a través de STDIN, argumento o archivo dependiendo de su programa. Y puede avanzar o retroceder según la forma en que se sostiene la botella. Su programa debe devolver la cadena desde el medio del código de barras, a través de STOUT o archivo.

Desafortunadamente, no gastó tanto en su almacenamiento, por lo que se elegirá el programa con la fuente más corta y ganará bebidas gratis y tutoriales de programación de borrachos de los otros golfistas.

¡Buena suerte!

lochok
fuente
77
En otras palabras, determine si la entrada es 101...1001o 1001...101e inversa en el último caso, luego empaque el centro en bytes.
John Dvorak
1
Completamente exacto. ¿Pero cuál es la diversión en eso? : p
lochok

Respuestas:

9

GolfScript, 30 caracteres

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

La entrada se proporciona en STDIN. Ejemplo :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Howard
fuente
1

J - 35 bytes

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

Explicación que viene más tarde :).

jpjacobs
fuente
44
Cuanto mas tarde ;-)
Tim
0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Explicación:

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

Tenga en cuenta que si bien la pregunta es más antigua que el idioma, la existencia de la pregunta no influyó en el diseño del idioma de ninguna manera, porque no he visto la pregunta antes de hoy.

Todavía las reglas son reglas, así que lo estoy haciendo CW.

isaacg
fuente
OK, lo haré CW entonces.
isaacg
0

AWK, 116 bytes

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

Sé que esta pregunta no ha visto mucho amor, pero tenía curiosidad por ver y la AWKsolución. Esto no es tan inteligente, pero parece funcionar y no veo áreas obvias para el golf. Originalmente invertí la cadena cuando era necesario, pero eso agregó más bytes que simplemente ajustar la lógica de incremento para retroceder.

Robert Benson
fuente