Memasukkan:
Tanggal (mengandung dd
, MM
dan yyyy
). Objek-tanggal, atau tiga bilangan bulat terpisah juga valid sebagai input.
Keluaran:
Setiap bagian ( dd
, MM
dan yyyy
) secara individual dikembalikan dan dibulatkan ke tanggal valid terdekat.
Misalnya (dalam format dd-MM-yyyy
):
21-10-2016
menjadi12-01-6102
Aturan tantangan:
- Hanya
dd
,MM
,yyyy
berlaku, tetapi urutan dan yang terpisah-simbol yang Anda gunakan adalah pilihan Anda sendiri.
Jadi ini adalah beberapa contoh format yang valid:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
, Dll
Dan ini adalah beberapa contoh format yang tidak valid:dd MMM yyyy
;dd-MM-'yy
; dll. - Anda juga dapat memilih untuk hanya memasukkan objek-Tanggal jika bahasa Anda mendukungnya atau tiga parameter integer terpisah, alih-alih string yang mewakili tanggal.
- Harap sebutkan format tanggal yang Anda gunakan! (Dan input dan output harus dalam format yang sama.) Ia juga diizinkan untuk mengeluarkan objek-Tanggal, selama ia dapat menangani semua kasus uji dan aturan tantangan di bawah ini.
- Transisi Julian ke Kalender Gregorian diabaikan untuk tantangan ini. Jadi
1582
ini hanya tahun terbalik yang valid untuk2851
.
Lihat Info / tips Tantangan untuk semua tahun, bulan, dan hari yang valid. - Karena Anda tidak dapat memiliki Februari sebagai terbalik dari bulan lainnya, Anda tidak perlu khawatir tentang tahun kabisat.
Semua tahun, bulan, dan hari terbalik:
- Tahun selalu dapat dibalik tanpa masalah, mencapai dari 0001 (terbalik
1000
) ke 9999 (tetap9999
). (Jadi0000
bukan input yang valid, dan juga tidak ada test case untuknya.) - Satu-satunya bulan Anda akan dibalik adalah: Januari (terbalik dari Oktober /
10
); Oktober (terbalik dari Januari /01
); November (tetap November /11
); dan Desember (terbalik dari setiap bulan lainnya /02
-09
,12
). - Satu-satunya hari Anda akan membalikkan adalah: 01 (terbalik dari
10
), 02 (terbalik dari20
), 03 (terbalik dari30
), 10 (terbalik dari01
), 11 (tetap11
), 12 (terbalik dari21
), 13 (terbalik dari31
) , 20 (terbalik dari02
), 21 (terbalik dari12
), 22 (tetap22
), 30 (terbalik dari03
atau sama dengan 31 untuk November!), 31 (terbalik dari04
-09
/13
-19
/23
-29
).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan mengembalikan pernyataan / keluaran, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji ( dd-MM-yyyy
sebagai format):
21-07-2016 -> 12-12-6102
12-11-1991 -> 21-11-1991
01-01-2000 -> 10-10-0002
27-08-1875 -> 31-12-5781
18-12-2010 -> 31-12-0102
13-01-1981 -> 31-10-1891
04-11-1671 -> 30-11-1761 // Semi-tricky case, since November has 30 days
28-11-2036 -> 30-11-6302 // Semi-tricky case, since November has 30 days
14-06-1855 -> 31-12-5581
30-10-9999 -> 03-01-9999
01-01-2851 -> 10-10-1582
21-07-2016
dikembalikan12-70-6102
yang dibulatkan menjadi12-12-6102
. Tidak yakin bagaimana Anda mendapatkan hasilnya##-10-6107
..70
melilit, dengan tahun semakin bertambah.10-10-2
keluaran yang valid dalam kasus ketiga?Jawaban:
Cembung , 23 byte
Hitungan byte mengasumsikan pengkodean CP-1252.
Format I / O adalah
dd mm yyyy
.Cobalah online!
Ini adalah port langsung dari jawaban CJam saya . Cembung sangat didasarkan pada CJam, dan oleh karena itu satu-satunya perbedaan adalah penggunaan
¶
operator Cembung yang membungkus dua elemen tumpukan teratas dalam daftar, menghemat satu byte lebih[...]
.sumber
CJam, 24 byte
Format I / O adalah
dd mm yyyy
.Cobalah online!
Jumlah byte yang sama, format I / O
mm dd yyyy
:Cobalah online!
Penjelasan
Versi lain berfungsi sama, kecuali bahwa kita mulai dari integer
1230
atau1231
sebelum mengubahnya menjadi["12" "30"]
atau["12" "31"]
.sumber
1=
mendapatkan bulan yang dibalik,:=
memeriksa apakah angka-^
angkanya sama dan mengubah hasilnya menjadi 31, memberi 30 untuk bulan11
dan 31 untuk yang lainnya.Pyth,
5553464341 bytedi mana
❤❤
ada dua unsintables, masing-masing U + 001C dan U + 001F.Suite uji.
sumber
Python 3, 82 byte
Fungsi anonim yang mengambil input, melalui argumen, tanggal sebagai daftar string formulir
['dd', 'mm', 'yyyy']
dan mengembalikan tanggal terbalik yang divalidasi dalam format yang sama.Bagaimana itu bekerja
Python membandingkan karakter dan string dengan titik kode Unicode mereka. Ini berarti bahwa setiap perbandingan pada dua atau lebih bilangan bulat mengembalikan sama dengan perbandingan pada bilangan bulat tersebut sebagai string. Oleh karena itu, memanggil
min
dua bilangan bulat sebagai string mengembalikan integer terkecil sebagai string; dengan mengambil bagian-tanggal terbalik sebagai satu argumen dan nilai maksimum sebagai yang lain, hari dan bulan dijepit ke rentang yang diinginkan. Bagian-tanggal dibalik dengan mengindeks dengan langkah-langkah-1
([::-1]
), dan nilai maksimum untuk bulan diubah dari'31'
menjadi'30'
jika bulan adalah November dengan mengindeks ke dalam daftar dengan hasil Boolean dari kondisional.Cobalah di Ideone
sumber
Dyalog APL ,
3233 byteI / O adalah daftar tiga string (
'dd' 'mm' 'yyyy'
).TryAPL , tetapi perhatikan bahwa
⎕
(prompt untuk input) telah diganti dengan⍵
dan seluruh baris terlampir dalam{
...}
untuk mengaktifkan pengujian online, dan⍎
(jalankan ekspresi) telah diganti dengan2⊃⎕VFI
(verifikasi dan perbaiki input) karena eksekusi kode arbitrer diblokir .sumber
C #
314305299249232223 BytesTerima kasih kepada @KevinCruijssen karena menunjukkan bahwa saya dapat mempersingkat deklarasi variabel saya, yang juga membuat string aliasing dapat menghemat beberapa byte.
Menyimpan 50 byte menyimpan fungsi pembalikan untuk digunakan kembali dan 13 lainnya dengan melakukan hal yang sama untuk pembulatan dan menghapus deklarasi variabel.
Pembaruan terakhir membuat string aliasing tidak lagi menjadi byte saver.
Versi Tidak Serigala:
Uji di sini
sumber
using System.Linq;
dan fungsinya, jadi itu -1 byte. Juga,var n=...;var e=...;
bisa di-golf dengan 1 byte menggunakan ini sebagai gantinya:string n=...,e=...;
Ini tidak banyak, tetapi masih -2 byte. ;)Javascript,
10610594 byteTest suite (rev. 3)
Penjelasan
Terima kasih @KevinCruijssen untuk menyimpan 1 byte untuk
b==1
keb<2
. Terima kasih @Neil untuk menyimpan 11 byte dengan menyarankan literal dan,
pemisah template ES6 .sumber
b==1
bisa di-golfb<2
untuk menghemat byte? Tidak boleh 0 lagi, karena Anda sudah memeriksanya di!b?
bagian kode. Tampaknya berfungsi di ruang tes Anda ketika saya mengubahnya.join``
alih - alihjoin('')
misalnya - tetapi Anda dapat menyimpan sedikit lebih banyak dengan menggunakan,
sebagai pemisah Anda, yang memungkinkan Anda+''
untuk menggabungkan ketiga nilai bersama-sama.,
sebagai pemisah dalam input?Ruby,
9284 + 1 (-p
bendera) =9385 byteDigunakan
-
sebagai pemisah.sumber
Pyke, 29 byte
Coba di sini!
Saya pasti bisa melihat ini menjadi golf
sumber
Python 2, 154 byte
Mengambil input sebagai string, jadi tanda kutip perlu ditentukan dalam input, misalnya "11-04-2016".
sumber
z=[x[::-1]for x in z];z[1]=min(z[1],'12');z[0]=min(z[0],['31','30'][z[1]=='11']);print"-".join(z)
. Pada dasarnya, Anda tidak perlu menggunakanr
sama sekali, danmin
menyelesaikan banyak hal yang ingin Anda lakukan.05AB1E , 24 byte
Port of CJam @MartinEnder menjawab , demikian juga input dan output sebagai string dalam format
dd MM yyyy
.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber