Aww, teman, tanggal kadaluwarsa ini tidak menulis bulan dengan surat! Saya tidak tahu apakah akan kedaluwarsa pada tanggal 10 Maret atau 3 Oktober ... Tunggu, tidak, tidak apa-apa, tahun ini mengatakan tahun 2012. (lorong oop bata keju yang sudah setengah digunakan ke tempat sampah seperti pro)
Jadi anggaplah sejenak bahwa Anda terlalu sibuk untuk mencoba mencari tahu kapan toples marinara ini seharusnya berakhir. Anda hanya ingin versi Cliff Notes: seberapa besar kemungkinan bahwa itu sudah lewat jatuh tempo? Mari kita menulis beberapa kode!
Anda tahu bahwa pabrikan mencetak tanggal sebagai tiga kali lipat bilangan bulat, dalam salah satu dari tiga format:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
Dan Anda tahu bahwa beberapa tanggal hanya dapat diartikan dalam satu atau dua cara, bukan ketiganya: tanggal 55 55-11-5
harus satu tahun, artinya kotak Twinkies khusus ini kedaluwarsa 5 November 1955. Tahun ini kadang-kadang diberikan dalam empat digit dan bukan dua, yang dapat mengesampingkan beberapa opsi. Namun ketika dua digit, 50..99 berarti 1950..1999 dan 0..49 berarti 2000..2049.
Tugas Anda adalah menulis program atau fungsi yang mengambil array bilangan bulat yang merupakan tanggal yang valid dalam setidaknya satu dari interpretasi di atas, dan menghasilkan persen kemungkinan itu masih bagus. Persentase peluang hanyalah persentase interpretasi yang valid dari tanggal yang ada pada atau lebih lambat dari tanggal hari ini.
Array bilangan bulat akan menjadi [Int]
jenis bahasa Anda yang panjangnya tiga jika itu adalah argumen untuk suatu fungsi, dan diberikan sebagai bilangan bulat dash, slash-, atau spasi (Anda bisa memilih) jika digunakan sebagai input pada STDIN ke sebuah program lengkap. *
"Tanggal hari ini" dapat menjadi tanggal aktual hari ini, seperti yang diperoleh melalui fungsi tanggal, atau tanggal yang diberikan dalam argumen tambahan untuk fungsi atau paramater tambahan di STDIN. Mungkin dalam detik Unix, triple tahun tahun bulan dimasukkan dalam salah satu dari tiga cara di atas, atau cara lain yang lebih nyaman.
Mari kita punya beberapa contoh! Input tanggal kedaluwarsa akan berada dalam gaya yang dipisahkan dengan tanda hubung, dan menganggap untuk contoh di bawah ini bahwa tanggal hari ini adalah 5 Juli 2006.
14-12-14
- Kedua interpretasi yang valid untuk ini (DMY dan YMD) adalah setara, 14 Desember 2014. Outputnya adalah 100 karena produk ini pasti masih bagus.8-2-2006
- Angka terakhir adalah satu tahun, pasti, karena memiliki empat digit. Ini bisa berupa 8 Februari (kedaluwarsa) atau 2 Agustus (masih bagus). Outputnya adalah 50 .6-7-5
- Ini bisa apa saja! Penafsiran "5 Juli 2006" masih bagus (hanya untuk satu hari), tetapi dua yang tersisa keduanya pada tahun 2005 dan harus dilemparkan secepat mungkin. Outputnya adalah 33 .6-5-7
- Di sini, dua dari tiga interpretasi aman. Anda dapat membulatkan desimal Anda ke atas atau ke bawah, sehingga 66 atau 67 keduanya baik-baik saja.12-31-99
- Oke, yang ini jelas dari pergantian abad (tahun 50-99 adalah 19XX, dan 31 tidak mungkin sebulan). Lemak besar 0 , dan Anda benar-benar harus membersihkan lemari es Anda lebih sering.
Anda dapat dengan aman berasumsi bahwa input apa pun yang tidak memenuhi standar di atas tidak diketahui oleh aturan output di atas.
Tidak ada permintaan web atau celah standar. Pustaka penanganan tanggal diizinkan. Ini kode golf: semoga program terpendek menang.
* Jika Anda menggunakan brainfuck atau bahasa dengan cacat data sejenis, Anda dapat mengasumsikan nilai ASCII dari tiga karakter pertama yang dimasukkan adalah bilangan bulat untuk tanggal tersebut. Ini tidak termasuk logika empat digit tahun, tentu, tapi saya pikir kita akan terlalu kaget dengan melihat solusi untuk ini di Brainfuck untuk membuat Anda sedikit kecewa.