Ini Natal semua orang, dan inilah tantangan kode-golf untuk merayakannya. Anda perlu membuat program untuk mencetak hadiah. Secara khusus, kata-kata "Selamat Natal". TETAPI ada peluang: program ini hanya bisa berfungsi jika tanggal 25 Desember. Jika kode dijalankan pada hari lain, maka program tersebut akan mogok.
Ini adalah Code-Golf, jadi jawabannya dengan jumlah byte terkecil menang.
Selamat Natal!
Jawaban:
Pyke, 21 byte
Coba di sini!
Atau 18 byte tidak kompetitif.
Sama persis kecuali untuk bagian ini:
Coba di sini!
sumber
30 * (10+1)
= 330 bukan 325JavaScript,
555346 byteCatatan: ini hanya diuji di Google Chrome, program mungkin berperilaku berbeda dari peramban ke peramban (atau perangkat ke perangkat)
2 byte disimpan berkat @ ConorO'Brien
7 byte disimpan berkat @ETHProductions
Keluar dengan
Uncaught ReferenceError: a is not defined
jika tanggal tidakDec 25
. Saya tidak begitu yakin apakah ini dianggap sebagai crashsumber
.slice(6,10)=="c 25"
?c
(Oct
hampir saja, tetapi masih belum memenuhi regex). Terima kasih atas tipnya!Date()
sepenuhnya tergantung pada implementasi. Sebagai contoh, saya berharap ini berbeda dengan bahasa dan lokasi mesin.Python 3,
6663 byteBerkat ide-ide dari JavaScript / jawaban ES di sini saya berhasil memeras beberapa byte. Buat indeks kamus - kunci yang tidak ada akan memunculkan a
KeyError
. Kode berikut berfungsi di zona waktu lokalFormat output untuk
ctime
tidak bergantung pada lokal - formatnya selalu ~'Sun Dec 25 19:23:05 2016'
. Karena hanya pada bulan Desember berakhirnya singkatan 3 hurufc
, aman untuk digunakan di'c 25'in time.ctime()
sini.Versi sebelumnya:
Ini bekerja di zona waktu UTC. Untuk zona waktu lokal kita perlu
s/gm/local
3 byte lagi. Untuk Python 2, seseorang dapat menghapus tanda kurung dariprint
65 byte.Konstruk ini memuat
KeyError
tanggal lain:sumber
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
dan melabeli Python 2, itu masih 66 byte dan macet dengan KeyError pada tanggal selain 25 Desember.1:3
, saya menyalin kode pengujian saya secara tidak sengajagmtime()
ide Anda untuk jawaban saya. Harap Anda tidak keberatan :-)PHP,
3938 byte, tidak bersaing (tidak crash)atau
atau
sumber
date(Lz)%1001-358
? : D""
kode pertama yang menghemat 2 Byte. Jika bukan karena tahun kabisat, Anda bisa menghemat 2 Byte lebih banyak dengan menggantimd
denganz
dan1225
dengan jumlah hari tahun 25 Desember.eval((date(md)^TQZZ).'"Merry Christmas";');
(43 byte)1
. Ini akan mencetak hasil perhitungan. dan0104-1225
1121.Python 2 ,
686765 byte-1 dengan terima kasih kepada @muddyfish
Terima kasih kepada @AnttiHaapala untuk ide yang menyelamatkan pasangan lain.
Cobalah online!
Melempar IndexError jika tidak 25 Des.
Versi yang tidak bersaing untuk 59 byte karena hanya berfungsi untuk tahun yang tidak Leap (menggunakan hari dalam setahun yaitu 360 tahun ini tetapi 361 tahun kabisat)
sumber
gmtime()
untuk mencukur pasangan. Saya harus mengakui, saya berharap ada lebih banyak yang bisa saya lakukan dengan ide hari-tahun ini.R,
52 6158 byteJika tanggal saat ini bukan tanggal 25 Desember maka kesalahan dikembalikan karena tidak ada argumen ketiga yang diberikan
if
.Sunting: Memperbaiki kesalahan konyol
sumber
Pertama kali di sini ... Dimulai dengan bahasa terbaik untuk pekerjaan ini:
Java,
200188byte (terima kasih kepada @Daniel Gray), 186 byte menghapus "ln" dari cetakan.Coba di sini!
sumber
Calendar
untuk*
dan menyimpan beberapa byte. Anda juga bisa mempersingkat namaargs
parameter dalam metode utama, saya kira ...MATL ,
3433 byteIni berfungsi dalam versi bahasa saat ini (19.7.0) . Untuk menyebabkan kesalahan, kode berikut mengeksploitasi fakta bahwa logaritma string memberikan kesalahan (ini dapat berubah di versi yang akan datang).
Cobalah online!
Penjelasan
sumber
QBIC , 48 byte
Penjelasan:
Ini mengasumsikan
MM-DD
notasi tanggal Amerika . Ini akan lebih pendek jika saya akhirnya membuat fungsi Substring di QBIC.sumber
05AB1E ,
3221 byteDisimpan 11 byte berkat kompresi string Adnan :).
Penjelasan
Cobalah online!
Saya melakukan apa yang terlintas dalam pikiran pertama, jadi mungkin ada pendekatan yang lebih baik untuk yang satu ini. Tapi PPCG juga layak mendapatkan Selamat Natal di 05AB1E;).
sumber
x
kependekan dari duplikat dan ganda :).C # / CS Script
10610099 byteSolusi 99 byte
Coba di sini!
Solusi 100 byte (lebih suka yang ini ... agak berbeda)
Dijelaskan:
DateTime.Now.AddDays(7).DayOfYear==1
adalah satu byte lebih pendek dariDateTime.Now.ToString("ddMM")=="2512"
tetapi 1 byte lebih lama dariDateTime.Now.ToString("dM")=="2512"
sumber
$"{DateTime.Now:dM}"=="2512"
.dM
ambigu, tetapi tidak untuk "2512".$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 byte) =)int i
dan tidak adil1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 byte)C # / CS Script, 96 Bytes, Kebanyakan dijiplak dari Erresen
Menghapus
int i
deklarasi yang mendukung pengodean keras divisi. Saya akan meninggalkan ini sebagai komentar tetapi tidak memiliki reputasi.sumber
bash + utilitas Unix,
514947 byte* Terima kasih kepada @ KenY-N untuk menunjukkan bahwa tanda kutip dalam gema dapat dihapus, dan untuk @IporSircer untuk mengurangi ukuran kondisi sebesar 2 byte.
sumber
bash: ${}: bad substitution
kesalahan. Anda juga dapat menjatuhkan tanda kutip dari Selamat Natal untuk menghemat dua byte. Selanjutnya,[ `date +%m%d` = 1225 ]&&echo Merry Christmas
bekerja untuk saya, sama dengan 45 byte saya .${}
dengan!-
untuk mengalahkan saya dengan satu byte. Saya akan mendukung Anda saat Anda menang.Groovy, 57 byte
Gangguan pada tanggal selain 25.12. dengan
groovy.lang.MissingPropertyException
karenab
tidak didefinisikan.sumber
Ditumpuk , 42 byte
Coba di sini!
Ini menciptakan array elemen tunggal yang mengandung yaitu
'Merry Christmas!'
. Setelah itu, tanggal dimasukkan ke dalam string dengan bulan diikuti oleh hari. Ia memeriksa kesetaraan dengan'1225'
(Natal), membalikkannya dengan¬
, lalu mendapatkan anggota itu dari susunan sebelumnya. Jika ini bukan Natal, ini akan kesalahan dengan kesalahan indeks. Kalau tidak, ia akan mencetakMerry Christmas
. (Ubah tanggal dalam string untuk melihat cara kerjanya di hari lain.)sumber
Batch, 66 byte
Baris baru yang tertinggal signifikan, karena menyebabkan penguraian
if
pernyataan gagal. Anda mungkin perlu mengubah cek tanggal agar cocok dengan format tanggal lokal Anda.sumber
Python 2,
69 7775 atau7270 BytesJika tidak masalah jika keluar dengan kesalahan saat Natal, maka:
EDIT:
Terima kasih @ Flp.Tkc untuk menunjukkan bahwa saya perlu meningkatkan kesalahan
-2 Bytes dari @Max untuk menunjukkan tentang menghapus titik dua dari fungsi strftime
sumber
CJam, 28
Cobalah online
Penjelasan:
sumber
C # .NET,
180172171 byteDisimpan 8 byte berkat Kritixi Lithos
Disimpan 1 byte berkat Kritixi Lithos, lagi;)
Alternatif, varian tidak mengandung serigala:
sumber
NotChristmasException
Hanya ada di varian yang tidak diserang.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
Catatan dikombinasikan jika pernyataan dan penghapusan kawat gigi di sekitarConsole.Write
dan gantireturn
denganelse
. Juga ubahvar d=DateTime.Now
Anda dapat menyingkirkan pengecualian melempar dengan mungkinargs[-1];
setelah mengubah nama argumen menjadia
begitua[-1];
(ini jadi tidak identik untuk dibagi dengan nol yang digunakan di tempat lain)Mathematica, 46 byte
sumber
Now
menghemat 2 Bytes lebihToday
Quit[]
atau1/0
sudah cukup.Common Lisp, 140
Gangguan dengan fungsi yang tidak ditentukan jika tanggal tidak tepat.
sumber
awk, 29 byte (+ panjang ("Selamat xmas"))
Menjalankannya:
Salam musim disalurkan ke
awk
.strftime
mengembalikan bulan + hari (misalnya1226
) dan jika cocok,1225
$0
catatan akan dihasilkan. Hasil perbandingan1225==1226
ditempatkan padav
var yang digunakan untuk membagi 1 jika perbandingan tanggal gagal.sumber
Haskell, 116
Gangguan dengan "Pola tidak lengkap dalam fungsi f" jika bukan Natal.
Sayangnya, tidak ada fungsi yang memungkinkan Anda untuk segera mendapatkan waktu dalam format yang bermanfaat, sehingga sebagian besar dari ini mengonversi format tanggal.
sumber
C #,
122104 byte18 byte disimpan, terima kasih kepada @raznagul
Ini menambahkan 7 hari ke hari saat ini, dan memeriksa apakah itu adalah hari pertama tahun ini, jika ya, itu menampilkan "Selamat Natal", jika tidak dibagi dengan nol.
sumber
return
tidak perlu. Gunakani
sebagai ganti()
.Ruby, 69 byte
Bekerja pada 2016. Tidak membedakan antara tahun normal dan tahun kabisat, mungkin perlu disesuaikan untuk tahun-tahun tidak kabisat.
sumber
ForceLang, 180 byte
(Ingat itu
datetime.toDateString
tergantung pada lokal, jadi ini mungkin tidak berfungsi tergantung pada lokal Anda)sumber
C #, 90 byte
Lempar IndexOutOfRangeException jika ini bukan Natal.
Coba di sini!
sumber
baris perintah bash,
454849 48 byteMirip dengan Mitchell Spector , tetapi gunakan
grep
dalam mode diam untuk memeriksa kecocokan, kemudian&&
akan memastikan bahwa itu hanya mencetak pada kesuksesan, dan||
penyebabnya untuk mencari riwayat!-
, yang memberi saya ini:Dan itu menghentikan eksekusi seperti yang
!- ; echo foo
ditunjukkan. Thebash
dokumentasi mengatakan bahwa!-n
mengacu pada perintah dikurangi saatn
, jadi mungkin itu sedang ditafsirkan sebagai!-0
, yang memberikan pesan kesalahan yang sama (dan non-lokal).sumber
;
bukan||
.