Inspirado en el siguiente cómic de XKCD:
En "Work It" de Missy Elliot, parte del coro dice lo siguiente:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Teniendo esto en cuenta, propongo el siguiente código de desafío de golf:
Crea un código que lo haga, en orden:
- Toma la entrada ASCII de 8 bits de STDIN; por ejemplo
n
(Hex 6E o Bin 01101110) - Cambia los 8 bits de cada byte a nivel de 1 bit (creo que se llama un desplazamiento a nivel de bits), por ejemplo, se
01101110
convierte en00110111
("baja mi cosa"); - Invierte los bits de cada byte, por ejemplo, se
00110111
convierte en11001000
("voltearlo"); - Invierte los bits para cada byte, por ejemplo, se
11001000
convierte00010011
("revertirlo"); - Si el valor de un byte es menor que 32, realice
(95 + [byte value])
, o en otras palabras,(126-(31-[byte value]))
en el byte antes de volver a convertirlo a ASCII ... Si el valor del byte aún es menor que 32, repita el paso 5 - Si el valor de un byte es mayor que 126, realice
([byte value] - 95)
, o en otras palabras,(32+([byte value]-127))
en el byte antes de volver a convertirlo a ASCII ... SI el valor sigue siendo mayor que 126, repita el paso 6. - Mostrar la cadena recién convertida como ASCII.
Un ejemplo de este código en acción:
(La entrada, ¿vale la pena?)
workit missy
("missy" es la entrada, "workit" es la función)
Ahora detrás de escena ...
(déjame trabajarlo ... en binario)
01101101 01101001 01110011 01110011 01111001
(Deja mi cosa ... Bitwise)
00110110 00110100 00111001 00111001 00111100
(...Voltearlo...)
11001001 11001011 11000110 11000110 11000011
(... ¡Y revertirlo!)
10010011 11010011 01100011 01100011 11000011
(Convertido de nuevo a decimal)
147 211 99 99 195
(Realice las matemáticas necesarias)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Convertir de nuevo a ASCII y mostrar, la salida)
4tccd
Reglas
- El código más corto gana ... así de simple ...
- La entrada puede ser a través de la función, por solicitud o lo que sea que funcione para usted, siempre que pueda hacer que la Regla 1 "funcione" para usted ...;)
- No busco la reversibilidad, siempre que pueda hacer que el código haga lo que le he pedido, estaré feliz ...
¡La mejor de las suertes!
fuente
0 1 1 0 1 1 0 1
y0 1 1 0 1 0 0 1
parami
P
convierte en el valor de byte235
y restando95
te deja con140
. Aún no imprimible. ¿O lo entiendo mal?Respuestas:
APL
5045Toma entrada en el teclado, por ejemplo:
fuente
GolfScript
433835Explicación: Para cada carácter de la cadena, haremos lo siguiente:
Uso:
Gracias a la ayuda de Peter Taylor.
fuente
2base{0\+.,9<}do
serlo512+2base(;
. También tenga en cuenta que si la intención es solo obtener la salida correcta, puede reordenar las operaciones, por lo que en lugar de{!}%
solo necesitar~
la entrada antes de la conversión de base (y luego reemplazar512+
con511&
).2/
como un cambio de bit, entonces todavía puede cambiar un poco, entonces~
, luego convertir base ...K,
6858.
fuente
J - 61
fuente
J,
5554 caracteresfuente
Ruby, 115
Esta entrada es poco competitiva. Así que iré con "¡pero puedes leerlo!" :-PAGS
Lee de
stdin
:fuente
Python 2.7, 106
Otra respuesta bastante larga, pero bueno, es mi primer intento:
Modificado en base a los comentarios de Darren Stone y grc a continuación ...
fuente
a:
.chr
expresión con esto por otro ahorro 1-char:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Gracias al cambio en las reglas, encontré una manera mucho más simple de hacer todo esto utilizando la manipulación binaria y de enteros. Esto ahorra espacio sobre Quirlioms al no necesitar una variable temporal:
Y en forma de explicación:
fuente