Urutan tanggal format adalah salah satu masalah paling kompleks dan memecah belah yang dihadapi dunia saat ini. Beberapa dari kita dengan keras berargumen bahwa Bulan / Hari / Tahun itu tepat, mengingat itulah cara kita mengatakan tanggal dengan keras. Yang lain dengan keras menyatakan bahwa Hari / Bulan / Tahun adalah yang terbaik, karena menempatkan syarat dalam urutan naik dari durasi yang mereka wakili.
Cukup sudah. Komputer dapat menyelesaikan perselisihan ini secara sederhana dan adil. Kode Anda, fungsi atau program lengkap, akan mengambil string tanggal yang dibatasi oleh garis miring, misalnya 12/1/2015
. Perhatikan ini adalah format yang tepat, tanpa angka nol di depan dan dengan tahun empat digit di akhir.
- Jika itu pasti Bulan / Hari / Tahun, mis.
10/31/1998
, Tampilkan representasi teks dari tanggal tersebut dalam format yang tepat ini, dengan nama bulan penuh, hari, dan tahun:October 31, 1998
- Jika itu pasti Hari / Bulan / Tahun, misalnya
25/12/1989
, output jenis yang sama representasi teks:December 25, 1989
. - Jika ambigu apakah Bulan / Hari / Tahun atau Hari / Bulan / Tahun, buat tanggal yang menyelesaikan ambiguitas dengan menggabungkan dua tanggal yang mungkin sebagai berikut:
- Buat nama bulan baru dengan mengambil paruh pertama nama bulan sebelumnya dan tambahkan paruh kedua bulan berikutnya . Selama berbulan-bulan dengan panjang ganjil, babak pertama mendapat surat tambahan. Untuk menjadi eksplisit, yang bagian pertama dari bulan yang
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
, danDece
dan oleh karena itu bagian kedua adalahary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
, danmber
. - Hitung hari dengan rata-rata dua hari yang mungkin, letakkan lantai ketika rata-rata bukan bilangan bulat.
- Keluarkan representasi teks dari tanggal ini, misalnya untuk
10/8/2011
, keluaranAugber 9, 2011
.
- Buat nama bulan baru dengan mengambil paruh pertama nama bulan sebelumnya dan tambahkan paruh kedua bulan berikutnya . Selama berbulan-bulan dengan panjang ganjil, babak pertama mendapat surat tambahan. Untuk menjadi eksplisit, yang bagian pertama dari bulan yang
Jika tanggal input tidak boleh Bulan / Hari / Tahun atau Hari / Bulan / Tahun (misalnya 13/13/2013
atau bahkan 2/30/2002
), perilaku apa pun dapat diterima. Golf kode ini, kode terpendek menang!
Kasus uji:
10/31/1998
memberi October 31, 1998
25/12/1989
memberi December 25, 1989
10/8/2011
memberi Augber 9, 2011
8/5/1957
memberi Maust 6, 1957
9/12/2012
(anehnya) memberi September 10, 2012
1/1/2000
memberi January 1, 2000
without leading zeroes and with a four-digit year at the end
menyiratkanyear >= 1000
Jawaban:
Pyth - 156 byte
Benar-benar kode yang buruk, dan harus menggunakan string yang dikemas, tetapi ini sesuatu.
Test Suite .
sumber
Mathematica
341 304 298 288293 bytesIni menggunakan fungsi murni atau anonim, yaitu fungsi tanpa namanya sendiri.
DateString
mengembalikan pesan kesalahan jika tanggalnya ambigu.Check
menangkap ambiguitas dan mengirimkan tanggal menyinggungDateList
, yang mengubahnya menjadi daftar 3 bilangan bulat (yang diyakini sebagai{year, month, day}
). Bilangan bulat bulan dan hari diurutkan berdasarkan ukuran dan digunakan untuk menentukan bulan dan hari sesuai dengan instruksi OP.Quiet
pencetakan kesalahan hening.sumber
Javascript (ES6),
311295282274246238 byteSunting: Menggunakan
toLocaleString
untuk menghasilkan nama bulan. Ubah lokal untuk mendapatkan hasil menggunakan nama bulan di lokal yang berbeda!Sunting 2: Sekarang menghasilkan dua nama bulan, bukan semua 12!
Tidak Disatukan:
Contoh:
Terima kasih kepada:
@ user81655 , 274 => 246 byte
@ edc65 , 246 => 238 byte
sumber
Math.ceil(e[c].length/2)
ke(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
kef=>...
dan setiape[n]
kee(n)
,i=+(g>h)
kei=g>h
dane[i]
untuke[+i]
, menghilangkan tanda kurung yang tidak perlu dalam operator ternary terakhir, Juga,newDate
seharusnyanew Date
.Math.ceil
penggunaanb=c=>e(c).length+1>>1
JavaScript ES6, 204
Cuplikan uji:
sumber
Python 3 (290 byte)
Mirip dengan jawaban Ashwin Gupta, tetapi memanfaatkan modul kalender Python untuk menghindari menuliskan semua nama bulan.
Python 2 harus memotong beberapa byte dengan pembagian integer dan kehilangan tanda kurung
print
.sumber
Python,
558554 byteContoh golf yang sangat, sangat, sangat mengerikan tentang cara melakukan ini dengan python. Maaf, saya sangat buruk dalam hal golf ini
D:
. Tapi itu berhasil. Saya yakin ada banyak cara untuk menyederhanakan ini jadi beri tahu saya di komentar. Golf:Tidak disatukan
Tangkapan layar:
sumber
S=" "
di atas, lalu ganti setiap instance" "
denganS
- yang akan mencukur beberapa bytee= int[...
,o = o...
). juga, itu mungkin terbukti berani untuk mengatur panggilan yang sering digunakan sepertiint
untuk huruf tunggal varsfrom math import* I=int S=" " C="," L=len P=print def d(i): l=["","January","February","March","April","May","June","July","August","September","October","November","December"];w=i.split('/');f=I(w[0]);s=I(w[1]);y=w[2] if f>12:e=I(w[1]);P(l[e]+S+w[0]+C+S+y) elif f<13and s>12:e=I(w[0]);P(l[e]+S+w[0]+C+S+y) else: if f<s:o=l[f];t=l[s] else:o=l[s];t=l[f];o=o[0:I(ceil(L(o)/2))];t=t[I(ceil(L(t)/2)):L(t)] P(o+t+S+str(floor((f+s)/2))+C+S+y)
PHP,
301294 byteSaya pikir saya bisa bersaing dengan jawaban Javascript. Baiklah.
Saya pikir saya bisa membuatnya lebih kecil dan saya tidak suka kode yang saya gunakan untuk tanggal yang ambigu. Saya pikir ada cara yang lebih baik untuk melakukannya.
Tidak Disatukan:
sumber