Você pode código de barras em uma barra?

12

Bem-vindo ao bar piNapple, Melbourne. Todos os melhores jogadores de código estão aqui, com seus laptops, coquetéis de amostra e programação cada vez mais mal.

Sinto uma necessidade especial de enfatizar novamente o último ponto. Cada vez mais mal. O álcool pode fazer coisas engraçadas na lógica de programação.

Então - alguns dos jogadores de golfe estavam tentando algumas peças aninhadas em idiomas cada vez mais exóticos. Alguém acertou a quarta ordem em INTERCAL. Então o fluxo de álcool parou. Ele bêbado, acidentalmente excluiu os algoritmos de leitura de código de barras de um computador completamente diferente ... que nem estava conectado a nenhuma rede! (Crianças - não INTERCAL. Por você. Por sua família.)

Normalmente, isso não seria um grande problema. Mas, alguns golfistas haviam projetado o sistema anos atrás, e nenhum dos códigos de barras era padrão. Assumindo que 1 são linhas e 0 são espaço, todos começam com 101 e terminam com 1001. Tudo no meio é codificado em ASCII de 7 bits.

O barkeep possui um grande e sofisticado leitor de código de barras que retornará uma seqüência de comprimento arbitrário (embora menor que 300 bits) de 1 e 0, via STDIN, argumento ou arquivo, dependendo do seu programa. E pode vir para a frente ou para trás, dependendo de como a garrafa está sendo mantida. Seu programa deve retornar a string do meio do código de barras, via STOUT ou arquivo.

Infelizmente, ele não gastou tanto em seu armazenamento, então o programa com a menor fonte será escolhido e ganhará bebidas gratuitas e tutoriais de programação bêbados dos outros jogadores.

Boa sorte!

Lochok
fonte
7
Em outras palavras, determine se a entrada é 101...1001ou 1001...101e inverta no último caso, e empacote o centro em bytes.
John Dvorak
1
Completamente preciso. Mas qual é a graça disso? : p
lochok

Respostas:

9

GolfScript, 30 caracteres

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

A entrada é fornecida no STDIN. Exemplo :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Howard
fonte
1

J - 35 bytes

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

Explicação em breve :).

jpjacobs
fonte
4
Quanto mais tarde? ;-)
Tim
0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Explicação:

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

Observe que, embora a pergunta seja mais antiga que o idioma, a existência da pergunta não influenciou o design do idioma de forma alguma, porque ainda não a vi antes.

Ainda regras são regras, então estou fazendo CW.

isaacg
fonte
OK, eu vou fazer CW então.
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}}

Sei que esta pergunta não viu muito amor, mas estava curiosa sobre ver e AWKresolver. Isso não é tão inteligente, mas parece funcionar e não vejo áreas óbvias para o golfe. Inicialmente, eu invertei a string quando necessário, mas isso acrescentou mais bytes do que apenas ajustar a lógica de incremento para retroceder.

Robert Benson
fonte