Diberikan daftar kegiatan dan waktu / tanggal mulai, mengeluarkan kalender ASCII-art yang menunjukkan kegiatan pada hari yang tepat. Semua aktivitas dijamin berada di bulan yang sama, tidak ada dua aktivitas yang akan dilakukan pada hari yang sama, dan semua aktivitas dijamin sesuai di dalam kotak kalender.
Kalender memiliki tanggal di sudut kiri atas setiap kotak, kotak-kotaknya berukuran 9 spasi dengan tinggi 5 ruang, dikelilingi oleh -
dan |
. Singkatan dua huruf untuk hari dalam seminggu berpusat di atas baris pertama, dan minggu-minggu dimulai dengan hari Minggu.
Misalnya, mengingat kegiatan berikut:
10/5/2018 - 9:00am - Sandbox calendar challenge
10/9/2018 - 9:00am - Post challenge to main
10/10/2018 - 10:00am - Profit
10/31/2018 - 7:30pm - Halloween party
Keluarkan kalender yang sesuai ini:
Su Mo Tu We Th Fr Sa
-----------------------------------------------------------------------
| |1 |2 |3 |4 |5 |6 |
| | | | | |9:00am | |
| | | | | |Sandbox | |
| | | | | |calendar | |
| | | | | |challenge| |
-----------------------------------------------------------------------
|7 |8 |9 |10 |11 |12 |13 |
| | |9:00am |10:00am | | | |
| | |Post |Profit | | | |
| | |challenge| | | | |
| | |to main | | | | |
-----------------------------------------------------------------------
|14 |15 |16 |17 |18 |19 |20 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|21 |22 |23 |24 |25 |26 |27 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|28 |29 |30 |31 | | | |
| | | |7:30pm | | | |
| | | |Halloween| | | |
| | | |party | | | |
| | | | | | | |
-----------------------------------------------------------------------
Klarifikasi
- Kata-kata jadwal (pencocokan [A-Za-z] +) akan dibatasi oleh satu spasi di antara mereka (seperti dalam contoh).
- Memisahkan teks pada batas kata sudah cukup. Tidak perlu kata-kata hyphenating.
- Jika Februari dimulai pada hari Minggu tanpa tahun kabisat, Anda hanya akan memiliki empat baris kalender.
- Jika bulan 31 hari (mis. Agustus) dimulai pada akhir minggu, Anda mungkin harus mengeluarkan enam baris kalender.
I / O dan Aturan
- Kode Anda harus menangani tanggal setidaknya antara
0001-01-01
dan9999-12-31
dalam kalender Gregorian, termasuk tahun kabisat yang sesuai. Misalnya, jika diberi input2016-02-13 9:00am Test
, kalender output harus memiliki 29 Februari. - Format tanggal input dapat dalam format apa pun yang diinginkan. ISO 8601,
datetime
objek, string terformat khusus, dll. Penguraian input bukan bagian yang menarik dari tantangan ini. - Input dan output dapat dengan metode apa pun yang mudah .
- Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan karakternya berbaris dengan tepat.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Output bisa ke konsol, dikembalikan sebagai daftar string, dikembalikan sebagai string tunggal, dll.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
1752-09-02 - 09:00am - Wife's Birthday Tomorrow (14th!)
Jawaban:
JavaScript (ES8),
380...321320 byteMengambil input di
(y,m,e)
mana:y
adalah tahunnyam
adalah bulan, 0-diindekse
adalah objek yang kuncinya adalah hari dan yang nilainya adalah peristiwa dalam[hour, task]
formatCobalah online!
Bagaimana?
Di bawah ini adalah beberapa bagian penting dalam kode.
Header
Baris tajuk dibuat dengan:
Ketika
split()
digunakan dengan ekspresi reguler yang berisi grup penangkap, grup ini termasuk dalam larik keluaran. Dalam hal ini, ia memberikan:Kami bergabung dengan array ini dengan 4 spasi, mengarah ke:
yang persis apa yang kita inginkan.
Struktur bulan
Pemformatan acara
Kode berikut digunakan untuk memformat acara.
sumber
Python 2 ,
326324315312307 byteCobalah online!
Masukan yang sama dengan jawaban JS Arnauld :
Mengambil input di
(y,m,e)
mana:y
adalah tahunnyam
adalah bulan, 1-diindekse
adalah objek yang kuncinya adalah hari dan yang nilainya adalah peristiwa dalam(hour, task)
formatsumber
Arang ,
215206 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Membawa tanggal dalam format d / m / yyyy. Penjelasan:
Masukkan acara pertama.
Ekstrak tanggal dan pisah pada
/
s.Konversi ke bulan sejak Maret, 1 SM. Saya ingin menghitung hari minggu pada bulan pertama dan bulan berikutnya, dan bekerja dalam bulan lebih mudah daripada memisahkan bulan dan tahun dan membawa pada akhir tahun, ditambah lagi juga memungkinkan saya untuk mulai menghitung bulan dimulai pada bulan Maret alih-alih Januari, yang disyaratkan oleh kongruensi Zeller.
Gunakan kongruensi Zeller yang dimodifikasi untuk mengekstrak hari minggu di hari pertama bulan depan dan bulan ini. Bagian dasarnya bergantung pada fakta bahwa jumlah hari dari 30 Oktober tahun sebelumnya ke tanggal 1 bulan tertentu di mana
m = 4
untuk bulan Maret danm = 14
Januari tahun berikutnya diberikan oleh rumusm * 153 / 5
, namun kita dapat mengurangi 140 karena kita hanya peduli dengan hari dalam seminggu. Kemudian tetap membuat penyesuaian karena tahun; setiap tahun menambah satu hari, setiap tahun ke-4 menambahkan hari ekstra, setiap tahun ke-100 mengurangi satu hari, dan setiap tahun ke-400 menambahkan hari lagi. (Karena saya bekerja dalam bulan, nilai-nilai ini semua dikalikan dengan 12.) Agak nyaman ini langsung memberi saya jawaban dalam hal minggu indeks-Minggu (biasanya Anda akan menambahkan hari bulan dan mulai menghitung pada hari Sabtu).Meniadakan hari dalam seminggu dan simpan sebagai hari saat ini dalam sebulan.
Hitung jumlah hari dalam sebulan dari hari minggu dua bulan.
Keluarkan header hari.
Cetak baris atas
-
s.Loop sampai hari terakhir bulan telah di-output.
Pindahkan kursor ke awal baris berikutnya.
Memproses 7 hari sekaligus.
Cetak kolom
|
s ke kiri.Tambahkan hari saat ini di bulan tersebut.
Jika hari saat ini di bulan tersebut adalah hari acara saat ini, ...
... ekstrak bagian lain dari acara tersebut, ...
... pad waktu ke 9 spasi dan simpan dan string kosong sebagai daftar, ...
... pisahkan deskripsi pada spasi dan lewati, ...
... menambahkan setiap kata ke kata sebelumnya jika itu sesuai; ...
... menampilkan waktu dan deskripsi (
Pδ
tidak berfungsi, mungkin bug Charcoal?), ...... dan masukan acara selanjutnya.
Jika hari saat ini di bulan adalah antara 1 dan hari terakhir dari bulan lalu keluarkan, jika tidak cukup output ruang yang cukup untuk pindah ke hari berikutnya.
Pada akhir minggu, cetak kolom kanan
|
s dan baris bawah-
s.sumber
year-1
harus digunakan sebagai penggantiyear
danmonth+12
harus digunakan sebagai penggantimonth
. Atau apakah Anda entah bagaimana menyederhanakan algoritma yang saya sebutkan dalam jawaban saya di 05AB1E ini yang sama dengan yang ada di Wikipedia ?Java (JDK) ,
538439428425 byteSangat mungkin solusi Code Golf terpanjang yang pernah saya posting. Masih mencoba untuk bermain golf dari sini tapi itu sulit.
Berhasil merobohkan 99 byte dengan mengubah format input dan menggunakan beberapa penguraian regex, dan 11 lainnya dari bit lain-lain.
3 byte ekstra, terima kasih kepada Kevin!
Mengambil inspirasi dari jawaban lain, dibutuhkan input sebagai tahun, bulan dan Peta hari ke String yang mewakili waktu dan acara dalam format
<time>-<event>
.Cobalah online!
Tidak disatukan
sumber
&&(i=1)<2?7:0
bisa?7*(i=1):0
untuk menghemat 3 byte.b>x|i++<6?0:7*(i=1)
alih-alihb<=x&++i>6?7*(i=1):0
danc*i>1|b<1|b>x?c<2&e!=null?e.split("-")[i-2]:" ":b+""
bukannyac*i<2&b>0&b<=x?b+"":c<2&e!=null?e.split("-")[i-2]:" "
Merah ,
674651 byteCobalah online!
Lebih mudah dibaca:
sumber
if e = 0[e: 7]
dapat dihapus, kan? Anda menggunakane: 1 + c/weekday % 7
, jadie
akan selalu berada dalam jangkauan[1, 7]
.1 +
Terjadi dulu .. Ok, saya melihat kesalahan saya. Saya sudah terbiasa%
dan/
lebih diutamakan dari operator+
.