Su tarea, si desea aceptarlo, es escribir un programa que genere un número distinto de cero (puede ser entero o flotante). La parte difícil es que si invierto su código fuente, la salida debe ser el entero original negado.
Reglas
Debes construir un programa completo . Es decir, su salida debe imprimirse en STDOUT.
Ambos números deben estar en la base 10 (está prohibido enviarlos a cualquier otra base o con notación científica).
La salida de los números con espacios finales / iniciales está permitida.
Este es el código de golf, por lo que gana el código más corto (original) en cada idioma.
Se aplican las lagunas predeterminadas.
Ejemplo
Digamos que su código fuente es ABC
y su salida correspondiente es 4
. Si escribo en su CBA
lugar y lo ejecuto, la salida debe ser -4
.
fuente
-
(0x45 = 0b00101101) funciona en Jelly --
produce -1 ya que define el literal -1, mientras queṆ
(0xB4 = 0b10110100) produce 1 ya que realiza una lógica no de la entrada implícita de cero. (Por supuesto,Ṇ
funciona igual de bien: p)Respuestas:
05AB1E , 2 bytes
Pruébalo en línea!
! enilno ti yrT
fuente
JavaScript (V8) , 19 bytes
Pruébalo en línea!
casi idéntico a ...
C # (compilador interactivo de Visual C #) , 19 bytes
Pruébalo en línea!
(Gracias a @ alguien por señalarlo)
sigue siendo casi lo mismo en ...
Lua , 19 bytes
Pruébalo en línea!
pero más corto en ...
Python 2 , 15 bytes
Pruébalo en línea!
Incluso más corto en PHP, porque tiene esta herramienta mágica de impresión:
<?=
...PHP , 12 bytes
Pruébalo en línea!
Incluso acortador en Ruby, porque puedes en
inspect
lugar de imprimirRubí , 8 bytes.
Pruébalo en línea!
fuente
Print(1)//)-1(tnirP
. (¡ Pruébelo en línea! )class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
1<!--!<1-
(9 bytes) con HTML, que será-1<!--!<1
cuando se invierte. Hace exactamente lo mismo que su respuesta.print(1)--)1-(tnirp
PowerShell ,
43 bytesPruébalo en línea! o ! enilno ti yrT
Golfó un byte usando aritmética en lugar del formato número-comentario-número.
Al parecer, esto también es lo mismo que jshell (por Sam ) y jq (por manatwork -
1-0
y0-1
).fuente
1-0
0-1
/// , 4 bytes
Salidas
9
.Pruébalo en línea!
Invertido:
Salidas
-9
.Pruébalo en línea!
Todo antes de que
/
se imprima, mientras que el resto se ignora (no se usan mucho las barras, así que no sé exactamente qué sucede, pero no genera nada).fuente
/
comienza el proceso de patrón de lectura, y por lo tanto, los caracteres después de que se readed en el patrón, no emitida./\-//1-
y pensé que era inteligente. : DKlein 011, 5 bytes
Pruébalo en línea!
Invertido
Pruébalo en línea!
Estos aprovechan la topología única de Klein, específicamente el plano proyectivo real. (Aunque individualmente cada respuesta solo necesita una botella de Klein).
fuente
Espacio en blanco , 21 bytes
Letras
S
(espacio),T
(tabulación) yN
agregaron (nueva línea) solo como resaltado.Salidas
1
/-1
.Pruébelo en línea o en línea al revés (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación:
Utilizando el programa de salida incorporado es un palíndromo corto
NNN
.El programa regular:
El programa inverso:
Pequeña explicación adicional de presionar un número:
S
: Habilite la manipulación de la pilaS
: empujar un número a la pilaS
oT
: Positivo / negativo respectivamenteS
/T
seguido de un finalN
: número en binario, dondeS=0
yT=1
Es decir,
SSTTSTSN
empuja-10
.fuente
T-SQL, 16 bytes
Escogió 4 porque 1 está sobreutilizado :)
fuente
select 1#1-tceles
(17 bytes). Puede verificar el resultado en sqlfiddle.com/#!9/9eecb/107825 .Japt , 2 bytes
Cualquier número entero de un solo dígito
>0
se puede utilizar en lugar de la2
CanA-G
,H
,I
,J
oL
(10-16
,32
,64
,-1
y100
, respectivamente).Probarlo | Invertido
The
n
method when applied to an integer, subtracts that integer from the argument passed to it, which defaults to0
. When run forwards, then
method is being run on the implicit first input, which also defaults to0
.Alternatively, the
g
method could be used instead ofn
, which gives the sign of the result of subtracting its argument from the integer it's applied to.fuente
Haskell without comments, 41 bytes
Forwards prints
1
+ newline:Try it online!
Reversed prints
-1
with no newline (which could be added at a cost of 2 bytes):Try it online!
-1
string output is used to avoid parentheses.$!
(strict application) instead of a space allows the reversed line to be a valid definition of the operator!$
(just$
wouldn't do since the redefinition would break the use).niam
is defined for the last line.!$
, which is not used but needs to parse and typecheck correctly.fuente
PHP,
1513 bytesA PHP version without comment abuse.
ohce
is an undefined constant, so it will be equal to string value of its name. As a result, this will try to print+1-'ohce'
or-1+'ohce'
when reversed. Since'ohce'
is a non-numeric value, 0 will be used instead in the arithmetic operations and only1
or-1
will be printed.Try it online!
Try it online!
fuente
Google, 3 bytes
Try it online!
!enilno ti yrT
fuente
Jelly, 2 bytes
Try it online!
N
egative, results in0
, thenC
omplement, results in1-0
=1
.Try it online!
C
omplement, results in1-0
=1
.N
egative, results in-1
.fuente
K (ngn/k), 3 bytes
Try it online!
am i missing something? seems obvious for REPL languages
fuente
Cubix,
765 bytesTry it here
Reversed
Explanation
Cubified:
Unrolling the control flow, we execute
)O(@
, which increments, outputs, decrements, and exits.Reversed and cubified:
Unrolling the control flow, we execute
(O)@
, which decrements, outputs, increments, and exits.Previous version
Try it here
Reversed
Not as short, but aesthetically pleasing.
fuente
@)O(@
for 5 bytes and restoration of symmetry :)Runic Enchantments, 4 bytes
Try it online! Try it Reversed!
I couldn't find a way to re-use the
1
command, even at the expense of a byte or two.1@ɩ
also works, but is the same number of bytes.fuente
APL (Dyalog Unicode),
43 bytesTry it online!
Trivial answer. Prints
1
when run and¯1
when run reversed.fuente
Stack Cats
-mn
, 4 bytesTry it online! In the footer I've included all other 4-byte solutions. (Stack Cats ignores everything after the first linefeed.)
Try the reverse!
Explanation
The
-n
flag turns on numeric output (and input, but we don't have any), and the-m
flag is normally just a golfing convenience which lets you avoid the redundant part of the source code. This is because every Stack Cats program needs to have mirror symmetry. With the-m
flag you only give it the first half (plus the central character). So the actual program here is:As you can see in the first TIO link, there's a ton of 4-byte solutions, but I picked this one for its simplicity. Stack Cats is stack-based, and this program only uses the initial stack. Since we don't have any input, it contains a single
-1
(an EOF marker) on top of an infinite well of zeros. The three commands in the program have the following meaning:So here is how the program modifies the stack (states and commands are staggered to indicate how each command changes the stack from one state to the next):
As it turns out, the only command that really does anything here is
_
which turns our EOF marker into a1
. Output at the end of the program is implicit, and the EOF marker is optional, so this just prints out the1
we get.Now if we reverse the source code, due to the implicit mirroring, the actual program becomes:
This does something very different:
This time the bottom of the stack is still a
-1
so it does act as the EOF marker and only the-1
on top of it gets printed....
Now with all of that said, since Stack Cats has such a unique relationship with reversing code, I feel that using
-m
is a little cheating. It's normally only meant to save bytes by omitting the redundant part of the source code, but here it actually makes the challenge a lot easier and even the full program shorter. This is because reversing a full program will only change the program if it contains any of<>[]
, which also means that the program ends up making use of multiple stacks (Stack Cats actually has a tape of stacks, where all but the initial one are only filled with zeros to begin with). Furthermore, reversing it then just swaps the<>
and[]
pairs, which still makes the execution symmetric. The only way to break that symmetry is to useI
which does-]
or-[
o nada dependiendo del signo de la parte superior de la pila. Asi que...Pila de gatos
-n
, 11 bytesPruébalo en línea! El pie de página nuevamente incluye todas las otras alternativas en el mismo conteo de bytes. Algunas de esas salidas 1 / -1 y algunas salidas 2 / -2 como se indica después de cada programa. Elegí este para explicar un poco al azar como uno de los que producen 2.
¡Intenta lo contrario!
Explicación
Como dije, este es un poco más largo. Incluso si usáramos el
-m
notation for this, it would weigh in at 6 bytes instead of the above 4.Los comandos en uso esta vez:
El primer programa solo usa dos pilas. Eso es un poco complicado de hacer en el arte ASCII, pero haré lo mejor que pueda. Los corchetes indican en qué pila está el cabezal de la cinta, y pondré los comandos entre cada par de estados de pila.
Ahora el
-1
actúa como un marcador EOF y el2
se imprime.El otro programa es el mismo hasta que
[
. Sigue siendo prácticamente igual hasta el segundoI
. Técnicamente estaremos en una pila diferente, pero sin valores en ellos, todos son indistinguibles. Pero entonces la diferencia entreI[
yI]
termina importando:Y esta vez, no tenemos un marcador EOF, pero el programa aún genera el
-2
.fuente
Zsh , 12 bytes
Pruébalo en línea!
Método básico de reenvío, comentario y reversa.
Si la E / S es menos restrictiva, entonces es posible una solución más interesante de 11 bytes gracias a que Zsh admite códigos de retorno negativos:
Invertido,
721- nruter
sale con código127
(comando no encontrado).exit -127
no se puede usar, se lanzaría a au8
. Pruébalo en línea!fuente
CJam , 3 bytes
Pruébalo en línea!
Cómo trabajan ellos
Versión normal:
Versión inversa: captas la idea.
fuente
MATL, 3 bytes
Try it online!
How they work
Normal:
Reversed:
fuente
Wolfram Language (Mathematica),
2118 bytesTry it online!
-3 thanks to Martin Ender
fuente
Hexagony, 5 bytes
Try it online!
Any valid program must:
@
or:
). The latter is only different for the former when there's a memory pointer movement command. Also this command must not be at the first or the last byte.!
,;
is also possible but would probably take more bytes)Therefore a 2-byte program is obviously impossible. A 3-byte program is impossible because the second byte must be the termination command, and the first byte must not be a mirror/IP manipulation command, therefore only 1 byte can be executed.
I think a 4-byte program is not possible. Such a program must have the form
a@bc
with hexagonal gridTherefore
a
must be a IP redirection command. However it's impossible to generate both positive and negative number with only 1 memory manipulation command.fuente
Haskell, 28 bytes
Try it online!
Try it enilno!
fuente
Triangular, 4 bytes
Try it online!
Outputs 1.
Ungolfed:
Reversed:
Try it online!
Outputs -1.
fuente
Java 5 or 6,
12767 bytesOutputs
9
/-9
.No online compiler, because Java 5 or 6 isn't available anywhere.
You can however try this 127 bytes Java 8 equivalent:
Try it online or try it online reversed.
Explanation:
Java 5 and 6 had a bug allowing you to create a code block inside an enum to do something, despite missing a program's mandatory main-method. This will result in an error:
But will still output what we'd want to STDOUT first, so we can ignore that.
fuente
Golang, 109 bytes
And its reverse:
Try it online!
fuente
Println
can bePrint
, and theimport "fmt";
doesn't need the space:import"fmt";
. :)Perl 5 (-p), 12 bytes
Try it online!
!enilno ti yrT
The
}{
pseudo-operator really comes in handy.Perl 5 (-M5.010), 9 bytes
Provided by Nahuel Fouilleul in a comment
Try it online!
!enilno ti yrT
fuente
say 1#1-yas
say+1-yas
andsay-1+yas
Retina, 6 bytes
Prints
1
.Try it online!
Prints
-1
.Try it online!
Explanation:
1
This... does nothing. Due to the
`
, this is a substitution from<
to-
(with configuration-
, which does nothing), but the input is empty, so the output is empty as well.And this second stage matches the empty regex against the empty input and counts the number of matches, which is exactly 1. Output is implicit.
Explanation:
-1
This time we replace the empty regex with
-
. This does indeed turn the empty input into a single-
.Here, the configuration actually does something:
<
prints the stage's input before executing the stage, so we print the-
. Then-
counts the hyphens in the stage's input which is again 1. Due to the implicit output, this prints a1
after the-
, giving us-1
as required.fuente
fuente
brainfuck, 156 bytes
Try it online! / Forward/backward verifier in Bash
Prints
-1
forward and\n1
backwards.Despite being almost trivial, I believe this is the optimal solution for this particular fixed output.
Proof:
The program cannot have
[
or]
.Therefore the program must have the form
<A> . <B> . <C>
.Each
,
can be replaced with a sufficient number of<
without increasing the number of+
or-
.Each
+
is only useful in either the forward or the backward program, never both.Proof:
+
in part A is obviously only useful in the forward program, and+
in part C is obviously only useful in the backward program.Denote⟺ ⟺
shift(P)
= number of<
in P - number of>
in P. Consider program<B> = <D> + <E>
, the+
in the middle is useful in the forward programshift(E) = 0
, similarly it's useful in the backward programshift(D) = 0
. However ifshift(D) = shift(E) = 0
then the programB
executed either forward or backward would add a fixed value to the current cell before printing the second time, which can't be the case becauseord('1') - ord('\n') != ord('1') - ord('-')
.Therefore the program needs at least
ord('-')+ord('1')+ord('\n')+ord('1') = 153
+
s, 2.
s, and at least a<
>
or,
becauseshift(B) != 0
.fuente