Ein Mann hat zwei Geräte.
- Eine Zeitmaschine - Er kann diese Maschine durch Denken steuern. Es ermöglicht ihm, in kürzester Zeit von einem beliebigen Zeitpunkt zu einem anderen Zeitpunkt in der Vergangenheit oder Zukunft (oder sogar zum gegenwärtigen Zeitpunkt) zu reisen. Beachten Sie, dass, wenn er von B nach A in die Vergangenheit reist, alle normalen Ereignisse (Zeitmaschinen, Generatoren ausgenommen) von A nach B auf genau die gleiche Weise wiederholt werden müssen. Dann wird er von Punkt B zu Punkt A zurückgebracht. Auf diese Weise erzeugt eine einzelne Zeitreise eine Endlosschleife.
- Lichtmaschine - Als er dieses Problem erkennt, erstellt er eine weitere Maschine. Er bemerkt, dass seine Gedanken möglicherweise anders sind, obwohl sich alle physischen Ereignisse in einer Schleife wiederholen. Daher wurde diese Maschine so konstruiert, dass sie auch durch Gedanken gesteuert werden kann. Die Maschine kann jederzeit verwendet werden, um eine alternative Zukunft (aber nicht Vergangenheit) in Bezug auf die Zeit bereitzustellen, die er sie verwendet hat.
Beispiel
Ich werde alle Details anhand eines langen Beispiels erklären.
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
- 1000 Jahre vergehen. Es ist jetzt das Jahr 1000.
- Er reist von 1000 bis 1250.
- 250 Jahre vergehen. Es ist jetzt das Jahr 1500.
- Er reist von 1500 bis 1500. Dies hat keine Auswirkungen (und kann ignoriert werden).
- 500 Jahre vergehen. Es ist jetzt Jahr 2000
- Er reist von 2000 bis 1800.
- 100 Jahre vergehen. Es ist jetzt das Jahr 1900.
- Er reist von 1900 bis 1850.
- 125 Jahre vergehen: Diesmal ist es jedoch anders, da er sich in einer Schleife befindet. 50 Jahre vergehen von 1850 bis 1900. Er kehrt bis 1850 zurück. Weitere 50 Jahre vergehen von 1850 bis 1900. Er kehrt wieder zurück. 25 Jahre vergehen und es ist 1875, womit 125 Jahre vollendet sind.
- Er benutzt die Lichtmaschine. Jetzt gibt es eine alternative Zukunft für das Jahr 1875, in dem er sich jetzt befindet. Die Vergangenheit hat sich nicht geändert.
- 225 Jahre vergehen. Es ist jetzt Jahr 2100.
- Er reist von 2100 bis 1700.
- 500 Jahre vergehen: 175 Jahre von 1700 bis 1875 vergehen normalerweise. Nein, er trifft wieder auf die Lichtmaschine, was bedeutet, dass nach 1875 eine dritte Zukunft geschaffen wurde. Normalerweise vergehen 325 Jahre, also 2200 Jahre.
- Die Verwendung eines Generators hat jetzt keine Auswirkung (und kann ignoriert werden), da es nur eine Zukunft für 2200 gibt, die noch nicht definiert wurde.
- 100 Jahre vergehen. Es ist jetzt 2300.
- Er reist von 2300 bis 2100.
- 150 Jahre vergehen: 100 Jahre von 2100 bis 2200 vergehen normalerweise. Eine zweite Zukunft entsteht ab 2200. 50 Jahre vergehen und es ist jetzt das Jahr 2250.
- Er soll von 2250 bis 2225 gehen. Es gibt jedoch jetzt zwei 2225 in zwei verschiedenen Zeitlinien. Dies führt daher zu einem Paradoxon, da wir nicht bestimmen können, welchen Zeitpunkt er erreichen wird. (Wir gehen nicht davon aus, dass er zur aktuelleren Zeitachse wechselt.) Damit ist unsere Simulation beendet.
- Alles weitere
100 T+100 50 A 25
wird komplett ignoriert, da ein Paradoxon aufgetreten ist und unsere Simulation nicht mehr läuft.
Tipp: Wenn Sie Schwierigkeiten haben, das Beispiel zu verstehen, stellen Sie sich die Zeit wie einen Pfad vor, den Sie in der Erde graben. Wenn Sie auf Zeitreise sind, erstellen Sie einen Teleporter. Wenn Sie die Lichtmaschine verwenden, graben Sie einen neuen Pfad in die Wand eines vorhandenen Pfads.
Paradox
Angenommen, A, B und C sind drei Zeitpunkte (nacheinander). Ein Paradox soll vorgekommen sein, wenn:
- Sie befinden sich an einem Punkt C, an einem Punkt B gibt es eine Lichtmaschine, es gibt mehr als eine Zukunft für Punkt B (und Sie befinden sich in einer davon), und Sie versuchen, über eine Zeitreise auf einen beliebigen Punkt zwischen B und C zuzugreifen.
- Sie befinden sich an einem Punkt A, es gibt eine Lichtmaschine an einem Punkt B, es gibt mehr als eine Zukunft für Punkt B und Sie versuchen, über eine Zeitreise auf einen Punkt C (nach B) zuzugreifen.
Eingang
Eine Reihe von Ereignissen, ähnlich dem Beispiel. (Format ist flexibel.)
Ausgabe
Ein wahrer / falscher Wert, der angibt, ob ein Paradoxon aufgetreten ist.
Herausforderung
Kürzester Code (in Bytes) gewinnt.
flexible
ist dasformat
?Antworten:
Ruby,
510460 BytesEingang
Wie zum Beispiel
Ausgabe
0 = kein Paradoxon, 1 = Paradoxon
Stichprobe
Die bereitgestellte Beispieleingabe: gibt
1000 T+250 250 T+0 500 T-200 100 T-50 125 A 225 T-400 500 A 100 T-200 150 T-25 100 T+100 50 A 25
zurück1
, was auf ein aufgetretenes Paradox hinweist.Anmerkungen
Dies ist nicht nur die erste Codegolf- Übung, die ich versuche, sondern auch das erste Ruby-Programm, das ich geschrieben habe. Daher könnte es wahrscheinlich noch kürzer sein.
Kurze Erklärung
Endlosschleifen treten nur auf, wenn Sie rechtzeitig vorwärts fahren. Ich freue mich über jede Rückmeldung - insbesondere, wenn es um eine bessere Lösung geht.
quelle
then
s sind unnötig und können entfernt werden. Außerdem sollten Sie verwenden{...}
statt ,do...end
um mehr Zeichen zu speichern.map
Speichert ein Byteeach
undsplit
teilt es standardmäßig in Leerzeichen auf. Die ersten vier Zeilen der Initialisierung können auf gekürzt werdenp=[];w=[n=x=0]
.05AB1E ,
93928682 BytesDie Eingabe erfolgt im gleichen Format wie in der Beschreibung Herausforderung, mit der Ausnahme , dass Lichtmaschine
A
istabcdefghijklmnopqrstuvwxyz
stattdessen ein Byte zu speichern.Gibt aus,
1
wenn ein Paradoxon aufgetreten ist, oder die Eingabe selbst, wenn nicht (1
in 05AB1E ist nur wahr, alles andere ist falsch).Basiert lose auf meiner Java 10-Antwort .
Probieren Sie es online aus.
Oder versuchen Sie es online mit hinzugefügten Debug-Zeilen ( TODO: Richtige Testsuite mit allen Testfällen auf einmal erstellen. ):
- Testfall mit Zeitreise-Paradoxon: Versuchen Sie es online.
- Testfall mit Zeitreise-Paradoxon: Probieren Sie es online aus.
- Testfall ohne Zeitreise-Paradoxon: Probieren Sie es online aus.
Erläuterung:
quelle
Java 10,
498485478 BytesDie Eingabe erfolgt (vorerst) im gleichen Format wie in der Challenge-Beschreibung.
-13 Bytes dank @BenjaminUrquhart .
-7 Bytes dank @ceilingcat .
Probieren Sie es online aus oder probieren Sie es online mit hinzugefügten Debug-Zeilen .
Erläuterung:
quelle
Long
?int
war sie kürzer, aber das gab Fehler bei den Schlüsselwertpaaren für Karteneintrag. Ich habe nicht daran gedacht, alles danach auf Long zu ändern. Danke für -13!