Masalah manipulasi tanggal lainnya: P
Tugas
Tulis program atau fungsi yang menghitung perbedaan antara dua tanggal yang diberikan oleh pengguna.
Input output
Mirip dengan yang sebelumnya , input adalah dua YYYYMMDD
s, dipisahkan oleh spasi , koma
,
, atau tanda minus -
.
Contoh nilai input:
20100101-20010911
20110620-20121223
19000101 20101010
33330101,19960229
00010101 99991231
Output adalah bilangan bulat, yang merupakan perbedaan antara dua tanggal, dalam hari.
Misalnya, input 20110101-20100101
hasil 365
, dan 33320229 17000101
hasil 596124
.
Anda dapat menguji hasilnya di sini di sini . (Lihat komentar rintaun di bawah ini.) Jika dua tanggal sama, program harus kembali 0
, jika tanggal tersebut valid (lihat Skor ).
Larangan
Tentu saja, Anda tidak boleh menggunakan segala jenis fungsi / kelas / ... yang terkait dengan cap waktu atau tanggal, dan Anda harus menggunakan kalender Gregorian .
Skor
Jika kode Anda tidak memenuhi batasan, maka score = -∞
.
Default bonus
adalah 1.
- Jika kode Anda berfungsi terlepas dari urutan input (misalnya,
20100101,20110101
pengembalian365
atau-365
)bonus+=1
,. - Jika kode Anda dapat menangani tahun 0 ,
bonus+=0.5
. - Jika kode Anda mengenali bulan yang tidak valid (antara 1 ~ 12) / tanggal (antara 1 ~ 31), sukai
20109901
atau34720132
, dan cetakE
(& akhiri program atau kembalikan sesuatu seperti0
)bonus+=1
,. - Terlepas dari aturan di atas, jika kode Anda mengenali tanggal tidak valid, seperti
20100230
,20100229
, atau20111131
, dan cetakanE
(& mengakhiri program atau pengembalian sesuatu seperti0
),bonus+=1
. - Terlepas dari dua aturan di atas, jika kode Anda mengenali string input yang tidak valid, seperti
20100101|20100202
atau2010010120100202
, dan dicetakE
(& mengakhiri program atau mengembalikan sesuatu seperti0
)bonus+=1
,.
score = floor(-4.2*code.length/bonus)
. Kode dengan kemenangan skor tertinggi. Jika dua kode teratas memiliki skor yang sama, maka kode dengan bonus tertinggi akan menang. Jika dua kode teratas memiliki skor dan bonus yang sama, maka kode dengan suara terbanyak akan menang.
(Jatuh tempo: Ketika ada lebih dari 5 kode yang memiliki lebih dari (atau setara) +1
suara.)
20040229
. : P365*4 + 2 + 2
= 1464. Terima kasih atas informasinya!Jawaban:
Perl 5.14, skor = -162
-163-181-196-214-167-213-234-p
opsiKode
Menghitung angka hari Julian yang dimodifikasi untuk setiap tanggal (mengabaikan penyesuaian terkait zaman untuk menghemat panjang kode) dan mengurangi keduanya. (ref. "Julian Day" di Wikipedia ).
/r
opsi pada substitusi30+($m&1^$m>7)
bagian memberikan panjang bulan apa pun kecuali Februari; sisanya menyesuaikan untuk bulan Februari di tahun biasa atau tahun kabisatAsumsi
00000101-00010101
harus memberikan 366, karena 0 adalah kelipatan integral dari 400, dan tahun 0 adalah tahun kabisat.sumber
20111300-20119999
pengembalian2717
.PHP, Skor: -539.1
Kode
Tidak disatukan
Catatan
Menghitung jumlah hari dengan mengulangi setiap tanggal yang valid antara keduanya. Cukup lambat pada rentang yang lebih besar. Saya yakin ini bukan cara terbaik untuk menyelesaikan ini, tetapi saya menjadi tidak sabar, dan inilah yang akhirnya saya lakukan. :)
Juga, saya tahu kode "ungolfed" masih belum bisa dibaca, tetapi menulis ulang sepenuhnya akan membutuhkan terlalu banyak usaha.
sumber
Ruby 1.9, Skor: -175
-186-191-199243250260karakterKode menerima input melalui stdin.
Catatan:
(!x[e]||e*f<1||f>x[e])
kondisi menangani bonus bulan / hari / tanggal yang tidak valid.33320229 17000101
menghasilkan596134
.sumber
Python, Nilai: -478
larutan:
Saya tidak memiliki versi "ungolfed" karena ini adalah bagaimana saya menulisnya. Saya tidak mengujinya dengan benar jadi jika Anda menemukan bug - silakan komentar.
sunting: mudah-mudahan memperbaiki bug yang ditunjukkan dalam komentar dan menambahkan membongkar dalam bentuk [a, b], [c, d] = [[1,2], [3,4]
sumber
E
. (FYI,0>-1>12
,0>6>12
,0>13>12
pengembalianFalse
.)x<y<z
perbandingan ini atau adax if y else z
. Mencoba memperbaikinya.[x,z][y]
yang lebih pendek daripadax if y else z
, meskipun tidak selalu berhasil karena tidak seperti ekspresi-jika itu tidak malas.PHP, skor: -516
karakter:
685676bonus: 5.5
sumber
<?
di awal untuk dijalankan, jika tidak hanya akan mencetak kode.