Tantangan
Tulis kode terpendek yang dapat menjumlahkan semua durasi waktu yang muncul di stdin. Program hanya harus mempertimbangkan string yang cocok dengan salah satu pola berikut dan abaikan sisanya.
HH:MM:SS (it will be interpreted as HH hours, MM minutes and SS seconds)
H:MM:SS (it will be interpreted as H hours, MM minutes and SS seconds)
MM:SS (it will be interpreted as MM minutes, SS seconds)
M:SS (it will be interpreted as M minutes, SS seconds)
contoh string yang cocok dengan pola yang disebutkan:
12:00:01
2:03:22
00:53
9:13
Outputnya harus dalam bentuk
HHh MMm SSs (that means HH hours, MM minutes and SS seconds with non-zero-padding)
Contoh
STDIN
Lihat video Selamat Datang.
Video: 10:37 menit.
Lihat pengantar video ke kursus.
Video: 3:30 mnt. Lihat video tentang cara menggunakan Ikhtisar Pelajaran.
Video: 9:13 mnt.
Lihat ikhtisar video tentang cara menggunakan sistem Epsilen untuk membagikan pekerjaan Anda.
Video: 03:15 mnt.
Lihat video untuk mempelajari tentang Penilaian Kesiapan Akademik (STAAR) Negara Bagian Texas.
Video: 1:05:26 mnt.
STDOUT
1 jam 32m 1d
code-golf
arithmetic
date
regular-expression
Alfredo Diaz
sumber
sumber
10:4:56
? Menurut spesifikasi saat ini mereka harus diperlakukan sebagai4m 56s
, bagian10
akan diabaikan. Pertanyaan yang sama tentang10:12:7
apakah artinya10m 12s
mengabaikan7
? Atau penanganan string seperti itu dapat didefinisikan implementasi?1h 19m 18s
output?37+30+13+15+26==121
,10+3+9+3+5==30
,1==1
, Jadi saya berharap1h 32m 01s
. Apa yang salah dalam logika ini? Juga, format output seperti itu adalah yang diharapkan, bukan?Jawaban:
Pyth 105
Cobalah online.
Ini membutuhkan input dari STDIN dengan cara yang sama seperti jawaban Javascript, seperti teks yang dikutip dengan baris baru sebagai
\n
s.Sampel:
Keluaran
Contoh bekerja dengan tanggal yang lebih aneh:
Keluaran
(Hanya 10:10 dan 1:10 yang sah kali)
Alasan utama mengapa ini sangat lama adalah karena Pyth tidak akan membiarkan Anda mengekstrak kecocokan positif. Alih-alih, ini cocok dengan semua yang bukan waktu yang valid, dan menggantinya dengan karakter spasi. Kemudian, pemisahan di whitespace hanya menyisakan beberapa kali dan beberapa angka bandel. Angka yang berlebih dihapus dengan memeriksa
:
karakter, yang akan dihapus dari waktu yang tidak valid. Ini hampir bisa dipastikan golf lebih lanjut;)sumber
Javascript ES6, 138 karakter
Fungsi, 139
Mengambil string sebagai argumen dan menulis output ke konsol:
Program, 138
Uji fungsi
Keluaran
sumber
JavaScript, ES6,
208 200197 byteSaya tahu ini super panjang, tapi saya ingin menjelajahi fitur terbaru ES6, membalikkan, mengurangi peta, fungsi panah dan pemahaman array (operator spread).
Jalankan cuplikannya di Firefox terbaru.
Bagaimana cara kerjanya (ungolfed sedikit)
sumber
Bash (dengan grep, sed, awk, dan date): 124 byte, 120 byte
Cukup kirimkan teks ke ini:
Bagaimana itu bekerja
0123456789:
sumber
Perl -
228201Itu terjadi pada algoritma yang sama dengan Optimizer (grep, split, reverse, add).
Saya bukan ahli Perl, jadi mungkin jumlah byte dapat dikurangi.
Tidak disatukan
sumber
my
kata kunci itu).Rebol - 174
Tidak disatukan + beranotasi:
Rebol hadir dengan
time!
datatype sendiri . Anda dapat melihat bagaimana kode di atas memanfaatkan ini dari contoh di bawah ini (dari dalam konsol Rebol):sumber
Groovy - 195
Saya tidak tahu cara mengompres lebih lanjut.
Tidak disatukan
sumber
Mathematica 300 karakter
Latihan kecil ini membutuhkan banyak kode, bahkan untuk Mathematica. Tentunya ada cara yang lebih efisien untuk melakukan ini.
Golf
Dengan asumsi bahwa input disimpan dalam
txt
,Cara kerjanya (menggunakan kode yang tidak disatukan):
1-Temukan waktu.
2-Break menjadi jam, menit, detik
3-Jumlahkan waktu. Objek waktu adalah waktu jam. Mengurangi satu objek waktu dari objek lain menghasilkan durasi, dalam hal ini 92,0167 menit.
QuantityMagnitude
menjatuhkan satuan ukuran.4-Convert 92.0167 menit menjadi jam, menit, detik.
sumber
Perl, 146
Entri saya mencetak hasilnya dengan spasi tambahan - saya harap tidak apa-apa
Jika kita dapat berasumsi bahwa hanya akan ada satu kali per baris input, kita dapat memotong 4 karakter:
Ini bekerja dengan mengakumulasi total detik yang berlalu dan memformat nilai itu sesudahnya.
sumber