Eu acha que aqui não há perguntas fáceis suficientes que os iniciantes possam tentar!
O desafio: Dada uma sequência de entrada aleatória de 1 e 0, como:
10101110101010010100010001010110101001010
Escreva o código mais curto que produz o inverso em bits da seguinte maneira:
01010001010101101011101110101001010110101
=&'0'
funciona para o mesmo número de bytes.GolfScript , 5 bytes
Experimente online.
Como funciona
O GolfScript lê toda a entrada do STDIN e a coloca na pilha como uma string.
{}%
passa por todos os caracteres da string e executa o bloco de código para todos eles.1^
calcula o OR exclusivo do código ASCII de caracteres com 1. “0” corresponde ao código ASCII 48, “1” ao código ASCII 49.Desde
48 ^ 1 = 49
e49 ^ 1 = 48
, isso transforma zeros em zeros e zeros em zeros.Depois de concluído, o GolfScript imprime a sequência modificada.
fonte
CJam - 4
Este xor é todo caractere com 1.
Diferente da outra resposta CJam, não estou assumindo que a entrada já esteja na pilha.
Experimente em http://cjam.aditsu.net/
fonte
f
.código de máquina x86 no DOS -
141311 bytesBem, ficou mais curto de novo! Depois de escrever uma solução para um desafio não relacionado , notei que o mesmo truque poderia ser aplicado mesmo aqui. Aqui vamos nos:
Montagem comentada:
Solução anterior - 13 bytes
Eu acho que não fica muito mais curto que isso.Na verdade, sim! Obrigado a @ninjalj por remover mais um byte.Esta versão possui interatividade avançada ™ - depois de executá-lo na linha de comando, ele cospe os caracteres "invertidos" desde que você escreva os dígitos de entrada (que não são ecoados); para sair, basta pressionar Ctrl-C.
Diferentemente da solução anterior, isso apresenta alguns problemas ao executar no DosBox - como o DosBox não suporta Ctrl-C corretamente , você é obrigado a fechar a janela do DosBox se quiser sair. Em uma VM com DOS 6.0, ele é executado conforme o esperado.
Fonte NASM:
Solução antiga -
272522 bytesIsso aceitou sua entrada da linha de comando; funciona sem problemas como um arquivo .COM no DosBox.
Entrada NASM:
fonte
xchg dx,ax
é 1 byte menor quemov dl,al
Bash + coreutils, 8 bytes
Recebe entrada de STDIN.
Ou
sed, 8 bytes
fonte
y 01 10
tr
...CJam , 4 bytes
Assume que a sequência original já está na pilha. Imprime a sequência modificada.
Experimente online colando o seguinte código :
Como funciona
:~
avalia cada caractere da sequência, ou seja, substitui o caractere 0 pelo número inteiro 0.:!
calcula o NOT lógico de cada número inteiro. Isso transforma zeros em zeros e zeros em zeros.fonte
Brainfuck (
7071)Explicação:
fonte
a
para11
.PHP - 19 bytes
Sim, não é realmente original, eu acho!
fonte
Pilha de panquecas , 532 bytes
Assume que a entrada é finalizada por um caractere nulo. A estratégia é a seguinte:
1
dele.0
(produzindo um1
se tivéssemos0
, ou um0
se tivéssemos1
)0
nelefonte
C: 29
Experimente online aqui .
Obrigado por apontar o truque do XOR, Dennis.
fonte
i(char*s){while(*s)*s++^=1;}
while
por umfor
resultado imóvel de 28 caracteres.Python 2.7 - 34 *
Oh, quanto este primeiro é péssimo. Muito feio, esse aqui é. 63 caracteres.
Este é um pouco melhor, mas ainda não é tão chique. 44 caracteres.
Desde
int(x) and 1
retornaint(x)
se não for 0 e, caso contrário, False. A solução pode ser reduzida ainda mais para 36 caracteres.Como
join()
leva um gerador, os suportes podem ser removidos. 32 caracteres.E backticks podem ser usados em vez de
str()
Reduzido para 44 de 34 graças aos ponteiros de @TheRare
Encontrar um complemento é difícil em python, pois
bin(-int)
retorna -0bxxx, portanto, o acima.fonte
(int(x) and 1) == int(x)
'' == False
e'hi' == True
''.join(`1-int(x)`for x in'')
repr(x)
para x <maxint é igual astr(x)
Perl, 9 caracteres
O nono caractere é a bandeira 'p'
Uso:
fonte
y/10/01/
mas um caractere menor porque ele não precisa de quaisquer bandeirasJavascript ( ES6 ) 36
fonte
s
,s.replace(/./g,x=>x^1)
são 22 caracteres.p=prompt(p().replace(/./g,x=>x^1))
(p=prompt)(p().replace(/./g,x=>x^1))
e tem o mesmo comprimento.Labirinto , 6 bytes
(O labirinto é mais novo que esse desafio, então essa resposta não compete - não que ele esteja vencendo de qualquer maneira ...)
Este código pressupõe que STDIN contenha apenas os dígitos (em particular, nenhuma nova linha à direita).
O ponteiro de instrução (IP) começa no canto superior esquerdo, indo para a direita. Enquanto houver dígitos para ler, ele percorrerá um loop apertado pelo bloco 2x2 esquerdo:
1
pressione 1,,
leia um dígito, faça$
XOR com 1 para alternar o último bit,.
imprima o resultado. O IP aceita esse loop porque a parte superior da pilha é positiva após o XOR, de modo que ele vire à direita. Quando atingimos EOF,,
retorna-1
. Então o XOR renderá-2
e com esse valor negativo o IP fará uma curva à esquerda no@
e o programa será encerrado.Esta solução deve ser ótimo para Labyrinth: o que você precisa
,
e.
para um circuito de I / O e@
para terminar o programa. Você precisa de pelo menos dois caracteres (aqui1
e$
) para alternar o último bit. E você precisa de pelo menos uma nova linha para um loop que pode ser encerrado.A menos que ... se ignorarmos o STDERR, ou seja, permitir terminar com um erro, podemos salvar o
@
e também não precisamos de nenhuma maneira de alternar entre dois caminhos. Nós apenas continuamos lendo e imprimindo até tentarmos acidentalmente imprimir um valor negativo (the-2
). Isso permite pelo menos duas soluções de 5 bytes:fonte
Ruby: 23
fonte
Código da máquina de Turing, 32 bytes (1 estado - 3 cores)
Usando a sintaxe da tabela de regras exigida por este simulador de TM online. Emprestado de uma postagem que fiz no meu blog de usuários do Googology Wiki há alguns meses.
Você também pode testar isso usando esta implementação java.
fonte
Python 2.x - 44 bytes
Por que torná-lo complexo ou usar algumas variáveis baratas?
fonte
print''.join('1-int(x)'for x in'input()')
. Como não consegui obter os backticks no código dos comentários, substituí-los por '.`a\`b`
->a`b
.R, 27 caracteres
Uso:
fonte
APL (Dyalog Unicode) , SBCS de 7 bytes
Programa completo. Solicita stdin.
Experimente online!
⍞
prompt stdin⍎¨
executar cada caractere~
NÃO lógico⍕¨
formate cada caractere como texto∊
ε nlist (achatar)fonte
PHP> 5.4 - 37 caracteres
$s
é a entradaTry it online
fonte
<kbd>
tag.TI-BASIC, 7 bytes
Essa é uma função que recebe uma string binária (através
Ans
) como entrada e retorna a saída como uma string invertida (não revertida), conforme especificado. Para obter mais ajuda, você pode ler o aplicativo da listanot(
no wiki do TI-BASIC. Estou usando a versão compilada porque é menor:Em hexadecimal:
Explicação
»*r
- Pegue a entrada da função como string e converta para a lista>
- Lista de tubulação fornecida para os próximos operadoresÕ¸r
- Retorna o inverso da listafonte
»*r>Õ¸r
?expr(Ans:Returnnot(Ans
; 2. Como a sequência não é separada por vírgulas e não começa com a{
, ela será avaliada para um número inteiro como 1000010011, não para uma lista; 3.Return
não funciona da maneira que você escreveu; 4. Isso fornece a saída como uma lista, não como uma string.Haskell, 22 bytes
Fiquei surpreso com a falta de soluções Haskell para esse desafio, então aqui está uma. Ele avalia como uma função que pega uma string e retorna sua inversa.
Explicação
Nada extravagante aqui.
fonte
Entre 93, 25 bytes
Supondo que a pilha vazia e o EOF leiam -1.
0
envia um \ 0 como terminador nulo>~1+:#v_
é um loop de entrada, lê ASCII, adiciona 1, verifica EOF + 1 = 0,^ -1<
else subtrai 1 e deixa o valor ASCII empurrado na pilha.$>:#,_@
coloca a cópia extra de zero no topo da pilha e imprime a sequência binária de cima para baixoSe a pilha vazia exibir 0, salve 2 bytes com
É possível uma versão em torno de 15 bytes usando esse mesmo algoritmo se EOF = 0, mas não tenho essa implementação à mão para testar.
fonte
Javascript ES6, 26 caracteres
fonte
Befunge-98 (PyFunge) , 7 bytes
Para cada caractere,
c
na entrada, ele imprime o caractere com um valor ascii de94 - c
, em que 94 é o valor de '0' + '1' ou 'a'Experimente online!
fonte
Python3, 39
Methinks Python não é a melhor linguagem para isso. :)
Se você se preocupa em ter uma nova linha após a saída, aqui está uma alternativa de 43 caracteres:
fonte
end=''
apenas um,
vai fazer :) - a menos que você se preocupa não havendo espaçosprint
função do Python3 requer ajustar oend
parâmetro para suprimir uma nova linha no final de cada impressão. Além disso, de acordo com a especificação do OP, acho que me importo em não haver espaços. :) Obrigado pelo comentário!J - 11 caracteres
Os valores booleanos em J são representados como números inteiros
0
e1
, é claro, também são índices válidos em matrizes (nesse caso, a matriz de 2 caracteres'01'
)fonte
C #, 131 bytes
Um pouco atrasado para a festa, mas aqui está o meu. :)
fonte
MATLAB, 13 bytes
Após executar o procedimento acima, basta chamar a função com sua string de entrada para obter a string invertida. Por exemplo, executando:
impressões:
fonte
BotEngine , 4x8 = 32
Não-competitivo, pois o idioma pós-data da pergunta.
Com destaque:
fonte