Diberi tanggal yang ditulis dalam format apa saja (harus menangani semuanya dalam program yang sama), parsing menjadi valid yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Aturan
- Tanggal terkadang tidak valid, yaitu. hari yang salah untuk bulan atau jumlah bulan dalam setahun, Anda harus menangani kedua kasus. Baik dengan membuat kesalahan atau mengembalikan nilai falsey yang konsisten, Anda memilih. (Namun mereka akan tetap berpegang pada format template di atas)
- Padding selama berhari-hari dan berbulan-bulan kurang dari 10 harus digunakan untuk membuat output dua digit.
- Nama bulan akan selalu menjadi nama lengkap, tidak disingkat menjadi tiga karakter rekan mereka.
- Anda dapat mengasumsikan tahun akan selalu berada dalam kisaran 0000-9999.
- Nomor negatif tidak perlu ditangani.
- Anda dapat membuat program atau fungsi lengkap sehingga output dapat dalam format apa pun, dicetak untuk menghibur atau dikembalikan dari suatu fungsi.
- Input akan selalu berupa string, output harus selalu berupa string, jika membuatnya lebih pendek untuk menjadikannya sebagai argumen tunggal dalam array misalnya.
["17th May 2012"]
Anda dapat melakukannya dan hasilnya bisa sama["2012/05/17"]
- Anda dapat menganggap ejaan dalam input akan benar.
BONUS: cos yang ada di sini tidak suka tantangan;)
Jika Anda dapat mengatur untuk juga mengizinkan format input The Fourteenth of March, 2016
atau March the Fourteenth, 2016
Anda dapat mengambil 20 byte tambahan dari kode Anda dengan jumlah byte terakhir kurang dari 1 yang menghasilkan 1.
Berikut adalah angka tertulis lengkap untuk setiap hari untuk menghindari kebingungan dalam pengejaan.
First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First
Uji Kasus
INPUT | Output
17th May 2012 | 2012/05/17
March 14th, 2016 | 2016/03/14
20 February 2014 | 2014/02/20
September 14, 2017 | 2017/09/14
Sunday, June 8, 2015 | 2015/06/08
1st January 1918 | 1918/01/01
The Fourteenth of March, 2016 | 2016/03/14
March the Fourteenth, 2016 | 2016/03/14
November the Seventeenth, 2019 | 2019/11/17
The Thirtieth of April, 2016 | 2016/04/30
30 February 2014 | Invalid
September 99, 2017 | Invalid
Sunday, June8, 2015 | Invalid
The Thirty First of April, 2016 | Invalid
20 February 2014
standar didukung dalam banyak pengurai tanggal, tetapi17th
danSunday, June 8, 2015
sedikit lebih sulit untuk diurai (tergantung pada bahasa).Thursday, August 25, 2017
akan valid Saya melihat kiriman mengabaikan DOW.Jawaban:
Rails,
41,3735 byteSaya tidak tahu tentang juru bahasa online untuk Rails, tapi di sini ada tangkapan layar yang menunjukkan proc ini
sumber
PowerShell ,
91899156 byteCobalah online!
Mengambil input sebagai string. Menggunakan a
-replace
untuk menyingkirkan sampah, kemudian menggunakanGet-Date
perintah-f
bawaan dengan bendera ormat untuk menentukanyyyy/MM/dd
format yang diperlukan . String itu ditinggalkan di pipeline dan outputnya implisit.Menyimpan dua byte berkat Mr Xcoder. Menyelamatkan sebagian besar berkat golf regangan TessellatingHeckler.
sumber
''
dari format tanggal, untuk -2. Jika Anda ingin tetap pada pendekatan Anda, mengingat "ejaan sudah benar" maka Anda dapat mengganti'th|rd|st|(\b.*)day|,'
dan turun menjadi 56 byte dan menangani kasus yang sama. Walaupun saya pikir itu salah karena jika Anda membatalkan hari, Anda tidak dapat mengambilSunday, June8, 2015 | Invalid
koper karena itu hari Senin. Seharusnya kesalahan, tetapi diurai sebagai valid. Tidak yakin apa keputusannya, atau jika orang lain memeriksanya.PHP,
73164 +1 byteJalankan sebagai pipa dengan
-nR
atau coba online .Cek tanggal benar-benar mahal: Saya harus membongkar tanggal sebelum menggunakan builtin, lalu coba-coba kesalahan pada nama bulan.
sumber
30 February 2014
kembali2014/03/02
. Baik dengan membuat kesalahan atau mengembalikan nilai falsey yang konsisten, Anda memilih. (Namun mereka akan tetap berpegang pada format template di atas)Python 3 + parsedatetime library,
152139155153 byteDisimpan 13 byte berkat Jonathan Allan
Menambahkan 16 byte untuk menangani tanggal dengan hari panjang yang tidak valid
Disimpan 2 byte dengan menghapus tugas lambda
Cobalah online!
Tidak mendukung tanggal bonus
sumber
None
;import ...as
; & alambda
dengan menggunakan kembaliparse
sebagaih
.Python 2 , 193 byte
Cobalah online!
; -; tolong hentikan
sumber
time
.f=
dari jumlah byte pada TiO) dengan mendeklarasikanre.sub
Java (OpenJDK 8) , 190 + 26 = 216 byte
Cobalah online!
Catatan penting: dulu lebih pendek juga memvalidasi hari minggu bukannya membolos itu, sehingga validasi disertakan!
Saya belum mencobanya
SimpleDateFormat
luar kasus-kasus nyata yang diterima semua tanggal seperti 30 Februari. Jadi saya harus membuangnya dan saya menggunakan Java 8'sDateTimeFormatter
.Penjelasan
Format ini berarti:
[EEEE, ]
(terjadi diSunday, ...
),[d ]
,MMMM
dan ruang penuh ,[d, ]
,uuuu
untuk memberi tahu parser bahwa kita berada di era Gregorian.Kode:
Kredit
sumber
replaceAll
pola?JavaScript (ES6),
124122 bytesumber
2015/06/07
untukJune 8, 2015
(masalah UTC? Saya dalam UTC + 2) danfalse
untukSunday, June 8, 2015
atauMonday, June 8, 2015
.nday
.