Tulis program singkat yang menghasilkan jumlah detik positif yang mewakili suatu umur, dan menghasilkan perkiraan waktu itu dalam bahasa Inggris.
Program Anda harus menampilkan jumlah waktu paling tidak tepat yang telah berlalu, di antara metrik berikut dan panjangnya dalam detik:
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
Contohnya
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
Seperti yang dapat Anda lihat di atas, setelah waktu mengatakan, 1 hari (60 * 60 * 24 = 86400 detik), kami tidak lagi mengeluarkan menit atau jam , tetapi hanya beberapa hari sampai kami melampaui waktu satu minggu , dan seterusnya.
Pertimbangkan lamanya waktu yang diberikan untuk menjadi usia. Misalnya, setelah 119 detik, 1 menit berlalu , bukan 2.
Aturan
- Tidak ada spesifikasi untuk 0 atau input negatif.
- Ikuti pluralisasi yang tepat. Setiap ukuran lebih besar dari 1 harus menyertakan kata
s
berikut. - Anda tidak dapat menggunakan perpustakaan yang sudah ada sebelumnya yang melayani fungsi dari seluruh program.
- Ini adalah kode golf, program terpendek memenangkan poin internet.
- Selamat bersenang-senang!
Jawaban:
Jelly , 62 byte
Program lengkap mencetak hasilnya.
(Sebagai tautan monadik, ia mengembalikan daftar bilangan bulat diikuti oleh karakter)
Cobalah online!
Bagaimana?
sumber
C,
194180144128 karakterTerima kasih kepada @gastropher untuk pengurangan kode. Saya lupa bahwa C memungkinkan untuk parameter implisit menggunakan fungsi K&R! Juga terima kasih kepada @gmatht untuk ide menempatkan literal di dalam bukan array. Saya memperluas itu ke karakter dengan
menyalahgunakanmemanfaatkan karakter luas /char16_t
string! Compiler sepertinya tidak suka\1
dalam bentuk ☺.Cobalah online!
Solusi asli
Saya membagi array menjadi garis-garis terpisah untuk membuatnya lebih mudah untuk melihat sisa solusi.
Cobalah online!
Menjalankan pembagi secara berurutan dari yang terbesar ke yang terkecil, kami mendapatkan satuan waktu yang paling kasar. Program keliru jika Anda memberikannya 0 detik, tetapi karena spesifikasi secara eksplisit mengecualikan nilai ini, saya anggap itu dapat diterima.
sumber
Perl 5 , 110 byte
Cobalah online!
sumber
Stax , 54 byte
Jalankan dan debug itu
Berikut ini adalah representasi ascii yang tidak dibongkar, tidak disatukan, dari program yang sama.
Setelah eksekusi, karena tidak ada output lain, bagian atas tumpukan dicetak secara implisit.
Jalankan yang ini
sumber
JavaScript (ES6), 131 byte
Cobalah online!
sumber
,
). Saya belajar sesuatu yang baru. Solusi bagussplit
array[',']
. Oleh karena itu, ini hanya berfungsi dengan fungsi yang memaksa pemaksaan pada string.Java 8,
197195157 byte-38 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Cobalah online.
sumber
/=
di mana saja diperlukan.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 byte), mungkin dasar yang bagus untuk bermain golf.n/7+
bukan(n/=7)+
dll.2678400
, output harusnya1 month
bukan1 months
(tunggal, bukan jamak).Kotlin ,
205203196 byteCobalah online!
sumber
T-SQL , 306 byte (281 byte tanpa I / O)
sumber
TRIM
tidak didefinisikan, ini mungkin seharusnyaLTRIM
. Antaraweek
danday
, Anda memiliki+
, mungkin harus,
+
harus menjadi,
dan saya memperbaikinya sekarang. Namun,TRIM
fungsi ini didefinisikan sejak SQL Server 2017. Terima kasih.R , 157 byte
Cobalah online!
cut
berguna, karena membagi rentang menjadifactor
s, yang disimpan secara internal sebagaiinteger
s, yang berarti kita dapat menggunakannya sebagai indeks array juga. Kita mungkin bisa melakukan sesuatu yang sedikit lebih pintar dengan nama periode waktu, tetapi saya belum bisa mengetahuinya dulu.sumber
APL + WIN,
88119 byteVersi asli ketinggalan minggu dan bulan seperti yang ditunjukkan oleh Phil H; (
Meminta input layar dari jumlah detik
Penjelasan
sumber
JavaScript (Node.js) , 177 byte
Cobalah online!
sumber
Batch, 185 byte
sumber
Python 2 ,
146144 byteCobalah online!
2 byte disimpan berkat Jonathan Allan
sumber
if n/x
menghemat satu byte.0
menyimpan yang lain.PHP , 183 byte
Cobalah online!
sumber
Julia 0,6 , 161 byte
Cobalah online!
sumber
Ruby , 129 byte
Cobalah online!
sumber
Perl 6 / Rakudo 138 byte
Saya yakin masih ada yang harus dilakukan, tetapi untuk sekarang
Menjelaskan:
sumber
R, 336
Sedang dalam proses
sumber
R , 246 byte
Cobalah online!
Ini menggunakan format waktu alih-alih arithemtics, hanya untuk itu. Mungkin orang lain bisa membuat ini lebih kecil?
sumber