Kode terpendek untuk menghasilkan waktu yang tepat pada jam menang.
Anda adalah penjelajah waktu yang berpengalaman dan diketahui berhenti di banyak planet selama jurnal Anda. Setiap planet berputar pada kecepatan yang berbeda dan karenanya, lamanya satu hari berbeda dari hari 24 jam yang biasa. Akibatnya, planet-planet menggunakan jam dengan jumlah jam yang berbeda. Jam pada jam dengan x jam disusun mirip dengan jam kita (1, 2, 3, ..., x ) dengan angka berputar searah jarum jam dan x berada di atas.
Selain itu, setiap planet memiliki jumlah menit yang berbeda dalam satu jam, dan jumlah detik yang berbeda dalam satu menit. Anda akan diberi waktu mulai dan beberapa detik berlalu dari mana Anda harus menentukan waktu berakhirnya.
Input dapat diambil langsung dari file yang dikirimkan sebagai argumen, atau sebagai input standar. Baris input pertama adalah jumlah jam yang harus Anda proses. Setelah itu, setiap jam memiliki tiga jalur input yang berisi bilangan bulat dalam format berikut:
x y z
h m s
t
Arti setiap huruf di bawah ini.
x = Jumlah jam dalam sehari (2 <= x <= 99)
y = Jumlah menit dalam satu jam (2 <= y <= 100)
z = Jumlah detik dalam satu menit (2 <= z <= 100)
h = Jam waktu mulai (1 <= h <= x)
m = Menit waktu mulai (0 <= m <y)
s = Yang kedua dari waktu mulai (0 <= s <z)
t = Jumlah detik yang telah berlalu
Output harus menjadi waktu akhir untuk setiap jam setelah t detik berlalu sejak waktu mulai. Output Anda harus diformat sebagai waktu jam standar (HH: MM: SS). Angka harus diisi, bila perlu, untuk memastikan bahwa semua angka adalah dua digit.
Uji Kasus
Memasukkan
2
5 20 10
1 10 5
2633
6 25 5
6 0 3
290
Keluaran
04:13:08
02:08:03
Memasukkan
1
14 17 11
12 16 10
1530
Keluaran
07:03:00
Memasukkan
2
8 40 25
3 1 15
10620
14 15 20
1 14 0
-580
Keluaran
05:26:10
14:00:00
Jawaban:
GolfScript - 50 karakter
Nilai-nilai (H / M / S) dikumpulkan dengan memindahkannya ke depan tumpukan (
])\
). Jam 'underflow' di 0 ditangani denganor
. Tanpa bantalan ditangani100+`(;
, meskipun saya kira0`\+-2>
panjangnya sama.sumber
Python, 142 karakter
sumber
for i in ' '*input()
Anda benar-benar bisa menggunakani
bukannya' '
diR()+' '+R()
, menyimpan dua karakter.exec"x,y,z,h,m,s=map(int,(R()+' '+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z);"*input()
t/y/z%x or x
adalah karakter yang lebih pendek.GolfScript
6260 karakterSunting: Saya berhasil mendapatkan array yang sebelumnya disimpan di dalam untuk berada di stack, dibutuhkan sedikit pergantian lebih dari itu meskipun begitu tidak ada perbaikan besar.
Versi 62:
Saya yakin itu bisa dilakukan jauh lebih baik, saya hanya tidak bisa memikirkan yang lebih baik.
1: Buat larik semua input, ambil elemen pertama, kelompokkan sisanya ke dalam blok 7.
a / 13: Konsumsi angka pertama dari input untuk menjalankan loop sebanyak itu kali.
2: Simpan array kosong di a.
3: Pilih satu blok 7 dan perluas menjadi 7 nomor individual.
b / 8: Jalankan loop 3 kali, sekali untuk setiap detik, menit dan jam.
4: Tambahkan dua angka terakhir bersamaan, untuk iterasi pertama yaitu detik dan waktu untuk bergeser, untuk yang berikutnya adalah menit dan jam dengan limpahan dari siklus sebelumnya. Buat salinan kedua hasilnya.
5: Bagilah salinan dengan batasnya untuk menghasilkan kelebihan dan geser hasilnya kembali satu spasi.
6: Hitung modulo dari divisi sebelumnya untuk menghasilkan bagian dari hasilnya.
7: Tambahkan bagian ini ke array.
9: Hapus overflow jam dan batas kedua dan menit dari tumpukan.
10: Ambil bagian jam a, jika nol ganti dengan batas jam, masukkan kembali ke dalam array.
11: Untuk setiap elemen dalam a, tempatkan '0' di depan, dengan demikian dikonversi menjadi string, dan buang semuanya kecuali 2 karakter terakhir.
12: Perkecil larik menjadi string tunggal yang dibatasi oleh ':', letakkan baris baru dan geser larik berisi pekerjaan yang tersisa ke depan tumpukan, dengan demikian mempersiapkan iterasi berikutnya.
sumber
J
(172/35)13799107Sekarang lewati semua test case yang diberikan.
172 adalah semuanya; 35 adalah jumlah karakter yang akan saya berikan jika saya benar-benar angkuh dan menolak untuk melakukan IO seperti yang ditunjukkan. (Saya masih memodifikasinya sedikit; jam adalah fungsi yang mengambil nama file yang dimaksudkan untuk digunakan secara interaktif dalam J.)Saya yakin berharap ini jauh lebih mudah di J daripada saya membuatnya terlihat.
Sunting: Mencari tahu bagaimana melakukan parsing input yang lebih baik di J, menghilangkan charsub, beralih ke permintaan & keluaran baris perintah.
Sunting 2: Mengubah input fungsi pusat ke matriks 3x3, menghilangkan banyak tanda kurung sial, menghilangkan nama
Sunting 3: 0-jam ditangani.
Penjelasan:
J-ku masih tidak bagus, dan IO sakit seperti biasa. Jadi sedikit dari ini gila.
1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{
mengambil matriks tiga kali tiga (terdiri dari garis input, dua elemen terakhir adalah sampah)1 0 0
)".;._2(1!:1)3
mendapat 3 'kolom' matriks input dengan 0s di posisi tidak terisi.,&}.$~,&3 3&{.&{.
memotong baris pertama dari input dan membentuk baris yang tersisa menjadi Nx3x3."2
memodifikasi kata kerja sentral untuk mengambil 3x3 kasus.10 10&#:
memberikan 2 angka desimal untuk setiap angka yang menghasilkan matriks Nx3x2. (Mendapatkan 0 untuk bantalan adalah menyebalkan .),"2":"0
mengonversi digit ke ASCII (Nx3x2x1) dan menghapus kolom terakhir, memberikan Nx3x2 lagi sebagai ASCII.LF,~"1([,':',])/"2
sisipan: antara setiap elemen dan menambahkannya (Nx7) dan menambahkan umpan baris per untuk (Nx8).4(1!:2)~
mencetak setiap baris.sumber
Haskell, 159 karakter
divMod
tidak sepadan!foldr
pendekatan elegan (yang bekerja untuk sistem waktu dengan sejumlah komponen!)f
tail
sumber
Ruby, 128 karakter
Salinan tanpa malu-malu dari python:
sumber
Haskell - 219 karakter yang diperlukan
sumber
PHP (241 karakter)
Mengambil input dari file yang diteruskan sebagai argumen.
Dan ungolfed:
Dan hanya untuk dicatat, tanpa tanda (tanda dolar), ini keluar untuk 205 karakter.
sumber
Jawa,
486371 karakterVersi tidak disatukan: http://pastebin.com/6LiTdGyi
Ini memberikan hasil yang sama seperti pada contoh yang disediakan.
Tetapi saya tidak setuju dengan perilaku itu: sebuah jam tidak memiliki jumlah sebanyak ada jam dalam sehari: jam memiliki setengahnya.
Artinya, jika Anda menambahkan 3600 detik hingga 12:50:12, maka ia harus mencetak 01:50:12, bukan 13:50:12 (dalam sistem 24/60/60 standar kami).
Saya menanganinya dalam kode saya tetapi berkomentar dalam solusi saya agar cocok dengan contoh. Tentu saja jika Anda mempertimbangkan hal ini, maka waktu input dapat dianggap ambigu kecuali jika Anda menambahkan beberapa penanda AM / PM.
Tetapi bagaimanapun juga, teka-teki tersebut memiliki ketidakkonsistenan: jika 00 jam harus diganti dengan x, maka jam> (x / 2) harus diganti dengan jam - (x / 2).
Sunting: Versi golf:
sumber
package
deklarasi; 2. tidak digunakanfinal
; 3. menggunakan nama variabel karakter tunggal dan nama kelas; 4. umumnya menggunakan cara paling pintar untuk membuat kode sesingkat mungkin.int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)}
, Anda mungkin ingin menggunakannyaint a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s)
. Ya, Anda menambahkan 11 karakter di sini, tetapi Anda menyimpan tiga karakter setiap kali Anda gunakanc[x]
, yang berarti setelah 4 kejadian seperti itu, itu dibayar sendiri. Saya menghitung 13 contoh seperti itu, yang berarti Anda menyimpan 28 karakter secara keseluruhan!Bash - 189 karakter:
sumber
printf
dan argumennya dan antara argumen itu ...PHP,
229228 karakterFile harus diteruskan ke skrip sebagai argumen
Tidak Disatukan:
Changelog:
229 -> 228: Tidak perlu mengatur waktu yang tersisa saat melakukan pembagian waktu
sumber
Bash, 139 karakter
sumber
Scala 184 chars:
Bertentangan dengan aturan, saya mengklaim, itu untuk
Outputnya seharusnya tidak
tapi
dan itulah yang dihasilkan kode saya. Tolong tunjukkan pada saya jam yang menampilkan 24:00:00 di bumi, bukannya 00:00:00 - mungkin 24:59:59. Atau apakah Anda mengharapkan urutannya:
dari pada
sumber
Python 2 , 137 byte
Cobalah online!
Hanya sedikit lebih pendek dari jawaban Python yang lain , tetapi mengambil rute yang berbeda untuk sampai ke sana.
Penjelasan Tidak Dikunci:
sumber
Haskell (
815624 karakter non-golf, garis kosong tidak termasuk)Milik saya mencetak 00:00:00 bukannya 12:00:00 atau serupa untuk "tengah malam" -seperti kali.Edit: mengubah itu.Bisa saja mengabstraksikan beberapa hal lagi, tetapi b Ini benar-benar mengabaikan baris pertama dari file input, dan umumnya menjerit pada Anda untuk file yang diformat dengan tidak benar.
sumber