Tulis fungsi atau program yang menerima tanggal (sebagai string dalam YYYY-MM-DD
format) sebagai input dan mengembalikan nilai kebenaran jika tanggal itu "alfabet," dan nilai falsey jika bukan.
Tanggal alfabet adalah tanggal yang bulan, hari dan tahunnya dalam urutan alfabet ketika dinyatakan sebagai string (dan bila dianggap secara khusus dalam urutan M - D - Y). Misalnya, 26 September 2018 adalah tanggal alfabet:
September 26th 2018 -> September twenty-sixth two thousand eighteen
September
Twenty-sixth
Two thousand eighteen
Cara lain untuk memikirkan tantangan ini: "apakah unsur-unsur dari tanggal tertentu diurutkan secara leksikal?"
Catatan:
- 2018 direpresentasikan sebagai "dua ribu delapan belas," bukan "dua puluh delapan belas" atau "dua nol satu delapan." Sebagai contoh lain, tahun 1456 akan direpresentasikan sebagai "seribu empat ratus lima puluh enam," bukan "empat belas lima puluh enam."
- 26 diwakili sebagai "dua puluh enam," bukan "dua puluh enam."
- Setiap elemen tanggal dianggap sebagai keseluruhan. Inilah sebabnya mengapa 2018 tidak secara otomatis gagal meskipun "e" dalam delapan belas muncul sebelum "t" dalam dua.
Tanggal-tanggal berikut ini tidak menurut abjad:
- 2 September 2018 ("kedua" harus lebih cepat dari "September")
- 30 April 4000 ("empat ribu" harus mengurutkan dari "ketiga puluh")
Aturan tambahan:
- Anda akan menerima tanggal sebagai string, berformat seperti
YYYY-MM-DD
. Tahun akan selalu memiliki empat digit, dan bulan dan hari akan selalu memiliki dua digit masing-masing. Padding-nol tidak terwakili dalam konversi string (mis., '2000-01-01' adalah 'Januari pertama dua ribu' seperti yang Anda harapkan). - Anda dapat mengasumsikan bahwa tanggal akan selalu valid (no 30 Februari, no Smarch 1) dan bahwa nilai tahun akan positif (tidak ada tanggal SM), tetapi tanggal tersebut mungkin jauh di masa depan ("pada tahun
duasembilan ribu..."). - Anda harus mengembalikan nilai truey atau falsey, tidak harus boolean
True
atauFalse
. Jika Anda melakukan ini dalam Javascript dan ingin kembali'0'
dan0
itu bagus. Tentu saja, jika Anda ingin mengembalikan boolean, silakan saja. - Celah standar dilarang.
- Ini adalah
code-golf
Lebih Banyak Contoh Tanggal Alfabet
- 2066-01-02 (Januari kedua, dua ribu enam puluh enam)
- 1000-04-08 (delapan April, seribu)
- 6000-08-01 (1 Agustus, enam ribu)
Lebih Banyak Contoh Tanggal Non-Alfabet
- 1066-01-02 (Januari kedua, seribu enam puluh enam)
- 1000-04-07 (Ketujuh April, seribu)
- 8000-08-01 (1 Agustus, delapan ribu)
Jawaban:
05AB1E ,
666258 byteCobalah secara online atau verifikasi semua contoh yang disebutkan dalam tantangan .
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengompresi daftar bilangan bulat? ) Untuk memahami mengapa
•88ΛηΣλšëÇñ0é≠>sîä&ζp°Lć®-αÅ®`•21в
ada[7,3,7,0,7,7,7,0,13,10,10,0,4,12,17,6,4,17,15,2,9,17,2,19,17,6,4,17,15,2,9,19,19,19,19,19,19,19,19,19,19,17,17,11,20,18,5,5,16,14,1,8]
atauŽqT32в
tidak[12,31,9]
.Penjelasan umum tambahan:
Fungsi semacam akan menyortir semua tiga jenis (hari, bulan, tahun) pada saat yang sama, di mana kami akan mengembalikan nilai truthy hanya jika
M < D < Y
(di mana iniD
,M
danY
adalah nilai-nilai yang telah kita diambil dari daftar terkompresi).Mengapa ketiga daftar ini disebutkan di atas? Jika kami mengurutkan semua kata, dikategorikan berdasarkan jenis, kami memiliki urutan sebagai berikut:
Jika kita kemudian melihat masing-masing jenis secara individual dan urutan aslinya (seribu, dua ribu, dll selama bertahun-tahun; Januari, Februari, dll selama berbulan-bulan; dan pertama, kedua, dll selama berhari-hari), nomor penyortiran yang disebutkan di atas adalah dalam pesanan ini:
sumber
JavaScript (ES6), 101 byte
Disimpan 4 byte berkat @Shaggy
Mengembalikan atau .0 1
Cobalah online! atau Uji semua tanggal! (termasuk beberapa input yang tidak valid)
Bagaimana?
Setiap bulan, setiap hari dan setiap tahun dipetakan ke ID di ( masing-masing , dan ) sesuai dengan tabel berikut. Kami kemudian menguji apakah kami memiliki dan .[0..10] M D Y M<D D<Y
Bagian terakhir dari string lookup untuk ID hari sedikit dikompresi dengan menggunakan
${6e12-12}
, yang mengembang ke5999999999988
(19 th ke 31 st ).sumber
m=
, tentu saja, sama sekali tidak berguna. Terima kasih. :)