Napisz krótki program, który zajmuje dodatnią liczbę sekund reprezentujących wiek i wyświetla przybliżony czas w języku angielskim.
Twój program musi wydać najmniej dokładny czas, który upłynął, spośród następujących wskaźników i ich długości w sekundach:
second = 1
minute = 60
hour = 60 * 60
day = 60 * 60 * 24
week = 60 * 60 * 24 * 7
month = 60 * 60 * 24 * 31
year = 60 * 60 * 24 * 365
Przykłady
input : output
1 : 1 second
59 : 59 seconds
60 : 1 minute
119 : 1 minute
120 : 2 minutes
43200 : 12 hours
86401 : 1 day
1815603 : 3 weeks
1426636800 : 45 years
Jak widać powyżej, po upływie powiedzmy 1 dnia (60 * 60 * 24 = 86400 sekund), nie podajemy już minut (y) ani godzin (y) , a jedynie dni do przekroczenia czasu jednego tygodnia , i tak dalej.
Rozważ podany czas jako wiek. Na przykład po 119 sekundach minęła 1 minuta , a nie 2.
Zasady
- Brak specyfikacji dla 0 lub ujemnych danych wejściowych.
- Postępuj zgodnie z właściwą liczbą mnogą. Każdy takt większy niż 1 musi zawierać
s
następujący wyraz. - Nie możesz używać wcześniej istniejącej biblioteki, która pełni funkcję całego programu.
- To jest golf golfowy, najkrótszy program wygrywa punkty internetowe.
- Baw się dobrze!
Odpowiedzi:
Galaretka , 62 bajty
Pełny program drukujący wynik.
(Jako monadyczny link zwraca listę liczb całkowitych, po których następują znaki)
Wypróbuj online!
W jaki sposób?
źródło
C,
194180144128 znakówDzięki @gastropher za redukcje kodu. Zapomniałem, że C pozwala na niejawne parametry za pomocą funkcji w stylu K&R! Również dzięki @gmatht za pomysł umieszczenia literałów w środku zamiast tablic. Rozszerzyłem to na postacie,
nadużywająckorzystania z szerokich znaków /char16_t
ciągów! Wydaje się jednak, że kompilator nie lubi\1
swojej postaci.Wypróbuj online!
Oryginalne rozwiązanie
Podzieliłem tablice na osobne linie, aby łatwiej było zobaczyć resztę rozwiązania.
Wypróbuj online!
Prowadząc dzielniki w kolejności od największej do najmniejszej, otrzymujemy najgrubszą jednostkę czasu. Program źle się zachowuje, jeśli dasz mu 0 sekund, ale ponieważ specyfikacja wyraźnie wyklucza tę wartość, uważam, że jest to dopuszczalne.
źródło
Perl 5 , 110 bajtów
Wypróbuj online!
źródło
Stax , 54 bajty
Uruchom i debuguj
Oto rozpakowana, nie golfowa, ascii reprezentacja tego samego programu.
Po wykonaniu, ponieważ nie ma innych wyników, górna część stosu jest drukowana niejawnie.
Uruchom ten
źródło
JavaScript (ES6), 131 bajtów
Wypróbuj online!
źródło
,
). Nauczyłem się czegoś nowego. Świetne rozwiązanie.split
to tablica[',']
. Dlatego działa to tylko z funkcjami, które wymuszają przymus na łańcuch.Java 8,
197195157 bajtów-38 bajtów dzięki @ OlivierGrégoire .
Wyjaśnienie:
Wypróbuj online.
źródło
/=
w razie potrzeby.n->{for(int t=60,d[]={1,t,t*=60,t*=24,t*7,t*31,t*365},x=7;;)if(n>=d[--x])return(n/=d[x])+" "+"second,minute,hour,day,week,month,year".split(",")[x]+(n>1?"s":"");}
(162 bajty), prawdopodobnie dobra baza do gry w golfa.n/7+
zamiast(n/=7)+
itp.2678400
, wyjście powinno być1 month
zamiast1 months
(liczba pojedyncza zamiast liczby mnogiej).Kotlin ,
205203196 bajtówWypróbuj online!
źródło
T-SQL , 306 bajtów (281 bajtów bez operacji we / wy)
źródło
TRIM
nie jest zdefiniowane, prawdopodobnie powinno byćLTRIM
. Pomiędzyweek
iday
, masz+
, prawdopodobnie powinien być,
+
tego powinno być,
i poprawiłem to teraz. JednakTRIM
funkcja jest zdefiniowana od SQL Server 2017. Dzięki.R , 157 bajtów
Wypróbuj online!
cut
jest przydatny, ponieważ dzieli zakresy nafactor
s, które są przechowywane wewnętrznie jakointeger
s, co oznacza, że możemy ich używać również jako indeksów tablic. Prawdopodobnie możemy zrobić coś bardziej sprytnego z nazwami przedziałów czasowych, ale nie mogę jeszcze tego rozgryźć.źródło
APL + WIN,
88119 bajtówOryginalna wersja pominęła tygodnie i miesiące, jak zauważył Phil H; (
Monituje ekran o liczbę sekund
Wyjaśnienie
źródło
JavaScript (Node.js) , 177 bajtów
Wypróbuj online!
źródło
Partia, 185 bajtów
źródło
Python 2 ,
146144 bajtówWypróbuj online!
2 bajty zapisane dzięki Jonathanowi Allanowi
źródło
if n/x
zapisuje bajt.0
zapisuje kolejną.PHP , 183 bajtów
Wypróbuj online!
źródło
Julia 0.6 , 161 bajtów
Wypróbuj online!
źródło
Ruby , 129 bajtów
Wypróbuj online!
źródło
Perl 6 / Rakudo 138 bajtów
Jestem pewien, że jest jeszcze wiele do zrobienia, ale na razie
Rozwijać:
źródło
R 336
Praca w toku
źródło
R 246 bajtów
Wypróbuj online!
To używa formowania czasu zamiast arytmetyki, po prostu do diabła z tym. Może inni mogliby to zmniejszyć?
źródło