Mężczyzna ma dwa urządzenia.
- Wehikuł czasu - może kontrolować tę maszynę, myśląc. Pozwala mu na podróż z dowolnego miejsca w czasie do przeszłości lub przyszłości (a nawet teraźniejszości) w mgnieniu oka. Zauważ, że jeśli podróżuje do przeszłości z B do A, wówczas wszystkie normalne zdarzenia (z wyłączeniem wehikułów czasu, alternatorów) z A do B muszą powtarzać się dokładnie w ten sam sposób. Następnie z punktu B jest przenoszony z powrotem do punktu A. Zatem pojedyncza podróż w czasie tworzy nieskończoną pętlę.
- Alternator - zdając sobie sprawę z tego problemu, tworzy kolejną maszynę. Zauważa, że chociaż wszystkie zdarzenia fizyczne powtarzają się w pętli, jego myśli mogą być inne. Dlatego też ta maszyna została zaprojektowana tak, aby można ją było kontrolować również za pomocą myśli. Maszyny można użyć w dowolnym momencie, aby zapewnić alternatywną przyszłość (ale nie przeszłość) w odniesieniu do czasu, w którym z niej korzystał.
Przykład
Wyjaśnię wszystkie szczegóły na długim przykładzie.
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
- Minęło 1000 lat. Teraz jest rok 1000.
- Podróżuje od 1000 do 1250.
- Minęło 250 lat. Teraz jest rok 1500.
- Podróżuje od 1500 do 1500. Nie ma to żadnego efektu (i można go zignorować).
- Minęło 500 lat. Jest teraz rok 2000
- Podróżuje od 2000 do 1800.
- Minęło 100 lat. Jest rok 1900.
- Podróżuje od 1900 do 1850 roku.
- Minęło 125 lat: tym razem jednak, gdy jest w pętli, sprawy wyglądają inaczej. Mija 50 lat od 1850 do 1900. Pętla wraca do 1850. Kolejne 50 lat mija od 1850 do 1900. Pętla znów. Minęło 25 lat i jest to rok 1875, co kończy 125 lat.
- On używa alternatora. Teraz istnieje alternatywna przyszłość w stosunku do roku 1875, w którym się znajduje. Przeszłość się nie zmieniła.
- Minęły 225 lat. Jest teraz rok 2100.
- Podróżuje od 2100 do 1700.
- Minęło 500 lat: 175 lat od 1700 do 1875 minęło normalnie. Nie, on ponownie napotyka alternator, co oznacza, że po 1875 r. Powstała 3. przyszłość. 325 lat mija normalnie, co daje rok 2200.
- Korzystanie z alternatora nie ma teraz efektu (i można go zignorować), ponieważ istnieje tylko jedna przyszłość do 2200, która nie została jeszcze zdefiniowana.
- Minęło 100 lat. Teraz jest 2300.
- Podróżuje od 2300 do 2100.
- Minęło 150 lat: 100 lat od 2100 do 2200 minęło normalnie. Druga przyszłość powstaje z 2200 roku. Mija 50 lat, a teraz jest rok 2250.
- Powinien przejść od 2250 do 2225. Jednak obecnie istnieją dwa 2225 w dwóch różnych ramach czasowych. Stąd prowadzi to do paradoksu, ponieważ nie jesteśmy w stanie ustalić, w którym momencie on osiągnie. (Nie zakładamy, że idzie do najnowszej osi czasu). To kończy naszą symulację.
- Wszystko inne
100 T+100 50 A 25
jest całkowicie ignorowane od czasu wystąpienia paradoksu, a nasza symulacja przestała działać.
Wskazówka: Jeśli próbujesz zrozumieć przykład, wyobraź sobie, że czas jest jak ścieżka, którą kopiesz w ziemi. Jeśli podróżujesz w czasie, tworzysz teleporter. Jeśli używasz alternatora, kopiesz nową ścieżkę w ścianie istniejącej ścieżki.
Paradoks
Załóżmy, że A, B i C to trzy punkty w czasie (jeden po drugim). Mówi się, że miał miejsce paradoks:
- jesteś w punkcie C, w punkcie B istnieje alternator, istnieje więcej niż jedna przyszłość do punktu B (i jesteś w jednym z nich), i próbujesz uzyskać dostęp do dowolnego punktu między B i C podczas podróży w czasie.
- jesteś w punkcie A, w punkcie B istnieje alternator, istnieje więcej niż jedna przyszłość do punktu B, i próbujesz dostać się do punktu C (po B) poprzez podróż w czasie.
Wejście
Seria wydarzeń, podobnych do przykładu. (Format jest elastyczny.)
Wynik
Wartość true / falsey, wskazująca, czy wystąpił paradoks.
Wyzwanie
Najkrótszy kod (w bajtach) wygrywa.
flexible
jestformat
?Odpowiedzi:
Rubinowy,
510460 bajtówWejście
Jak na przykład
Wynik
0 = brak paradoksu, 1 = paradoks
Próba
Podane przykładowe dane wejściowe:
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
zwraca1
, wskazując na wystąpienie paradoksu.Notatki
Jest to nie tylko pierwsze ćwiczenie kodegolfa, które próbuję, ale także pierwszy napisany przeze mnie program Ruby. Dlatego prawdopodobnie może być nawet krótszy.
Krótkie wyjaśnienie
Nieskończone pętle pojawią się tylko podczas podróży do przodu w czasie. Cieszę się z wszelkich informacji zwrotnych - szczególnie jeśli wskazuje to lepszy sposób na rozwiązanie tego problemu.
źródło
then
są niepotrzebne i można je usunąć. Ponadto powinieneś użyć{...}
zamiast,do...end
aby zapisać więcej znaków.map
zapisuje bajt ponadeach
isplit
domyślnie dzieli się na białe znaki. Pierwsze cztery linie inicjalizacji można skrócićp=[];w=[n=x=0]
.05AB1E ,
93928682 bajtówWejście jest w takim samym formacie jak w opisie wyzwanie, oprócz tego, że alternator
A
jestabcdefghijklmnopqrstuvwxyz
zamiast zapisać bajt.Wyprowadza,
1
jeśli wystąpił paradoks, lub samo wejście, jeśli nie (1
jest prawdą tylko w 05AB1E, wszystko inne jest falsey).Luźno oparty na mojej odpowiedzi Java 10 .
Wypróbuj online.
Lub wypróbuj online z dodanymi liniami debugowania ( TODO: Utwórz odpowiedni zestaw testów ze wszystkimi przypadkami testowymi jednocześnie .. ):
- Przypadek testowy z paradoksem wstecznej podróży w czasie: Wypróbuj online.
- Przypadek testowy z paradoksem podróży w czasie do przodu: Wypróbuj online.
- Przypadek testowy bez paradoksu podróży w czasie: Wypróbuj online.
Wyjaśnienie:
źródło
Java 10,
498485478 bajtówDane wejściowe są (na razie) w tym samym formacie, co w opisie wyzwania.
-13 bajtów dzięki @BenjaminUrquhart .
-7 bajtów dzięki @ceilingcat .
Wypróbuj online lub wypróbuj online z dodanymi liniami debugowania .
Wyjaśnienie:
źródło
Long
?int
były krótsze, ale to dawało błędy w parach klucz-wartość-mapa-wpis. Nie myślałem o zmianie wszystkiego na Długo potem. Dzięki za -13!