Wenn Sie dies akzeptieren möchten, müssen Sie ein Programm schreiben, das eine Zahl ungleich Null ausgibt (dies kann eine Ganzzahl oder ein Gleitkomma sein). Der schwierige Teil ist, dass, wenn ich Ihren Quellcode umkehre, die Ausgabe die ursprüngliche Ganzzahl sein muss, die negiert wird.
Regeln
Sie müssen ein vollständiges Programm erstellen . Das heißt, Ihre Ausgabe muss auf STDOUT gedruckt werden.
Beide Zahlen müssen sich in der Basis 10 befinden (die Ausgabe in einer anderen Basis oder mit wissenschaftlicher Notation ist verboten).
Die Ausgabe der Zahlen mit abschließenden / führenden Leerzeichen ist zulässig.
Das ist Code-Golf, also gewinnt der kürzeste (ursprüngliche) Code in jeder Sprache!
Es gelten Standardlücken.
Beispiel
Angenommen, Ihr Quellcode ist ABC
und die entsprechende Ausgabe ist 4
. Wenn ich CBA
stattdessen schreibe und es laufen lasse, muss die Ausgabe sein -4
.
quelle
-
umkehren könnten, arbeitet das eine Byte (0x45 = 0b00101101) in Jelly --
ergibt -1, da es das Literal -1 definiert, währendṆ
(0xB4 = 0b10110100) 1 ergibt, da es ein logisches Nein ausführt der impliziten Eingabe von Null. (Funktioniert natürlichṆ
genauso gut: p)Antworten:
05AB1E , 2 Bytes
Probieren Sie es online!
! enilno ti yrT
quelle
JavaScript (V8) , 19 Byte
Probieren Sie es online!
fast identisch mit ...
C # (Visual C # Interactive Compiler) , 19 Byte
Probieren Sie es online!
(Danke an @someone für den Hinweis)
immer noch so ziemlich das gleiche in ...
Lua , 19 Bytes
Probieren Sie es online!
aber kürzer in ...
Python 2 , 15 Bytes
Probieren Sie es online!
Noch kürzer in PHP, weil es dieses magische Druckwerkzeug hat:
<?=
...PHP , 12 Bytes
Probieren Sie es online!
Noch kürzer in Ruby, weil man
inspect
nicht drucken kannRuby , 8 Bytes
Probieren Sie es online!
quelle
Print(1)//)-1(tnirP
. ( Versuchen Sie es online! )class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
1<!--!<1-
mit HTML (9 Bytes) arbeiten, was-1<!--!<1
umgekehrt sein wird. Es macht genau das gleiche wie Ihre Antwort.print(1)--)1-(tnirp
PowerShell ,
43 BytesProbieren Sie es online! oder ! enilno ti yrT
Ein Byte mit Arithmetik anstelle des Zahlenkommentar-Zahlen-Formats golfen.
Dies ist anscheinend auch dasselbe wie jshell (per Sam ) und jq (per manatwork -
1-0
and0-1
).quelle
1-0
0-1
/// , 4 Bytes
Ausgänge
9
.Probieren Sie es online!
Rückgängig gemacht:
Ausgänge
-9
.Probieren Sie es online!
Alles, bevor das
/
gedruckt wird, während der Rest ignoriert wird (nicht wirklich verwendete Schrägstriche, so dass ich nicht genau weiß, was passiert, aber es wird nichts ausgegeben).quelle
/
beginnt den Musterleseprozess, und somit werden die Zeichen, nachdem sie in das Muster eingelesen wurden, nicht ausgegeben./\-//1-
und dachte, ich sei schlau. : DKlein 011, 5 Bytes
Probieren Sie es online!
Rückgängig gemacht
Probieren Sie es online!
Diese nutzen die einzigartige Topologie von Klein, insbesondere die reale Projektionsebene. (Obwohl für jede Antwort einzeln nur eine Klein-Flasche benötigt wird).
quelle
Leerzeichen , 21 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.Ausgänge
1
/-1
.Probieren Sie es online oder umgekehrt aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erläuterung:
Unter Verwendung der Exit - Programm builtin eine kurze Palindrom ist
NNN
.Das reguläre Programm wird:
Das umgekehrte Programm wird:
Kleine zusätzliche Erklärung zum Drücken einer Nummer:
S
: Aktivieren Sie die StapelmanipulationS
: Schieben Sie eine Zahl auf den StapelS
oderT
: positiv / negativS
/T
gefolgt von einer abschließendenN
: Zahl in binär, woS=0
undT=1
Dh
SSTTSTSN
drückt-10
.quelle
T-SQL, 16 Bytes
4 ausgewählt, weil 1 überbeansprucht ist :)
quelle
select 1#1-tceles
(17 Bytes). Sie können das Ergebnis auf sqlfiddle.com/#!9/9eecb/107825 überprüfen .Japt , 2 Bytes
Jede einzelne Ziffer integer
>0
kann anstelle der verwendet werden ,2
wie DoseA-G
,H
,I
,J
oderL
(10-16
,32
,64
,-1
und100
, respectively).Testen Sie es | Rückgängig gemacht
Das
n
Verfahren , wenn in eine ganze Zahl angewendet, subtrahieren , dass ganze Zahl aus dem Argument übergeben , um es, die Standardwerte zu0
. Wenn dien
Methode vorwärts ausgeführt wird, wird sie für die implizite erste Eingabe ausgeführt, die ebenfalls den Standardwert hat0
.Alternativ
g
könnte stattdessen die Methode verwendet werdenn
, die das Vorzeichen des Ergebnisses des Subtrahierens des Arguments von der Ganzzahl angibt, auf die es angewendet wird.quelle
Haskell ohne Kommentare, 41 Bytes
Vorwärtsdrucke
1
+ Newline:Probieren Sie es online!
Umgekehrte Ausdrucke
-1
ohne Zeilenumbruch (die zu einem Preis von 2 Byte hinzugefügt werden könnten):Probieren Sie es online!
-1
String-Ausgabe werden Klammern vermieden.$!
(strenge Anwendung) anstelle eines Leerzeichens ermöglicht, dass die umgekehrte Linie eine gültige Definition des Operators ist!$
($
würde dies einfach nicht tun, da die Neudefinition die Verwendung unterbrechen würde).niam
für die letzte Zeile definiert ist.!$
, der nicht verwendet wird, aber korrekt analysiert und typgeprüft werden muss.quelle
PHP ,
15 bis13 BytesEine PHP-Version ohne Kommentarmissbrauch.
ohce
ist eine undefinierte Konstante, daher entspricht sie dem Zeichenfolgewert ihres Namens. Dies führt dazu, dass versucht wird zu drucken+1-'ohce'
oder-1+'ohce'
umgekehrt. Da'ohce'
es sich um einen nicht numerischen Wert handelt, wird bei arithmetischen Operationen stattdessen 0 verwendet und nur1
oder-1
gedruckt.Probieren Sie es online!
Probieren Sie es online!
quelle
Google , 3 Bytes
Probieren Sie es online!
! enilno ti yrT
quelle
Gelee , 2 Bytes
Probieren Sie es online!
N
egativ führt zu0
, dannC
ergibt sich aus omplement1-0
=1
.Probieren Sie es online!
C
Umsetzung ergibt1-0
=1
.N
egativ, ergibt-1
.quelle
K (ngn / k) , 3 Bytes
Probieren Sie es online!
Vermisse ich etwas? scheint für REPL-Sprachen naheliegend zu sein
quelle
Cubix ,
765 BytesVersuchen Sie es hier
umgekehrt
Erläuterung
Cubified:
Den Kontrollfluss abwickelnd, führen wir aus
)O(@
, welcher inkrementiert, ausgibt, dekrementiert und beendet.Umgekehrt und kubisch:
Wir lösen den Kontrollfluss und führen aus
(O)@
, was dekrementiert, ausgibt, inkrementiert und beendet.Vorherige Version
Versuchen Sie es hier
umgekehrt
Nicht so kurz, aber ästhetisch ansprechend.
quelle
@)O(@
für 5 Bytes und Wiederherstellung der Symmetrie :)Runenverzauberungen , 4 Bytes
Probieren Sie es online! Versuchen Sie es umgekehrt!
Ich konnte keinen Weg finden, den
1
Befehl wiederzuverwenden , selbst auf Kosten von ein oder zwei Bytes.1@ɩ
funktioniert auch, ist aber die gleiche Anzahl von Bytes.quelle
APL (Dyalog Unicode) ,
43 BytesProbieren Sie es online!
Triviale Antwort. Wird gedruckt,
1
wenn ausgeführt und¯1
umgekehrt.quelle
Stapel Katzen
-mn
, 4 BytesProbieren Sie es online! In der Fußzeile habe ich alle anderen 4-Byte-Lösungen aufgenommen. (Stack Cats ignoriert alles nach dem ersten Zeilenvorschub.)
Versuchen Sie das Gegenteil!
Erläuterung
Das
-n
Flag aktiviert die numerische Ausgabe (und Eingabe, aber wir haben keine), und das-m
Flag ist normalerweise nur ein Vorteil beim Golfen, mit dem Sie den redundanten Teil des Quellcodes vermeiden können. Dies liegt daran, dass jedes Stack Cats-Programm Spiegelsymmetrie haben muss. Mit der-m
Flagge geben Sie nur die erste Hälfte (plus das zentrale Zeichen). Das eigentliche Programm hier ist also:Wie Sie im ersten TIO-Link sehen können, gibt es eine Menge 4-Byte-Lösungen, aber ich habe diese wegen ihrer Einfachheit ausgewählt. Stack Cats ist stapelbasiert und dieses Programm verwendet nur den Anfangsstapel. Da wir keine Eingabe haben, enthält es eine einzelne
-1
(einen EOF-Marker) auf einer unendlichen Nullmulde. Die drei Befehle im Programm haben folgende Bedeutung:So ändert das Programm den Stapel (Zustände und Befehle sind gestaffelt, um anzuzeigen, wie jeder Befehl den Stapel von einem Zustand zum nächsten ändert):
Wie sich herausstellt, ist der einzige Befehl, der hier wirklich etwas tut,
_
der unseren EOF-Marker in einen verwandelt1
. Die Ausgabe am Ende des Programms ist implizit, und der EOF-Marker ist optional. Dadurch wird nur das ausgegeben, was1
wir erhalten.Wenn wir nun den Quellcode aufgrund der impliziten Spiegelung umkehren, wird das eigentliche Programm:
Das macht etwas ganz anderes:
Diesmal ist der Boden des Stapels immer noch ein,
-1
sodass er als EOF-Marker fungiert und nur der-1
obere Rand gedruckt wird....
Nun, da Stack Cats eine so einzigartige Beziehung zum Umkehren von Code hat, halte ich das Verwenden
-m
für ein bisschen betrügerisch. Es ist normalerweise nur dazu gedacht, Bytes zu sparen, indem der redundante Teil des Quellcodes weggelassen wird, aber hier macht es die Herausforderung tatsächlich viel einfacher und sogar das gesamte Programm kürzer. Dies liegt daran, dass das Umkehren eines vollständigen Programms das Programm nur dann ändert, wenn es eines von enthält<>[]
, was auch bedeutet, dass das Programm mehrere Stapel verwendet (Stack Cats hat tatsächlich ein Stapelband, in dem alle außer dem ersten nur gefüllt sind mit Nullen zu beginnen). Wenn Sie es umkehren, werden außerdem nur die Paare<>
und[]
vertauscht, wodurch die Ausführung immer noch symmetrisch wird. Die einzige Möglichkeit, diese Symmetrie zu durchbrechen, ist die Verwendung vonI
which does-]
oder-[
oder nichts, je nach dem Zeichen auf der Oberseite des Stapels. So...Stapel Katzen
-n
, 11 BytesProbieren Sie es online! Die Fußzeile enthält wieder alle anderen Alternativen mit derselben Byteanzahl. Einige davon geben 1 / -1 und einige 2 / -2 aus, wie nach jedem Programm angegeben. Ich habe dieses ausgewählt, um es zufällig als eines von denen zu erklären, die 2 ausgeben.
Versuchen Sie das Gegenteil!
Erläuterung
Wie gesagt, das ist etwas länger. Selbst wenn wir die
-m
Notation dafür verwenden würden, würde sie 6 Bytes anstelle der obigen 4 wiegen.Die Befehle, die diesmal verwendet werden:
Das erste Programm verwendet nur zwei Stapel. In der ASCII-Kunst ist das ein bisschen chaotisch, aber ich werde mein Bestes geben. Die eckigen Klammern geben an, auf welchem Stapel sich der Bandkopf befindet, und ich setze die Befehle zwischen die einzelnen Stapelzustände.
Jetzt
-1
fungiert der als EOF-Marker und der2
wird gedruckt.Das andere Programm ist bis zum
[
. Bis zur zweiten ist es praktisch immer noch dasselbeI
. Wir werden technisch gesehen auf einem anderen Stack sein, aber ohne Werte sind sie alle nicht zu unterscheiden. Aber dann kommt es auf den Unterschied zwischenI[
und anI]
:Und dieses Mal haben wir keinen EOF-Marker, aber das Programm gibt immer noch den aus
-2
.quelle
Zsh , 12 Bytes
Probieren Sie es online!
Grundlegende Vorwärts-, Kommentar- und Rückwärtsmethode.
Wenn die E / A weniger restriktiv ist, ist eine interessantere 11-Byte- Lösung möglich, da Zsh negative Rückgabecodes unterstützt:
Umgekehrt, wird
721- nruter
mit Code beendet127
(Befehl nicht gefunden).exit -127
kann nicht verwendet werden, es würde zu eineru8
. Probieren Sie es online!quelle
CJam , 3 Bytes
Probieren Sie es online!
Wie sie arbeiten
Normale Version:
Reverse-Version: Sie bekommen die Idee.
quelle
MATL , 3 Bytes
Probieren Sie es online!
Wie sie arbeiten
Normal:
Rückgängig gemacht:
quelle
Wolfram Language (Mathematica) ,
2118 BytesProbieren Sie es online!
-3 Danke an Martin Ender
quelle
Hexagony , 5 Bytes
Probieren Sie es online!
Jedes gültige Programm muss:
@
oder:
). Letzteres unterscheidet sich nur dann vom ersteren, wenn ein Speicherzeiger-Bewegungsbefehl vorliegt. Auch dieser Befehl darf nicht im ersten oder letzten Byte stehen.!
,;
ist auch möglich, würde aber wahrscheinlich mehr Bytes benötigen)Daher ist ein 2-Byte-Programm offensichtlich unmöglich. Ein 3-Byte-Programm ist nicht möglich, da das zweite Byte der Beendigungsbefehl und das erste Byte kein Spiegel- / IP-Manipulationsbefehl sein darf. Daher kann nur 1 Byte ausgeführt werden.
Ich denke, ein 4-Byte-Programm ist nicht möglich. Ein solches Programm muss die Form
a@bc
mit sechseckigem Raster habenDaher
a
muss ein IP-Umleitungsbefehl sein. Es ist jedoch unmöglich, mit nur einem Befehl zur Speichermanipulation sowohl positive als auch negative Zahlen zu generieren.quelle
Haskell , 28 Bytes
Probieren Sie es online!
Versuchen Sie es enilno!
quelle
Dreieckig , 4 Bytes
Probieren Sie es online!
Ausgänge 1.
Ungolfed:
Rückgängig gemacht:
Probieren Sie es online!
Ausgänge -1.
quelle
Java 5 oder 6,
12767 BytesAusgänge
9
/-9
.Kein Online-Compiler, da Java 5 oder 6 nirgendwo verfügbar ist.
Sie können dieses Java 8-Äquivalent mit 127 Byte jedoch ausprobieren :
Probieren Sie es online aus oder versuchen Sie es online umgekehrt .
Erläuterung:
Java 5 und 6 hatten einen Fehler, der es Ihnen ermöglichte, einen Codeblock innerhalb einer Aufzählung zu erstellen, um etwas zu tun, obwohl die obligatorische Hauptmethode eines Programms fehlte. Dies führt zu einem Fehler:
Es wird jedoch immer noch ausgegeben, was zuerst STDOUT sein soll, sodass wir dies ignorieren können .
quelle
Golang , 109 Bytes
Und sein Gegenteil:
Probieren Sie es online!
quelle
Println
kann seinPrint
, und dieimport "fmt";
nicht den Raum benötigen:import"fmt";
. :)Perl 5 (-p), 12 Bytes
Probieren Sie es online!
! enilno ti yrT
Der
}{
Pseudo-Operator ist wirklich nützlich.Perl 5 (-M5.010), 9 Bytes
Bereitgestellt von Nahuel Fouilleul in einem Kommentar
Probieren Sie es online!
! enilno ti yrT
quelle
say 1#1-yas
say+1-yas
undsay-1+yas
Netzhaut , 6 Bytes
Druckt
1
.Probieren Sie es online!
Druckt
-1
.Probieren Sie es online!
Erläuterung:
1
Das ... macht nichts. Aufgrund des
`
ist dies eine Substitution von<
nach-
(mit Konfiguration-
, die nichts bewirkt), aber die Eingabe ist leer, so dass auch die Ausgabe leer ist.Und diese zweite Stufe vergleicht die leere Regex mit der leeren Eingabe und zählt die Anzahl der Übereinstimmungen, die genau 1 beträgt. Die Ausgabe ist implizit.
Erläuterung:
-1
Dieses Mal ersetzen wir den leeren regulären Ausdruck durch
-
. Dies macht die leere Eingabe tatsächlich zu einer einzigen-
.Hier macht die Konfiguration tatsächlich etwas:
<
druckt die Eingabe der Bühne aus, bevor die Bühne ausgeführt wird, also drucken wir die-
. Dann-
zählt die Bindestriche in der Eingabe des Stufe , die wieder 1. Aufgrund des impliziten ausgegeben wird, druckt das eine1
nach dem-
, was uns je-1
nach Bedarf.quelle
quelle
Brainfuck , 156 Bytes
Probieren Sie es online! / Vorwärts- / Rückwärtsprüfer in Bash
Druckt
-1
vorwärts und\n1
rückwärts.Obwohl dies fast trivial ist, halte ich dies für die optimale Lösung für diesen bestimmten festen Ausgang.
Beweis:
Das Programm kann
[
oder nicht haben]
.Daher muss das Programm die Form haben
<A> . <B> . <C>
.Jedes
,
kann durch eine ausreichende Anzahl von ersetzt werden,<
ohne die Anzahl von+
oder zu erhöhen-
.Jedes
+
ist nur im Vorwärts- oder Rückwärtsprogramm nützlich, niemals in beiden.Beweis:
+
Teil A ist offensichtlich nur im Vorwärtsprogramm nützlich, und+
Teil C ist offensichtlich nur im Rückwärtsprogramm nützlich.Bezeichnen Sie⟺ ⟺
shift(P)
= Anzahl von<
in P - Anzahl von>
in P. Betrachten Sie Programm<B> = <D> + <E>
, das+
in der Mitte ist im Vorwärtsprogramm nützlichshift(E) = 0
Ebenso ist es im Rückwärtsprogramm nützlichshift(D) = 0
. Wennshift(D) = shift(E) = 0
dann jedoch das ProgrammB
entweder vorwärts oder rückwärts ausgeführt wird, fügt es der aktuellen Zelle einen festen Wert hinzu, bevor es das zweite Mal gedruckt wird, was jedoch nicht der Fall sein kannord('1') - ord('\n') != ord('1') - ord('-')
.Daher benötigt das Programm mindestens
ord('-')+ord('1')+ord('\n')+ord('1') = 153
+
s, 2.
s und mindestens a<
>
oder,
dashift(B) != 0
.quelle