Aby wygrać to wyzwanie, należy napisać najkrótszy skrypt „timeago”, który wyświetla liczbę dekad, lat, tygodni, dni, godzin, minut i sekund między danym znacznikiem czasu Unix a czasem uruchomienia skryptu.
Musisz podać różnicę czasu w „najniższych kategoriach”, np. 1 week
Nie 7 days
, 9 years
nie 0 decades 9 years
. Musisz także poprawnie używać liczby mnogiej, np . 1 day
Nie 1 days
.
Skrypt musi być dokładny w zakresie plus lub minus 1 sekunda (więc dokładna metoda drugiego zaokrąglania nie jest ważna).
Time Equivalency Table
1 decade = 10 years
1 year = 31536000 seconds (not technically correct but close enough)
1 week = 7 days
1 day = 24 hours
1 hour = 60 minutes
1 minute = 60 seconds
Dane wyjściowe powinny mieć postać
A decade(s) B year(s) C week(s) D day(s) E hour(s) F minute(s) G second(s)
gdzie A...G
wszystkie są nieujemnymi liczbami całkowitymi i s
jest tam tylko dla liczby mnogiej.
Notatki
- Znacznik czasu zawsze będzie czasem z przeszłości. To może być negatywne.
- Wejście i wyjście może być cokolwiek sensownego: standardowe wejście / standardowe wyjście, wejście funkcji i wartość zwracana itp.
- Nie możesz używać narzędzi, które już to robią. tzn. jeśli twój język ma
timesince(timestamp)
wbudowaną funkcję, nie możesz jej użyć.
Ogromnie zredagowałem to, aby wyjaśnić, w nadziei, że uda się wygasić nieco głupią bitwę między nowymi użytkownikami z niejasnymi pytaniami a starymi użytkownikami, którzy wymagają perfekcji. To nie było straszne pytanie (choć teraz może być zbyt podobne do tego ).
Biorąc pod uwagę, że od ostatniej odpowiedzi minęło wystarczająco dużo czasu, ogłaszam, że Three If By Whisky z 177 bajtową implementacją Ruby jest zwycięzcą tego kontekstu!
Odpowiedzi:
Ruby,
184177Nie ma tu nic szczególnie sprytnego, ale podejrzewam, że wciąż jest bardzo blisko optymalnego.
Przykładowy przebieg
źródło
J, 165
Prawdopodobnie można golfa więcej. Używa do tej pory wywołania powłoki, aby uzyskać bieżący czas epoki uniksowej, ponieważ epoka uniksowa jest niedostępna w J.
Przykładowy przebieg:
źródło
Python - 183
Dane wyjściowe dla sygnatury czasowej 999996400 sekund w przeszłości:
źródło
JavaScript, 392
Również nieuprawniony kod dla ciekawskich
Aktualizuje się co 30 sekund i oblicza liczbę pojedynczą i mnogą.
Aby go uruchomić, użyj
t(unix_timestamp)
źródło
JavaScript, 287
uruchomić użycie
t(secondsInFuture)
;źródło
t(10)
, po prostu dostaję pustyalert
.t(new Date()/1000 + 10);
eval(i)
jest o 2 bajty krótsza niżwindow[i]
.JavaScript, 263
aby uruchomić z konsoli Javascript, zadzwoń
źródło