Komputery są dziś wszędzie - w samochodach, pociągach, deskorolkach, a nawet reaktorach jądrowych. Możliwość uruchomienia oprogramowania w urządzeniu podróżującym w czasie to tylko kwestia czasu. Poradzisz sobie z tym? Czy potrafisz to przynajmniej wykryć?
Twoje zadanie:
- Napisz program, który zapętla się i sprawdza kwerendę czasu systemowego w celu wykrycia podróży w czasie.
- Jeśli czas przesuwa się o dzień lub dłużej między dwoma kolejnymi zapytaniami, oznacza to podróż w czasie do przodu. W takim przypadku Twój program powinien wydrukować:
TS TS: YYYY? You mean we're in the future?
- Jeśli czas cofa się o dowolną kwotę między dwoma kolejnymi zapytaniami, to podróż w czasie do tyłu. W takim przypadku Twój program powinien wydrukować:
TS TS: Back in good old YYYY.
TS TS
są znacznikami czasu przed i po podróży w czasie.YYYY
jest rokiem docelowym.- Znaczniki czasu mogą być w dowolnym formacie, który obejmuje co najmniej 4-cyfrowy rok, miesiąc, dzień, godzinę, minutę i sekundę, oddzielone cyframi.
Ograniczenia:
- Musisz wspierać daty przynajmniej w XIX, XX i XXI wieku.
- Musisz użyć języka, który istniał przed opublikowaniem tego wyzwania.
- Musisz opublikować swoje odpowiedzi dopiero po opublikowaniu tego wyzwania.
- Musisz użyć języka, który istniał przed opublikowaniem odpowiedzi.
- Możesz edytować swoją odpowiedź dopiero po jej opublikowaniu.
- Twój program nie może drukować żadnych wyników innych niż wymagane. Od czasu do czasu „Wielki Scott!” jest dozwolone.
To jest golf golfowy. Najkrótsza odpowiedź wygrywa.
Odpowiednie odniesienia do filmów prawdopodobnie spowodują, że twoja odpowiedź będzie zbyt długa, ale może skłonić cię do pochwalenia się.
Odpowiedzi:
CJam, 118 bajtów
Nie działa to z tłumaczem online.
Przykładowe dane wyjściowe po dwukrotnym dostosowaniu czasu komputera:
źródło
Python 2, 210 bajtów
Znaczniki czasu są drukowane w
YYYY-MM-DD HH:MM:SS
formacie oddzielonym średnikami. Przełączono na Python 2 z 3, ponieważ jest o 2 znaki krótszy do wydrukowania. Przęsła z stdoutGreat Scott!
donormiesnon-time-podróżnych, ponieważ łatwiej i taniej jest zrobić niż założyć warunkowego drukiem.źródło
JavaScript (ES6), 263 bajtów
Prawdopodobnie przydałoby się to trochę przepisywania, aby uczynić go bardziej wydajnym / małym.
Źródło:
źródło
now()
połączeń może przegapić wydarzenie związane z podróżą.o=(n=Date).now()
.8.64e+7
ma dwa znaki dłuższe niż86400
.Python 3, 195
Obecnie nie drukuje Great Scott, ponieważ nie mogę znaleźć dobrego sposobu, aby zrobić to tylko okazjonalnie.
źródło
Bash + coreutils, 177
źródło
Ruby, 194 bajty
Nie miałem jeszcze czasu, żeby naprawdę to zmniejszyć. Jestem pewien, że kryje się tam kilka optymalizacji.
Niegolfowany (i dużo bardziej czytelny):
Edycja: poprawiono, aby pytać OS o czas, a nie człowieka.
źródło
loop{}
zamiastwhile 1...end
i spróbuj użyć+
do konkatenacji ciągów zamiast interpolacji.Lua 5.3, 174 bajty
Jest to w dużej mierze niezgodne z zasadą „
Znaczniki czasu mogą być w dowolnym formacie”… które pozwoliłem sobie na użycie formatu „sekund od 1 stycznia 1970 r.” Jeśli zachowam moją tandetną interpretację drukowania znaczników czasu i zastosuję struktura MeepDarknessMeep, mogę (nieetycznie) ścisnąć to do ...
155 bajtów
źródło
Timestamps may be in any format, that includes at least the 4-digit year, month, day, hour, minute and second, separated by non-digits.
- to nie pozwala sekund od epoki.Back in good ol YYYY
ale powinny się wydrukowaćBack in good old YYYY
. (Zwróć uwagę na d)Lua 5.3,
179178173171169168163 bajtówUwaga dodatkowa: jeśli potrzebujesz numeru pełnego roku, odejmij sześć bajtów. Powodem jest to, że% c lua (lub Windowsa lub czyjegoś!) Nie wyświetla pełnego roku. Z tego powodu znaczniki czasu mogą wyglądać dziwnie!
Wykorzystuje to również możliwość oddzielania znaczników czasu dowolnymi znakami nie cyfrowymi!
Dziękujemy za powiadomienie o mojej starej referencji do math.abs i innych ulepszeniach @thenumbernine :)
Lua 5.3, 151 bajtów
Jest to „kopiowanie” metody @ thenumbernine do wyświetlania czasu, po prostu pokazując znacznik czasu zamiast rzeczywistej daty. To nie jest konkurencyjne, ponieważ myślę, że to trochę oszustwo, po prostu opublikuj to tutaj, aby wyświetlić moją pracę :)
źródło
C: 363 bajtów
Zminimalizowane za pomocą tego poręcznego skryptu :
Oryginał:
Przykładowy przebieg:
Mogę pozbyć się 10 bajtów, usuwając
sleep
chyba.Nawiasem mówiąc, pewna poręczna poręczność dla komputerów Mac / Linux:
źródło
sleep
.JavaScript (ES6)
181174170 bajtówUwaga: Nie testowano na maszynie czasu rzeczywistego.
Ten kod działa w Firefox, Chrome, Edge, Node.js Harmony (lub io.js w tym przypadku). Ale używam
alert
, więc będą musiały być zastąpioneconsole.log
przez Node i Io Suport: (187 bajtów)Wyjaśniono:
źródło
Python,
170165 bajtówTo wiele zawdzięcza odpowiedzi Morgana Thrappa. Główną sztuczką jest tutaj normalizacja timedelta, która wygodnie sprawia, że timedelta.days jest ujemny, gdy porusza się nawet nieznacznie w przeszłość, a 0, gdy przenosi się o mniej niż jeden dzień w przyszłość.
źródło
import*
nie potrzebujeszdatetime.
prefiksu.import*
pozwala pisaćdatetime.now()
zamiastdatetime.datetime.now()
. W pewnym sensie ma to sens ...Caché ObjectScript, 199 bajtów
Ten problem jest rozwiązywalne w zwykły starych świnka, ale byłoby nierozsądnie długie, ponieważ brakuje ANSI świnka z
$ZD[ATE]T[IME]
wewnętrzną funkcję do formatowania dat na znaczniki czasu czytelnych dla człowieka.Ten program prawdopodobnie nie wykryje podróży w czasie przed 1 stycznia 1841 r., Ani podróży w czasie po 31 grudnia 9999 r., Ponieważ są to granice właściwe
$H[OROLOG]
pomiaru czasu . Ten program ma także tylko precyzję drugiego poziomu; usterki cofania w czasie na poziomie poniżej drugiego poziomu prawdopodobnie nie zauważą tego.źródło
TSQL, 355 bajtów
W pracy, więc żadne fantazyjne fajne języki nie trzymają się twojego serwera produkcyjnego SQL Server =)
Wersja golfowa
Bardziej czytelna wersja z niewielkimi zmianami.
SQL nie jest taki zły pod względem znaczników czasu, ponieważ jest to typ danych pierwszej klasy.
Ze względu na golfa używamy typu z dokładnością do 3 milisekund. Sama pętla wymaga mniej niż iteracja (w zależności od serwera). Kluczem jest tutaj to, że znacznik czasu jest liczbą zmiennoprzecinkową, a liczba całkowita liczy, ile dni minęło. Nie działa dobrze od 1 stycznia 1753 r. Do 31 grudnia 9999 r.
źródło
VBA, 258 bajtów
Współpracował z: Excel 2007 w Windows 7
305 bajtów, jeśli wymagana jest użyteczność
Jeśli chcesz, aby ten kod był „Testowalny”, dodaj go
Application.Wait (Now() + TimeValue("0:00:01"))
późniejh=t
Wynik
Poniżej znajduje się plik testowy, którego użyłem. Jestem szczerze zdziwiony, jak czasami system Windows ma niewielkie zabezpieczenia. Może nie działać zgodnie z oczekiwaniami na wszystkich komputerach
źródło
JavaScript
173 169162 bajtówJavaScript jest dość popularny ...
Objaśnienie (Starsza wersja kodu):
źródło
Przetwarzanie, 270 bajtów
Rozszerzony:
Przykładowe dane wyjściowe:
źródło
Rubin,
160157155154 bajtówTutaj jest wiele rzeczy do gry w golfa
źródło
Mathematica, 295 bajtów
Program co sekundę prosi system operacyjny o nowe TS.
Wynik
Testowane przez ręczne podawanie daty / godziny.
Zdecydowanie lepiej sformatować dane wyjściowe. Spełnia podane wymagania.
źródło
LocalTime[]
? Pojawia się tylko raz w poniższym kodzie.Groovy, 244 bajty
źródło
Java, 378 bajtów.
źródło