Inspirado nos seguintes quadrinhos do XKCD:
No "Work It" de Missy Elliot, parte do refrão é a seguinte:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Tendo isso em mente, proponho o seguinte desafio de código de golfe:
Crie um código que faça, em ordem:
- Recebe entrada ASCII de 8 bits do STDIN; por exemplo
n
(Hex 6E ou Bin 01101110) - Turnos de 8 bits de cada byte baixo nível de 1 bit (creio que é chamado da tecla shift bit a bit), por exemplo,
01101110
torna-se00110111
( "colocar a minha coisa para baixo"); - Inverte os bits de cada byte, por exemplo,
00110111
torna-se11001000
("flip it"); - Inverte os bits para cada byte, por exemplo,
11001000
torna-se00010011
("inverta"); - Se o valor de um byte for menor que 32, execute
(95 + [byte value])
ou, em outras palavras,(126-(31-[byte value]))
o byte antes de converter novamente em ASCII ... Se o valor do byte ainda for menor que 32, repita a etapa 5 - Se o valor de um byte for maior que 126, execute
([byte value] - 95)
ou, em outras palavras,(32+([byte value]-127))
o byte antes de converter novamente para ASCII ... SE o valor ainda for maior que 126, repita a etapa 6. - Exiba a sequência recém-convertida como ASCII.
Um exemplo deste código em ação:
(A entrada, vale a pena?)
workit missy
("missy" é a entrada, "workit" é a função)
Agora nos bastidores ...
(deixe-me trabalhar ... em binário)
01101101 01101001 01110011 01110011 01111001
(Largue as coisas ... Bitwise)
00110110 00110100 00111001 00111001 00111100
(... Virá-lo ...)
11001001 11001011 11000110 11000110 11000011
(... E inverta isso!)
10010011 11010011 01100011 01100011 11000011
(Convertido de volta para decimal)
147 211 99 99 195
(Faça a matemática necessária)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Converta de volta para ASCII e exiba a saída)
4tccd
Regras
- O código mais curto ganha ... simples assim ...
- A entrada pode ser via função, por prompt ou o que funcionar para você, desde que você possa fazer com que a Regra 1 "funcione" para você ...;)
- Não estou atrás da reversibilidade, desde que você possa fazer o código fazer o que eu pedi, ficarei feliz ...
Boa sorte!
fonte
0 1 1 0 1 1 0 1
e0 1 1 0 1 0 0 1
parami
P
transforma no valor de byte235
e a subtração95
deixa você com140
. Ainda não imprimível. Ou entendo mal?Respostas:
APL
5045Recebe entrada no teclado, por exemplo:
fonte
GolfScript
4338.35Explicação: Para cada caractere na sequência, faremos o seguinte:
Uso:
Obrigado pela ajuda de PeterTaylor.
fonte
2base{0\+.,9<}do
disso seria512+2base(;
. Observe também que, se a intenção é apenas obter a saída correta, você pode reordenar as operações, portanto, em vez de{!}%
precisar apenas~
da entrada antes da conversão base (e depois substituir512+
por511&
).2/
como uma mudança pouco, então você ainda pode mordeu turno, em seguida~
, em seguida, base de converso ...K,
6858.
fonte
J - 61
fonte
J,
5554 caracteresfonte
Ruby, 115
Esta entrada é incompetitivamente longa. Então eu vou com ", mas você pode ler!" :-P
Lê de
stdin
:fonte
Python 2.7, 106
Outra resposta bastante longa, mas ei, é a minha primeira tentativa:
Modificado com base nos comentários de Darren Stone e grc abaixo ...
fonte
a:
.chr
expressão com este por mais poupança 1 char-:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Graças à mudança nas regras, encontrei uma maneira muito mais simples de fazer isso usando manipulação binária e número inteiro. Isso economiza espaço nos Quirlioms por não precisar de uma variável temporária:
E na forma de explicação:
fonte