Sua tarefa, se você deseja aceitá-la, é escrever um programa que produza um número diferente de zero (pode ser inteiro ou flutuante). A parte complicada é que, se eu reverter seu código-fonte, a saída deve ser o número inteiro original negado.
Regras
Você deve criar um programa completo . Ou seja, sua saída deve ser impressa em STDOUT.
Ambos os números devem estar na base 10 (é proibido produzi-los em qualquer outra base ou com notação científica).
É permitida a saída de números com espaços à direita / à direita.
Isso é código-golfe, então o código mais curto (original) em cada idioma vence!
Aplicam-se lacunas padrão.
Exemplo
Digamos que seu código fonte seja ABC
e sua saída correspondente seja 4
. Se eu escrever CBA
e executá-lo, a saída deve ser -4
.
code-golf
source-layout
Altamente radioativo
fonte
fonte
-
(0x45 = 0b00101101) trabalha no Jelly --
gera -1, pois define o literal -1, enquantoṆ
(0xB4 = 0b10110100) gera 1, pois executa uma lógica não da entrada implícita de zero. (É claro queṆ
funciona tão bem quanto: p)Respostas:
05AB1E , 2 bytes
Experimente online!
! enilno ti yrT
fonte
JavaScript (V8) , 19 bytes
Experimente online!
quase idêntico a ...
C # (compilador interativo do Visual C #) , 19 bytes
Experimente online!
(obrigado a @someone por apontar)
ainda praticamente o mesmo em ...
Lua , 19 bytes
Experimente online!
mas mais curto em ...
Python 2 , 15 bytes
Experimente online!
Ainda mais curto no PHP, porque possui esta ferramenta de impressão mágica:
<?=
...PHP , 12 bytes
Experimente online!
Ainda menor no Ruby, porque você pode, em
inspect
vez de imprimirRuby , 8 bytes
Experimente online!
fonte
Print(1)//)-1(tnirP
,. ( Experimente online! )class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
1<!--!<1-
(9 bytes) com HTML, que será-1<!--!<1
quando invertido. Faz exatamente o mesmo que sua resposta.print(1)--)1-(tnirp
PowerShell ,
43 bytesExperimente online! ou ! enilno ti yrT
Golpeou um byte usando aritmética em vez do formato número-comentário-número.
Aparentemente, isso também é o mesmo que jshell (por Sam ) e jq (por manatwork -
1-0
e0-1
).fonte
1-0
0-1
/// , 4 bytes
Saídas
9
.Experimente online!
Invertida:
Saídas
-9
.Experimente online!
Tudo antes da
/
impressão é impresso, enquanto o resto é ignorado (as barras realmente não são muito usadas, então não sei exatamente o que acontece, mas não produz nada).fonte
/
inicia o processo de leitura do padrão e, portanto, os caracteres após serem lidos no padrão, não emitidos./\-//1-
e pensei que era inteligente. : DKlein 011, 5 bytes
Experimente online!
Invertida
Experimente online!
Eles aproveitam a topologia exclusiva de Klein, especificamente o plano projetivo real. (Embora individualmente cada resposta precise apenas de uma garrafa de Klein).
fonte
Espaço em branco , 21 bytes
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.Saídas
1
/-1
.Experimente on-line ou on -line invertida (apenas com espaços brutos, guias e novas linhas).
Explicação:
Utilizando o programa Exit, é um palíndromo curto
NNN
.O programa regular irá:
O programa reverso irá:
Pequena explicação adicional de como pressionar um número:
S
: Ativar manipulação de pilhaS
: Empurre um número para a pilhaS
ouT
: positivo / negativo, respectivamenteS
/T
seguidos por um finalN
: número em binário, ondeS=0
eT=1
Ou seja,
SSTTSTSN
empurra-10
.fonte
T-SQL, 16 bytes
Escolheu 4 porque 1 é usado em excesso :)
fonte
select 1#1-tceles
(17 bytes). Você pode verificar o resultado em sqlfiddle.com/#!9/9eecb/107825 .Japt , 2 bytes
Qualquer inteiro único dígito
>0
pode ser usado em lugar do2
como lataA-G
,H
,I
,J
ouL
(10-16
,32
,64
,-1
&100
, respectivamente).Teste |Invertida
O
n
método, quando aplicado a um número inteiro, subtrai esse número inteiro do argumento passado a ele, cujo padrão é0
. Quando executado adiante, on
método está sendo executado na primeira entrada implícita, que também é padrão0
.Como alternativa, o
g
método poderia ser usado em vez den
, o que indica o resultado da subtração do argumento do número inteiro ao qual é aplicado.fonte
Haskell sem comentários, 41 bytes
Encaminha impressões
1
+ nova linha:Experimente online!
Impressões invertidas
-1
sem nova linha (que podem ser adicionadas ao custo de 2 bytes):Experimente online!
-1
string, a saída é usada para evitar parênteses.$!
(aplicação estrita) em vez de um espaço permite que a linha invertida seja uma definição válida do operador!$
(simplesmente$
não faria, pois a redefinição interromperia o uso).niam
seja definida para a última linha.!$
, que não é usada, mas precisa analisar e digitar corretamente.fonte
PHP ,
1513 bytesUma versão PHP sem abuso de comentários.
ohce
é uma constante indefinida; portanto, será igual ao valor da string do seu nome. Como resultado, isso tentará imprimir+1-'ohce'
ou-1+'ohce'
quando invertido. Como'ohce'
é um valor não numérico, 0 será usado nas operações aritméticas e somente1
ou-1
será impresso.Experimente online!
Experimente online!
fonte
Google , 3 bytes
Experimente online!
! enilno ti yrT
fonte
Geléia , 2 bytes
Experimente online!
N
egativo, resulta em e0
, em seguidaC
, complementa, resulta em1-0
=1
.Experimente online!
C
omplementar, resulta em1-0
=1
.N
negativo, resulta em-1
.fonte
K (ngn / k) , 3 bytes
Experimente online!
estou esquecendo de algo? parece óbvio para idiomas REPL
fonte
Cubix ,
765 bytesExperimente aqui
Invertido
Explicação
Cubificado:
Desenrolando o fluxo de controle, executamos
)O(@
, que incrementa, produz, diminui e sai.Invertida e cubificada:
Desenrolando o fluxo de controle, executamos
(O)@
, que diminui, produz, incrementa e sai.Versão anterior
Experimente aqui
Invertido
Não é tão curto, mas esteticamente agradável.
fonte
@)O(@
por 5 bytes e restauração de simetria :)Encantos Rúnicos , 4 bytes
Experimente online! Experimente invertido!
Não consegui encontrar uma maneira de reutilizar o
1
comando, mesmo à custa de um byte ou dois.1@ɩ
também funciona, mas é o mesmo número de bytes.fonte
APL (Dyalog Unicode) ,
43 bytesExperimente online!
Resposta trivial. Imprime
1
quando executado e¯1
quando invertido.fonte
Stack Cats
-mn
, 4 bytesExperimente online! No rodapé, incluí todas as outras soluções de 4 bytes. (Stack Cats ignora tudo após o primeiro avanço de linha.)
Tente o contrário!
Explicação
O
-n
sinalizador ativa a saída numérica (e a entrada, mas não temos nenhum), e-m
normalmente é apenas uma conveniência de golfe que permite evitar a parte redundante do código-fonte. Isso ocorre porque todo programa Stack Cats precisa ter simetria espelhada. Com a-m
bandeira, você só dá a primeira metade (mais o caractere central). Portanto, o programa atual aqui é:Como você pode ver no primeiro link do TIO, há várias soluções de 4 bytes, mas eu escolhi essa por sua simplicidade. Stack Cats é baseado em pilha, e este programa usa apenas a pilha inicial. Como não temos nenhuma entrada, ela contém uma única
-1
(um marcador EOF) em cima de um poço infinito de zeros. Os três comandos no programa têm o seguinte significado:Então, aqui está como o programa modifica a pilha (estados e comandos são escalonados para indicar como cada comando altera a pilha de um estado para o próximo):
Como se vê, o único comando que realmente faz alguma coisa aqui é
_
que transforma nosso marcador EOF em um1
. A saída no final do programa está implícita, e o marcador EOF é opcional, portanto, apenas imprime o1
que obtemos.Agora, se revertermos o código fonte, devido ao espelhamento implícito, o programa atual se tornará:
Isso faz algo muito diferente:
Desta vez, a parte inferior da pilha ainda é uma
-1
e, portanto, atua como marcador EOF e apenas o-1
parte superior é impressa....
Agora, com tudo isso dito, como o Stack Cats tem uma relação única com a reversão de código, sinto que usar
-m
é um pouco trapaceiro. Normalmente, ele serve apenas para salvar bytes, omitindo a parte redundante do código-fonte, mas aqui isso torna o desafio muito mais fácil e até o programa completo, mais curto. Isso ocorre porque a reversão de um programa completo só mudará o programa se ele contiver algum<>[]
, o que também significa que o programa acaba fazendo uso de várias pilhas (a Stack Cats na verdade possui uma fita de pilhas, onde todas, exceto a inicial, são preenchidas apenas com zeros para começar). Além disso, revertê-lo apenas troca os pares<>
e[]
, o que ainda torna a execução simétrica. A única maneira de quebrar essa simetria é usarI
que faz-]
ou-[
ou nada, dependendo do sinal do topo da pilha. Tão...Stack Cats
-n
, 11 bytesExperimente online! O rodapé novamente inclui todas as outras alternativas na mesma contagem de bytes. Alguns deles emitem 1 / -1 e outros 2 / -2, conforme indicado após cada programa. Eu escolhi este para explicar de forma aleatória como um dos que produzem 2.
Tente o contrário!
Explicação
Como eu disse, este é um pouco mais. Mesmo se usássemos o
-m
notação para isso, ela pesaria 6 bytes em vez dos 4 acima.Os comandos em uso desta vez:
O primeiro programa usa apenas duas pilhas. Isso é um pouco bagunçado na arte ASCII, mas vou tentar o meu melhor. Os colchetes indicam em qual pilha a cabeça da fita está e eu colocarei os comandos entre cada par de estados da pilha.
Agora,
-1
atua como um marcador EOF e o2
é impresso.O outro programa é o mesmo até o
[
. Ainda é praticamente o mesmo até o segundoI
. Tecnicamente, estaremos em uma pilha diferente, mas sem valores neles, eles são todos indistinguíveis. Mas então a diferença entreI[
eI]
acaba importando:E desta vez, não temos um marcador EOF, mas o programa ainda gera o
-2
.fonte
Zsh , 12 bytes
Experimente online!
Encaminhamento básico, comentário, método reverso.
Se a E / S for menos restritiva, é possível uma solução mais interessante de 11 bytes , graças ao Zsh que suporta códigos de retorno negativos:
Invertido,
721- nruter
sai com o código127
(comando não encontrado).exit -127
não pode ser usado, seria convertido em au8
. Experimente online!fonte
CJam , 3 bytes
Experimente online!
Como eles trabalham
Versão normal:
Versão reversa: você entendeu a idéia.
fonte
MATL , 3 bytes
Experimente online!
Como eles trabalham
Normal:
Invertida:
fonte
Wolfram Language (Mathematica) ,
2118 bytesExperimente online!
-3 graças a Martin Ender
fonte
Hexagonia , 5 bytes
Experimente online!
Qualquer programa válido deve:
@
ou:
). O último só é diferente para o primeiro quando há um comando de movimento do ponteiro de memória. Além disso, este comando não deve estar no primeiro ou no último byte.!
,;
também é possível, mas provavelmente levaria mais bytes)Portanto, um programa de 2 bytes é obviamente impossível. Um programa de 3 bytes é impossível porque o segundo byte deve ser o comando de finalização e o primeiro byte não deve ser um comando de manipulação de espelho / IP, portanto, apenas 1 byte pode ser executado.
Eu acho que um programa de 4 bytes não é possível. Esse programa deve ter a forma
a@bc
com grade hexagonalPortanto,
a
deve ser um comando de redirecionamento de IP. No entanto, é impossível gerar números positivos e negativos com apenas um comando de manipulação de memória.fonte
Haskell , 28 bytes
Experimente online!
Experimente enilno!
fonte
Triangular , 4 bytes
Experimente online!
Saídas 1.
Ungolfed:
Invertida:
Experimente online!
Saídas -1.
fonte
Java 5 ou 6,
12767 bytesSaídas
9
/-9
.Nenhum compilador online, porque o Java 5 ou 6 não está disponível em nenhum lugar.
No entanto, você pode tentar este equivalente a Java 8 de 127 bytes :
Experimente online ou online invertido .
Explicação:
O Java 5 e 6 tiveram um bug, permitindo criar um bloco de código dentro de uma enumeração para fazer alguma coisa, apesar da falta do método principal obrigatório de um programa. Isso resultará em um erro:
Mas ainda produzirá o que gostaríamos de exibir primeiro, para que possamos ignorar isso .
fonte
Golang , 109 bytes
E o contrário:
Experimente online!
fonte
Println
pode serPrint
, eimport "fmt";
não precisa do espaço:import"fmt";
. :)Perl 5 (-p), 12 bytes
Experimente online!
! enilno ti yrT
O
}{
pseudo-operador é realmente útil.Perl 5 (-M5.010), 9 bytes
Fornecido por Nahuel Fouilleul em um comentário
Experimente online!
! enilno ti yrT
fonte
say 1#1-yas
say+1-yas
esay-1+yas
Retina , 6 bytes
Imprime
1
.Experimente online!
Imprime
-1
.Experimente online!
Explicação:
1
Isso ... não faz nada. Devido a
`
, essa é uma substituição de<
para-
(com configuração-
, que não faz nada), mas a entrada está vazia, portanto a saída também está vazia.E esse segundo estágio corresponde ao regex vazio com a entrada vazia e conta o número de correspondências, que é exatamente 1. A saída está implícita.
Explicação:
-1
Desta vez, substituímos o regex vazio por
-
. Isso de fato transforma a entrada vazia em uma única-
.Aqui, a configuração realmente faz algo:
<
imprime a entrada do palco antes de executá-lo, então imprimimos o-
. Em seguida,-
conta os hífens na entrada do palco, que é novamente 1. Devido à saída implícita, isso imprime um1
após o-
, fornecendo-nos-1
conforme necessário.fonte
fonte
brainfuck , 156 bytes
Experimente online! / Verificador para a frente / para trás no Bash
Imprime
-1
para frente e\n1
para trás.Apesar de quase trivial, acredito que esta é a solução ideal para essa saída fixa específica.
Prova:
O programa não pode ter
[
ou]
.Portanto, o programa deve ter o formulário
<A> . <B> . <C>
.Cada um
,
pode ser substituído por um número suficiente de<
sem aumentar o número de+
ou-
.Cada
+
é útil apenas no programa de avanço ou retrocesso, nunca em ambos.Prova:
+
na parte A, obviamente, só é útil no programa forward e+
na parte C, obviamente, é útil apenas no programa reverso.Denote⟺ ⟺
shift(P)
= número de<
em P - número de>
em P. Considere o programa<B> = <D> + <E>
,+
o meio é útil no programa avançadoshift(E) = 0
, da mesma forma, é útil no programa anteriorshift(D) = 0
. No entanto, seshift(D) = shift(E) = 0
o programaB
executado para frente ou para trás adicionasse um valor fixo à célula atual antes de imprimir pela segunda vez, o que não pode ser o casoord('1') - ord('\n') != ord('1') - ord('-')
.Portanto, o programa precisa de pelo menos
ord('-')+ord('1')+ord('\n')+ord('1') = 153
+
s, 2 se.
pelo menos um<
>
ou,
porqueshift(B) != 0
.fonte