Inspiré par la bande dessinée XKCD suivante:
Dans "Work It" de Missy Elliot, une partie du refrain se déroule comme suit:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Gardant cela à l'esprit, je propose le défi de golf de code suivant:
Créez un code qui le fasse, dans l'ordre:
- Prend une entrée ASCII 8 bits de STDIN; par exemple
n
(Hex 6E ou Bin 01101110) - Décale le niveau de 8 bits de chaque octet vers le bas de 1 bit (je crois que cela s'appelle un décalage vers le bas), par exemple
01101110
devient00110111
("mettre mon truc"); - Inverse les bits de chaque octet, par exemple
00110111
devient11001000
("flip it"); - Inverse les bits pour chaque octet, par exemple
11001000
devient00010011
("inversez-le"); - Si la valeur d'un octet est inférieure à 32, effectuez
(95 + [byte value])
, ou en d'autres termes,(126-(31-[byte value]))
sur l'octet avant de reconvertir en ASCII ... Si la valeur de l'octet est toujours inférieure à 32, répétez l'étape 5 - Si la valeur d'un octet est supérieure à 126, effectuez
([byte value] - 95)
, ou en d'autres termes,(32+([byte value]-127))
sur l'octet avant de reconvertir en ASCII ... SI la valeur est toujours supérieure à 126, répétez l'étape 6. - Affichez la chaîne nouvellement convertie en ASCII.
Un exemple de ce code en action:
(L'entrée, ça vaut le coup?)
workit missy
("missy" étant l'entrée, "workit" est la fonction)
Maintenant dans les coulisses ...
(laissez-moi le travailler ... en binaire)
01101101 01101001 01110011 01110011 01111001
(Posez mon truc ... au niveau du bit)
00110110 00110100 00111001 00111001 00111100
(...Retournez...)
11001001 11001011 11000110 11000110 11000011
(... Et inversez-le!)
10010011 11010011 01100011 01100011 11000011
(Reconverti en décimal)
147 211 99 99 195
(Effectuez les calculs nécessaires)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Convertir en ASCII et afficher la sortie)
4tccd
Règles
- Le code le plus court gagne ... aussi simple que ça ...
- L'entrée peut se faire via la fonction, par invite ou tout ce qui fonctionne pour vous, tant que vous pouvez faire en sorte que la règle 1 "fonctionne" pour vous ...;)
- Je ne recherche pas la réversibilité, tant que vous pouvez faire faire au code ce que je lui ai demandé de faire, je serai heureux ...
Bonne chance!
la source
0 1 1 0 1 1 0 1
et0 1 1 0 1 0 0 1
pourmi
P
transforme en valeur d'octet235
et la soustraction95
vous laisse avec140
. Encore non imprimable. Ou est-ce que je me méprends?Réponses:
APL
5045Prend des entrées sur le clavier, par exemple:
la source
GolfScript
433835Explication: Pour chaque caractère de la chaîne, nous ferons ce qui suit:
Usage:
Merci à PeterTaylor pour son aide.
la source
2base{0\+.,9<}do
ce serait le cas512+2base(;
. Notez également que si l'intention est uniquement d'obtenir la sortie correcte, vous pouvez réorganiser les opérations, plutôt que{!}%
d'avoir simplement besoin de~
l'entrée avant la conversion de base (puis remplacez-la512+
par511&
).2/
comme un décalage de bits, vous pouvez toujours effectuer un décalage de bits, puis~
, convertir de base ...K,
6858.
la source
J - 61
la source
J,
5554 caractèresla source
Rubis, 115
Cette entrée est longue sans concurrence. Je vais donc continuer, "mais vous pouvez le lire!" :-P
Lit de
stdin
:la source
Python 2.7, 106
Une autre réponse assez longue, mais bon c'est mon premier essai:
Modifié en fonction des commentaires de Darren Stone et grc ci-dessous ...
la source
a:
.chr
expression avec cela pour une autre économie 1-char:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Grâce au changement de règles, j'ai trouvé un moyen beaucoup plus simple de tout faire en utilisant la manipulation binaire et entière. Cela économise de l'espace sur les Quirlioms en n'ayant pas besoin d'une variable temporaire:
Et sous forme d'explication:
la source