Inverter e inverter uma string
Desafio
Neste desafio. Você estará escrevendo um programa que produzirá ou retornará a entrada, invertida e invertida.
Primeiro, cada caractere deve ser convertido em seu código de caractere. Então, isso deve ser convertido em base-2. A seguir, essa sequência deve ser revertida. Depois, a string deve ser invertida (1 -> 0 e 0 -> 1). Finalmente, isso deve ser convertido novamente para a base 2 e depois convertido para um caractere. Se um caractere for imprimível, você pode, opcionalmente, imprimi-lo, mas ele não precisa ser removido.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Pontuação
O menor código em bytes vence.
-15% Bônus: se o seu programa remover os imprimíveis da saída. Deve ter pelo menos todos os caracteres abaixo de 32, exceto novas linhas (caractere 10)
GBktnkZs
0010000
, ele deve ser tratado como10000
para que o inverso seria00001
Respostas:
CJam, 14
Experimente online
Explicação:
Bem direto:
Versão "imprimível", 20 - 15% = 17
fonte
Pitão, 14 bytes
Experimente online.
Como funciona
fonte
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 caracteres(Código de 50 caracteres + opção de linha de comando de 1 caractere.)
Exemplo de execução:
fonte
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
é mais curto quesprintf'%b',ord$&
e decodifica adicionalmente na ordem inversa. Infelizmente, também produz 0s à direita, que precisam ser removidos.unpack
ainda é um terreno inexplorado para mim.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Inverter o personagem, não há necessidade de transliterate;)JavaScript (
ES6ES7),119114108 bytesIsso acabou muito mais do que o esperado :(
Obrigado a @vihan por 5 bytes salvos! Obrigado a @ETHProductions por mais 6 bytes salvos!
Para testar: Execute o snippet abaixo, insira a entrada como
"Hello, World!"
e clique em Testar!fonte
parseInt
com+('0b'+<code>)
como descrito aqui e outro usandow^1
em vez de+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107,95) Talvez isso não seja legal; ele só lida10 == \n
, não13 == \r
. @ Vɪʜᴀɴ qual é a sua opinião?Unexpected token '>'
quando tento executar o snippet.JavaScript (ES7), 126 bytes - 15% = 107,1
Eu estava brincando com esta resposta para ver se o bônus valeu a pena. Aparentemente é. A suíte de testes foi roubada da mesma resposta, mas eu adicionei meu toque: suporte total do bônus de 15%! :)
fonte
getScore()
função que verifica aHello, World!
conformidade do caso de teste (contém convenientemente uma nova linha e caracteres não imprimíveis) e retorna a pontuação multiplicada por 0,85 ou 1, dependendo do resultado. E sim, o acesso ao snippet não minificado seria ótimo. :)PHP -
187182163 bytesPasse o valor como
GET["s"]
.array_map retorna uma matriz com todos os elementos do segundo parâmetro (uma matriz) após aplicar a função de retorno de chamada (primeiro parâmetro) a todos eles.
Não tenho certeza se devo retirar os 15% de desconto, pois
echo
não gera caracteres imprimíveis, mas não os removi.Ainda bem que terminei, pois esse é o primeiro desafio que faço.
fonte
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. By the way, você não precisa usar aspas em torno string ("chr"
,"bindec"
...) uma vez que não se preocupam com avisos. Isso deve economizar 12 bytes.str_split($s)
por,str_split(fgets(STDIN))
por exemplo.K5, 28 bytes
Isso é um pouco inconveniente, porque o
decode
operador do K5 realiza uma conversão básica de largura fixa; portanto, para cumprir a declaração do problema, preciso ajustar os zeros à esquerda. O lambda{x@&|\x}
realiza essa etapa.Mancha:
Reunir:
Selecione:
Todo o programa em ação:
Acredito que o comportamento natural da OK com os não imprimíveis a torne elegível para -15%, atribuindo uma pontuação de 28 * 0,85 = 23,8 .
fonte
Julia, 77 bytes - 15% = 65,45
Isso cria um functon sem nome que aceita uma string e retorna uma string. Caracteres não imprimíveis são removidos, o que qualifica isso para o bônus.
Ungolfed:
fonte
filter(isprint,)
e apenas 11,55 bytes salvos através do bônus.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(para 56 bytes)filter(isprint,)
ambos qualifica o bônus e o torna compatível com as regras.\x04
e similares), em seguida,print()
custa sete, o que traria 56 até 63.PowerShell,
199 175(171 - 15%) = 145,35Usa
uma quantidade infeliz dealgumas chamadas / built-insdo.NET, que inchasignificativamenteo código.Explicado:
Pega a entrada
param(..)
e lança-a como umchar[]
para que possamos trabalhar com ela adequadamente.O próximo bit
(..)-join''
coleta e une nossa saída.Dentro dessas parênteses, iteramos
$a|%{..}
como um loop foreach.Dentro do loop:
$b
, que é nossa letra de entrada convertida como int+$_
e[convert]
ed para basear2
$c
, é complicado, então vamos começar por dentro e trabalhar o nosso caminho$b
com(-join$b[$b.length..0])
"$(..)"
[convert]
éToInt32
da base2
, que finalmente é armazenada na$c
$c
for maior que31
ou igual a10
, nós o lançamos como um caractere e esse valor é deixado no pipeline de saída (que é o que é coletado e-join''
editado acima), caso contrário, nada resta nessa iteração específicaUfa.
Também se qualifica para o bônus de -15%.
Exemplo
fonte
Função C, 63
fonte
39, 39 caracteres / 73 bytes
Try it here (Firefox only).
fonte
Minkolang 0.11 , 26 bytes
Experimente aqui.
Explicação
fonte
MATLAB, 60 bytes
Basicamente, cada caractere, por sua vez, é convertido em uma sequência binária (sem zeros à esquerda). A matriz é invertida e subtraída de 97 ('0' + '1') que inverte o caractere. Isso é convertido novamente em decimal. Depois que todos os caracteres foram processados, toda a matriz é convertida novamente em caracteres antes de ser retornada.
fonte
Python 3,
9591Implementação direta.
Ungolfed:
fonte
Ruby, 62 caracteres
Exemplo de execução:
fonte
C #, 156 bytes - 15% = 132,6
Recuo e novas linhas para maior clareza:
fonte
Javascript 123 bytes
fonte
Retina ,
1107629 bytes - 15% = 534,65 (não concorrente)Usa recursos adicionados após a data do desafio. (O comportamento implícito de
$*
,¶
, triagem)O Retina não tem um built-in para converter um caractere em seu ordinal ASCII ou vice-versa ... então observe seu comprimento brilhante. Ele lida com ASCII imprimível e remove os não imprimíveis e as novas linhas. A contagem de bytes assume a codificação ISO 8859-1.
O código contém caracteres não imprimíveis.
Experimente online
Se você verificar o tutorial da Retina quanto à aritmética unária , reconhecerá várias partes diferentes do meu código como provenientes de lá.
Agradecimentos a Martin por jogar centenas de bytes
fonte
Java, 205 - 15% = 174,2
Ungolfed:
Eu acho que essa solução é um pouco interessante no uso dos
Integer
métodosInteger.reverse
eInteger.numberOfLeadingZeros
que fazem o que parecem, e a mudança de-1 >>> s
ondes
está o número de zeros à esquerda, para fazer com que a máscara oculte os bits altos que não queremos. Só lamento que o nome do último método seja tão detalhado, mas é o que recebo pelo golfe em Java.Saída:
fonte
Japt, 25 bytes
Deseja criar um programa JavaScript de golfe, mas o método mais curto envolve muitos nomes de funções longos? Foi para isso que Japt foi feito. :)
Experimente no intérprete online !
Como funciona
Usando a versão atual do Japt (a partir da v1.4.4), a contagem de bytes pode ser reduzida para 14:
Teste online!
fonte
Haskell, 167 bytes
Infelizmente, Haskell fica bastante detalhado quando precisa ler / imprimir em outra base…
fonte
Perl 6, 66 bytes
Fazer tudo ao remover os caracteres de controle que não imprimem me leva a (83 + 1) -15% = 71,4
Se eu remover o código que retira os caracteres de controle, economizo bastante 65 + 1 = 66
(Eu usei em
»
vez de>>
clareza)fonte
Gelatina , 6 bytes (não concorrente)
Experimente online!
Explicação:
fonte
Raquete 250 15% de bônus = 212 bytes
Ungolfed:
Teste:
Saída:
fonte
PHP, 80 bytes
recebe entrada do STDIN; corra com
-R
.versão bônus,
97110 bytes -> pontuação 93,5imprime ASCII 10 e 32 a 126 (nova linha e imprimíveis)
avaria, TiO e, se possível, algum golfe se seguirá; Estou cansado agora.
fonte