Ini adalah Desember 2014, dan 2015 sudah hampir dimulai. Namun, tampaknya tidak semua orang menyadari hal ini.
Tetapi orang-orang PPCG datang untuk menyelamatkan!
Memasukkan
Program Anda diberi kotak seperti yang ada di dinding, di mana hari-hari di bulan Desember terlihat berbeda dari bulan November dan Januari. Setiap minggu dimulai dengan hari Minggu dan berakhir dengan hari Sabtu.
Hari dalam bulan diwakili oleh a #
. Hari yang jatuh di luar bulan diwakili oleh (spasi, kode ASCII 32). Setiap minggu berada di jalur yang berbeda. Garis dipisahkan oleh karakter baris baru (
\n
). Program Anda mungkin memerlukan penghentian atau penyertaan baris baru di akhir input.
Misalnya, ini adalah input untuk Desember 2009:
#####
#######
#######
#######
#####
Kalender selalu dari bulan Desember.
Tugas
Diberikan input, Anda harus menemukan tahun yang terkait dengan kalender. Karena ada beberapa tahun yang cocok dengan kalender, Anda harus mengembalikan tahun (sebelum 2015) yang paling dekat dengan tahun 2015. (Tidak termasuk tahun 2015 itu sendiri.)
Program Anda harus menghasilkan output yang benar untuk setiap tahun <2015, tidak termasuk yang memiliki tata letak kalender untuk Desember yang sama dengan tahun lain (sebelum 2015) mendekati 2015.
Jika tahun ini <2014, Anda juga harus menghitung selisih tahun hingga 2014. Misalnya, untuk 2012 perbedaannya 2
.
Keluaran
Output program Anda harus:
- Teks:
Your calendar is for <year>.
(Catatan: karena ini awalnya dieja sebagai "kalender", saya akan menerima ejaan itu juga.) - Diikuti oleh baris baru (
\n
atau\r\n
). - Diikuti oleh teks:
It's almost 2015.
- Jika tahun ini <2014, ini harus diikuti oleh teks:
You're <difference> years behind.
Ini harus pada baris terpisah. - Diikuti oleh baris baru (
\n
atau\r\n
). - Diikuti oleh teks:
Go buy a new calendar!
- Opsional diikuti oleh baris baru (
\n
atau\r\n
).
Aturan
- Anda dapat memilih apakah Anda ingin menerima kalender sebagai argumen baris perintah (misalnya
yourprogram.exe <calendar>
) atau meminta input pengguna. - Anda dapat menganggap program Anda tidak akan menerima input yang tidak valid. Input yang tidak valid termasuk tata letak kalender yang tidak ada tahun.
- Kode terpendek (dalam byte, dalam bahasa apa pun) menang.
Argumen baris perintah non-standar (argumen yang biasanya tidak diperlukan untuk menjalankan skrip) dihitung terhadap jumlah total karakter.
Apa yang tidak boleh dilakukan oleh program Anda :
- Bergantung pada sumber daya eksternal apa pun.
- Bergantung pada memiliki nama file tertentu.
- Output apa pun selain output yang dibutuhkan.
- Butuh waktu yang sangat lama untuk dijalankan. Jika program Anda berjalan lebih dari satu menit pada komputer pengguna rumahan rata-rata, itu tidak valid.
- Program Anda tidak boleh ditulis dalam bahasa pemrograman yang tidak ada kompiler / juru bahasa yang tersedia untuk umum sebelum tantangan ini diposting.
Contohnya
Memasukkan:
#####
#######
#######
#######
#####
Keluaran:
Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!
Memasukkan:
######
#######
#######
#######
####
Keluaran:
Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!
Memasukkan:
#
#######
#######
#######
#######
##
Keluaran:
Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!
sumber
Jawaban:
CJam, 126 byte
sumber
Python 3, 178 byte
Tabel pencarian sederhana berdasarkan lokasi yang pertama
#
.Diperluas:
sumber
Perl - 187
sumber
Perl 5: 137
143Pendekatan sebelumnya:
Kalender pada input standar (tentu saja hanya baris pertama yang signifikan)
sumber
C # 235
diperkecil:
Tidak disatukan
Nah, bahasanya verbose :)
sumber
Program
menjadiP
. Itu akan menyelamatkan Anda beberapa karakter :)y
dikomputasi, jika Anda mengindeks string Anda dapat menyimpan sintaks yang diperlukan untuk menggambarkan array (yaituvar y = "1054382"[index]-48
(0
adalah ASCII 48)).y
dapat juga dimasukkan ke dalamz
perhitungan untuk penghematan lebih lanjut.C #,
384,363325 BytesC # Waktu, tolong beri tahu saya jika saya melewatkan salah satu aturan dll.
Memasukkan
Keluaran
Input 2
Keluaran 2
Sunting: Diperbarui, berhasil menghapus beberapa byte
sumber
Java, 243 byte
Ini bahasa lisan :-)
Tidak ditambang
sumber
JavaScript (ES6),
199170 byteSaya belum terbiasa menulis ES6 sehingga tips apa pun akan dihargai:
Tabel pencarian, 170 byte
Asli, 199 byte
Tidak ditambang
JavaScript (ES5),
212182 byteSaya juga menyertakan versi asli saya di bawah ini
Array pencarian, 182 byte
Tidak ditambang
Asli, 212 byte
Tidak ditambang
sumber
CoffeeScript,
211177 byteMirip dengan jawaban PHP saya, tetapi CoffeeScript tidak memiliki
do-while
loop juga tidak memiliki operator ternary pendek:Tidak diperkecil
Dipersingkat dengan menggunakan tabel pencarian:
sumber
PHP,
215181 byteTabel pencarian, 181 byte
Karena sintaks array pendek, hanya berfungsi pada PHP 5.4+:
Tidak ditambang
Asli, 215 byte
Bekerja dengan sebagian besar (jika tidak semua) versi PHP 5:
Tidak ditambang
sumber
Ruby, 174
sumber
PHP, 145 byte
dua linebreak di belakang tag penutup karena PHP akan mengabaikan yang pertama
mengambil input dari argumen baris perintah;
membutuhkan PHP 5.6 (dirilis 18 Desember 2014) atau lebih baru untuk mengindeks string literal.
sumber
SmileBASIC, 159 byte
sumber
C # (Visual C # Interactive Compiler) ,
178175172 byteCobalah online!
sumber