Pouvez-vous coder un code-barres dans une barre?

12

Bienvenue au bar piNapple de Melbourne. Tous les meilleurs golfeurs de code sont ici, avec leurs ordinateurs portables, les cocktails d'échantillonnage et la programmation de plus en plus mal.

Je ressens un besoin particulier de souligner à nouveau le dernier point. De plus en plus mal. L'alcool peut faire des choses amusantes à la logique de programmation.

Ainsi, quelques-uns des golfeurs tentaient des quines imbriquées dans des langues de plus en plus exotiques. Quelqu'un avait frappé le quatrième ordre dans INTERCAL. Puis le flux d'alcool s'est arrêté. Il a ivre, accidentellement supprimé les algorithmes de lecture de codes à barres d'un ordinateur complètement différent ... qui n'était même pas connecté à un réseau! (Enfants - ne pas INTERCALER. Pour votre bien. Pour le bien de votre famille.)

Normalement, ce ne serait pas un gros problème. Mais, certains golfeurs avaient conçu le système il y a des années, et aucun des codes à barres n'était standard. En supposant que les 1 sont des lignes et les 0 sont des espaces, ils commencent tous par 101 et se terminent par 1001. Tout au milieu est codé en ASCII 7 bits.

Le barkeep a un grand lecteur de code-barres de fantaisie qui renverra une chaîne de longueur arbitraire (bien que moins de 300 bits) de 1 et de 0, via STDIN, argument ou fichier selon votre programme. Et il peut avancer ou reculer selon la façon dont la bouteille est maintenue. Votre programme doit retourner la chaîne du milieu du code-barres, via STOUT ou fichier.

Malheureusement, il n'a pas dépensé autant sur son stockage, donc le programme avec la source la plus courte sera choisi et gagner des boissons gratuites et des tutoriels de programmation ivre des autres golfeurs.

Bonne chance!

lochok
la source
7
En d'autres termes, déterminez si l'entrée est 101...1001ou 1001...101et inversez dans ce dernier cas, puis regroupez le centre en octets.
John Dvorak
1
Complètement précis. Mais quel est le plaisir là-dedans? : p
lochok

Réponses:

9

GolfScript, 30 caractères

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

L'entrée est fournie sur STDIN. Exemple :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC
Howard
la source
1

J - 35 octets

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

Explication à venir plus tard :).

jpjacobs
la source
4
Combien plus tard? ;-)
Tim
0

Pyth , 21

smCid2c:?zv@z2_z3_4 7

Explication:

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

Notez que bien que la question soit plus ancienne que la langue, son existence n'a en aucun cas influencé la conception de la langue, car je n'ai pas vu la question avant aujourd'hui.

Les règles sont toujours des règles, donc je le fais CW.

isaacg
la source
OK, je le ferai CW alors.
isaacg
0

AWK, 116 octets

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

Je sais que cette question n'a pas vu beaucoup d'amour, mais j'étais curieux de voir et de AWKsolution. Ce n'est pas si intelligent que ça, mais cela semble fonctionner et je ne vois aucun domaine évident pour le golf. À l'origine, j'ai inversé la chaîne lorsque cela était nécessaire, mais cela a ajouté plus d'octets que de simplement modifier la logique d'incrémentation pour revenir en arrière.

Robert Benson
la source