Merry Golfmas ทุกคน!


35

มันเป็นคริสต์มาสสำหรับทุกคนและนี่คือความท้าทายของการเล่นกอล์ฟเพื่อเฉลิมฉลอง คุณต้องสร้างโปรแกรมเพื่อพิมพ์ของขวัญ โดยเฉพาะคำว่า "Merry Christmas" แต่มีการจับ: โปรแกรมนี้จะทำงานเฉพาะถ้ามันคือ 25 ธันวาคม หากมีการเรียกใช้รหัสในวันอื่น ๆ โปรแกรมจะทำงานล้มเหลว

นี่คือ Code-Golf ดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

สุขสันต์วันคริสต์มาส!


5
ใช่นั่นคือ ermmmmm .. ใช่แล้ววันที่ 25 ขอโทษ
ลีโอ


3
Codyas กอล์ฟ ! :)
Luis Mendo

1
ไม่ต้องเป็นความผิดพลาด คุณไม่สามารถออกจาก aplication ได้
Leo

2
@PhiNotPi ความท้าทายเหล่านั้นแตกต่างกัน นี่ไม่ได้ขอการนับถอยหลังและไม่เกี่ยวข้องกับการรอให้ผลผลิต
Leo

คำตอบ:


8

Pyke, 21 ไบต์

.dↄґ6C65h*325q/Al

ลองที่นี่!

     C65h*        -   multiply the day by the (current month + 1)
          325q    -  ^ == 325
    6         /   - 6 / ^
.dↄґ              -  load "merry christmas"
               Al - ^.capwords()

หรือ 18 ไบต์ที่ไม่สามารถแข่งขันได้

.dↄґ6Cs6Y1q/Al

เหมือนกันยกเว้นในส่วนนี้:

Cs6Y1q 
C      -    get_time()
 s6    -   add 1 week
   Y   -  get day of the year
    1q - ^ == 1

ลองที่นี่!


สิ่งนี้จะล้มเหลวหากเป็นวันที่ 30 ตุลาคมใช่ไหม
Magic Octopus Urn

1
@carusocomputing 30 * (10+1)= 330 ไม่ใช่ 325
Blue

6

JavaScript, 55 53 46 ไบต์

หมายเหตุ: สิ่งนี้ได้รับการทดสอบเฉพาะใน Google Chrome โปรแกรมอาจทำงานแตกต่างจากเบราว์เซอร์ไปยังเบราว์เซอร์ (หรืออุปกรณ์ต่ออุปกรณ์)

บันทึก 2 ไบต์ด้วย @ ConorO'Brien

บันทึกแล้ว 7 ไบต์ด้วย @ETHProductions

alert(/c 25/.test(Date())?"Merry Christmas":a)

ทางออกด้วยถ้าวันนั้นไม่ได้Uncaught ReferenceError: a is not defined Dec 25ฉันไม่แน่ใจว่าสิ่งนี้นับว่าขัดข้องหรือไม่

alert(/c 25/.test(Date())?"Merry Christmas":a)


แล้วไง.slice(6,10)=="c 25"ล่ะ
Conor O'Brien

@ ConorO'Brien ขอบคุณ! ช่างฉลาด
เหลือเกิน

@ETHproductions ฉันไม่สามารถนึกถึงวันหรือเดือนใด ๆ ที่ลงท้ายด้วยc(เข้าOctมาใกล้ แต่ก็ยังไม่พอใจ regex) ขอบคุณสำหรับทิป!
Kritixi Lithos

ผลลัพธ์ที่ได้Date()นั้นขึ้นอยู่กับการนำไปปฏิบัติอย่างสมบูรณ์ ตัวอย่างเช่นฉันคาดว่ามันจะแตกต่างกันไปตามภาษาและที่ตั้งของเครื่อง
Oriol

@Oriol จากนั้นฉันจะระบุเบราว์เซอร์ในคำตอบของฉัน
Kritixi Lithos

5

Python 3, 66 63 ไบต์

ขอบคุณแนวคิดจาก JavaScript / ES คำตอบที่นี่ฉันจัดการเพื่อบีบไบต์ ดัชนีพจนานุกรม - KeyErrorปุ่มที่ไม่มีอยู่จริงจะยก รหัสต่อไปนี้ทำงานในโซนเวลาท้องถิ่น

import time;print({1:'Merry Christmas'}['c 25'in time.ctime()])

รูปแบบการออกสำหรับการctimeไม่ได้เป็นสถานที่เกิดเหตุขึ้น - รูปแบบอยู่เสมอ 'Sun Dec 25 19:23:05 2016'~ เนื่องจากในเดือนธันวาคมตัวย่อ 3 ตัวอักษรจะสิ้นสุดด้วยcจึงมีความปลอดภัยที่จะใช้'c 25'in time.ctime()ที่นี่


รุ่นก่อนหน้า:

ใช้งานได้ในเขตเวลา UTC สำหรับเขตเวลาท้องถิ่นหนึ่งต้องการs/gm/localสำหรับ 3 ไบต์เพิ่มเติม สำหรับ Python 2 หนึ่งสามารถลบวงเล็บจากprintสำหรับ 65 ไบต์

import time;print({(12,25):'Merry Christmas'}[time.gmtime()[1:3]])

การก่อสร้างพ่นKeyErrorในวันที่อื่น:

>>> import time;print({(1,1):'Happy New Year'}[time.gmtime()[1:3]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: (12, 25)

ข้อผิดพลาดนี้เกิดขึ้นในวันอื่นหรือไม่
Erresen

2
ฉันไม่สามารถเรียกใช้อันนี้เมื่อวัตถุคัดลอกมาเป็นกุญแจลองออนไลน์! . หากคุณเปลี่ยนเป็นimport time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]และติดป้ายกำกับ Python 2 ก็ยังคงมี 66 ไบต์และขัดข้องด้วย KeyError ในวันที่นอกเหนือจาก 25 ธันวาคม
ElPedro

@ElPedro อ๊ะ: D น่าจะเป็น1:3แล้วฉันคัดลอกรหัสทดสอบโดยไม่ตั้งใจ
Antti Haapala

หยิบขึ้นมาเมื่อฉันยืมgmtime()ความคิดของคุณสำหรับคำตอบของฉัน หวังว่าคุณจะไม่สนใจ :-)
ElPedro

5

PHP, 39 38 ไบต์, ไม่ใช่การแข่งขัน (ไม่ผิดพลาด)

<?=date(md)-1225?"":"Merry Christmas";

หรือ

<?date(md)-1225?die:0?>Merry Christmas

หรือ

<?=["Merry Christmas"][date(md)-1225];

ทุกคนสามารถกอล์ฟ 4 ไบต์ได้date(Lz)%1001-358หรือไม่ : D
Titus

3
ความผิดพลาดนี้เกิดขึ้นหรือไม่
edc65

คุณสามารถปล่อยให้""อยู่ในรหัสแรกที่ช่วยให้คุณ 2 ไบต์ ถ้ามันไม่ได้สำหรับปีแช่งอธิกสุรทินคุณสามารถประหยัด 2 Byte มากขึ้นโดยการแทนที่mdโดยzและ1225จากจำนวนวันของปีที่ 25 ธันวาคมที่
UTF-8

1
อีกทางเลือกหนึ่ง: eval((date(md)^TQZZ).'"Merry Christmas";');(43 ไบต์)
Ismael Miguel

1
@ UTF-8: ถูกต้อง ฉันส่วนใหญ่ใช้ Elvis สำหรับค่าบูลีน 1และที่จะพิมพ์ สิ่งนี้จะพิมพ์ผลลัพธ์ของการคำนวณ และ0104-1225คือ 1121.
ติตัส

4

Python 2 , 68 67 65 ไบต์

-1 ด้วย @muddyfish

ขอบคุณ @AnttiHaapala สำหรับความคิดที่ช่วยชีวิตคู่อื่น

import time;print['Merry Christmas'][(12,25)!=time.gmtime()[1:3]]

ลองออนไลน์!

ส่ง IndexError หากไม่ใช่วันที่ 25 ธันวาคม

รุ่นที่ไม่ใช่การแข่งขันสำหรับ 59 ไบต์เนื่องจากใช้งานได้เฉพาะปีที่ไม่ใช่ Leap (ใช้วันของปีซึ่งคือ 360 ปีนี้ แต่ 361 ในปีอธิกสุรทิน)

import time;print['Merry Christmas'][360!=time.gmtime()[7]]

คุณไม่สามารถบันทึก byte โดยใช้รายการแทน tuple ได้หรือไม่?
บลู

@ muddyfish ขอบคุณจับได้ดี
ElPedro

เป็นคนดีความคิดของฉันคือ2 ไบต์พิเศษ : P
FlipTack

ขอบคุณ นั่นเป็นรุ่น 67 ไบต์ของฉันจนกว่าฉันจะแสดงความคิดเห็นกับคำตอบจาก @AnttiHaapala และคิดที่gmtime()จะโกนหนวดคู่ ฉันต้องยอมรับว่าฉันหวังว่าจะมีอะไรมากกว่านี้ที่ฉันสามารถทำได้ด้วยความคิดในแต่ละวัน
ElPedro

คุณสามารถบันทึก 1 ไบต์ด้วย: time.ctime () [6:10]! = 'c 25'
สูงสุด

4

R, 52 61 58 ไบต์

`if`(format(Sys.Date(),"%m%d")=="1225","Merry Christmas",)

หากวันที่ปัจจุบันไม่ได้เป็น 25 ifธันวาคมแล้วมีข้อผิดพลาดจะถูกส่งกลับเพราะไม่มีอาร์กิวเมนต์ที่สามจะถูกส่งไปยัง

แก้ไข: แก้ไขข้อผิดพลาดโง่ ๆ


ขอโทษด้วยที่พิมพ์ผิดเล็กน้อย ฉันหมายถึงพูด 25tg
Leo

ใช้ได้แค่ปีนี้เท่านั้น!
Erresen

@Eresres Ah Ah ผิดพลาดโง่ ๆ แก้ไขในขณะนี้แม้ว่า
Billywob

4

ครั้งแรกของฉันที่นี่ ... เริ่มต้นด้วยภาษาที่ดีที่สุดสำหรับงานนี้:

Java, 200 188ไบต์ (ขอบคุณ @Daniel Grey), 186 ไบต์ลบ "ln" ออกจากการพิมพ์

import java.util.*;public class a{public static void main(String[]r){Calendar c=Calendar.getInstance();if(!(c.get(2)==11&&c.get(5)==25)){int i=1/0;}System.out.print("Merry Christmas");}}

ลองที่นี่!


1
ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดีแม้ว่าจาวาไม่ได้ค่อนข้างสั้น
Rɪᴋᴇʀ

1
คุณสามารถเปลี่ยนCalendarสำหรับ*และประหยัดไม่กี่ไบต์ นอกจากนี้คุณยังสามารถตัดชื่อของargsพารามิเตอร์ในวิธีการหลักที่ฉันคิดว่า ...
แดเนียลสีเทา

@Daniel Gray คุณพูดถูกจริงๆขอบคุณ!
Bonifacio

1
ยินดีต้อนรับ! คุณสามารถบันทึก 10 ไบต์หากคุณแทนที่ "public class" ด้วย "interface" และลบ public modifier ออกจาก main ทำให้ "interface เป็น {static void main ... " อย่างไรก็ตามสิ่งนี้จะป้องกัน Compilejava ไม่ให้สามารถเรียกใช้งานได้ ออนไลน์
Zavada

3

MATL , 34 33 ไบต์

'Merry Christmas'IHh&Z'5U12h=?}Yl

ใช้ได้กับภาษาปัจจุบัน (19.7.0) เพื่อก่อให้เกิดข้อผิดพลาดรหัสต่อไปนี้หาประโยชน์ข้อเท็จจริงที่ว่าลอการิทึมของสตริงให้ข้อผิดพลาด (ซึ่งอาจเปลี่ยนแปลงในรุ่นอนาคต)

ลองออนไลน์!

คำอธิบาย

'Merry Christmas'  % Push this string
IHh                % Push 3, then 2, concatenate: gives array [3 2]
&Z'                % Get 3rd and 2nd outputs of clock vector: current day and month
5U12h              % Push 5, square, push 12, concatenate: gives [25 12]
=                  % Compare if corresponding entries are equal in the two arrays
?                  % If all entries are equal: do nothing
}                  % Else
  Yl               %   Logarithm. Gives an error when applied on a string
                   % End (implicit). Display (implicit)

3

QBIC , 48 ไบต์

~left$$|(_D,5)=@12-25||?@Merry Christmas|\?a(12)

คำอธิบาย:

~             IF
left$$|(_D,5) the date string starts with
=@12-25|      the string "12-25"
|             THEN
?@Me..as|     PRINT "Merry Christmas"
\             ELSE
?a(12)        Print the twelfth index of an undefined array. 
              Since there are only 11 elements in undefined arrays, this 
              results in an index-out-of-bounds error.    
The the IF statement is auto-closed by QBIC.

นี่ถือว่าเป็นMM-DDสัญลักษณ์แสดงวันที่แบบอเมริกัน สิ่งนี้จะสั้นลงถ้าในที่สุดฉันก็สร้างฟังก์ชันย่อยใน QBIC


เกิดอะไรขึ้นในวันที่ไม่ใช่วันคริสต์มาส มันผิดพลาดตามที่ควร?
Erresen

@Eresres มันทำตอนนี้
steenbergh

3

05AB1E ,32 21 ไบต์

บันทึก 11 ไบต์ด้วยการบีบอัดสตริงของ Adnan :)

1žfže‚12D·>‚Q÷”ÞٌΔ×

คำอธิบาย

 žfže‚                Push [current month, current day]
      12D·>‚          Push [12, 25]
            Q         Push tmp = 1 if the two arrays are equal, tmp = 0 otherwise
1            ÷        Evaluate x = 1/tmp. If tmp = 0 a division by 0 exception is thrown
              ”ÞÙŒÎ”× Implicitly display "Merry Christmas" x times

ลองออนไลน์!

ฉันทำสิ่งที่อยู่ในใจก่อนดังนั้นอาจมีวิธีที่ดีกว่าสำหรับอันนี้ แต่ PPCG สมควรได้รับ Merry Christmas ในปี 05AB1E เช่นกัน;)


นอกจากนี้xย่อมาจากซ้ำซ้อนและเป็นสองเท่า :)
Adnan

3

C # / CS Script 106 100 99 ไบต์

วิธีแก้ปัญหา 99 ไบต์

using System;int i;Console.WriteLine(DateTime.Now.ToString("dM")=="2512"?"Merry Christmas":i/0+"");

ลองที่นี่!

วิธีแก้ปัญหา 100 ไบต์ (ต้องการอันนี้ ... แตกต่างกันเล็กน้อย)

using System;int i;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":i/0+"");

อธิบาย:

using System;
int i;

// if today plus 7 days is the first day of the year, then it's xmas!
Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1
    ? "Merry Christmas"

// otherwise divide i by 0
    : i/0+"");

DateTime.Now.AddDays(7).DayOfYear==1สั้นกว่าหนึ่งไบต์DateTime.Now.ToString("ddMM")=="2512"แต่ยาวกว่า 1 ไบต์DateTime.Now.ToString("dM")=="2512"


1
$"{DateTime.Now:dM}"=="2512"คุณสามารถใช้ dMไม่ชัดเจน แต่ไม่ใช่สำหรับ "2512"
Kobi

@Kobi ฉันไม่สามารถใช้การแก้ไขสตริงสำหรับสคริปต์ CS :(
Erresen

1
คุณสามารถทำได้หากคุณใช้ LinqPad (เช่น$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""55 bytes) =)
Kenneth K.

ทำไมint iและ notjust 1/0?
NoOneIsHere

1
@Eresres Ah, ความผิดพลาดของฉัน ฉันไม่ได้ทดสอบอย่างละเอียดเพียงพอ Tweaked: $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)(59 bytes)
Kenneth K.

2

สคริปต์ C # / CS, 96 ไบต์คัดลอกผลงานส่วนใหญ่จาก Erresen

using System;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":1/0+"");

ลบการint iประกาศในความโปรดปรานของการเข้ารหัสยากส่วน ฉันจะแสดงความคิดเห็นนี้ แต่ไม่มีชื่อเสียง


ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี! ไม่ต้องกังวลเกี่ยวกับความเห็น / คำตอบมันไม่สำคัญมากนัก
Rɪᴋᴇʀ

2

bash + ยูทิลิตี้ Unix, 51 49 47 ไบต์

((`date +%m%d`-1225))&&${};echo Merry Christmas

* ขอขอบคุณ @ KenY-N สำหรับการชี้ให้เห็นว่าสามารถลบเครื่องหมายคำพูดใน echo และ @IporSircer เพื่อลดขนาดเงื่อนไขลงได้ 2 ไบต์


นั่นทำให้ฉันbash: ${}: bad substitutionผิดพลาด นอกจากนี้คุณสามารถลดราคาจากMerry Christmasเพื่อบันทึกสองไบต์ นอกจากนี้[ `date +%m%d` = 1225 ]&&echo Merry Christmasการทำงานสำหรับฉันเท่ากับ45 ไบต์ของฉัน
Ken YN

1
@ KenY-N ข้อผิดพลาดมีจุดประสงค์: โปรแกรมน่าจะผิดพลาดในวันอื่น ๆ นอกเหนือจากวันคริสต์มาส ขอบคุณสำหรับการกล่าวถึงว่าคำพูดในเสียงก้องสามารถลดลง; ฉันคิดถึงสิ่งนั้น
Mitchell Spector

อ๊ะพลาดข้อกำหนดนั้นไป! ทดสอบโดยการเปลี่ยนสตริงวันที่และตอนนี้ฉันเห็นว่ามันไม่ผิดพลาด ลบคำตอบของฉัน ... แต่ฉันมีทางเลือกอื่นดังนั้นขอให้ฉันอัปเดต
Ken YN

ลองแทนที่${}ด้วย!-เพื่อเอาชนะฉันทีละไบต์ ฉันจะโหวตให้คุณเมื่อคุณชนะ
Ken YN

1
@ KenY-N ขอบคุณ แต่ฉันจะไม่เปลี่ยน $ {} เป็น! - เนื่องจากฉันคิดว่าอันหลังจะทำงานได้อย่างถูกต้องในบรรทัดคำสั่งไม่ใช่ในสคริปต์ (เว้นแต่คุณจะเปิดการทดแทนประวัติซึ่งจะใช้เวลาเพิ่มเติม ตัวอักษร)
Mitchell Spector

1

Groovy, 57 ไบต์

print new Date().format("Md")=="1225"?"Merry Christmas":b

เกิดปัญหาในวันที่อื่นที่ไม่ใช่ 25.12 ด้วยgroovy.lang.MissingPropertyExceptionเพราะbไม่ได้กำหนดไว้


1

ซ้อนกัน 42 ไบต์

ลองที่นี่!

('Merry Christmas')'MMDD'date'1225'=¬#out

'Merry Christmas!'นี้จะสร้างอาร์เรย์เดียวที่มีองค์ประกอบคือ หลังจากนั้นจะใส่วันที่ลงในสตริงที่มีเดือนตามด้วยวันที่ มันจะตรวจสอบความเท่าเทียมกันกับ'1225'(คริสต์มาส) กลับค่าด้วย¬แล้วรับสมาชิกนั้นจากอาร์เรย์ก่อนหน้า หากไม่ใช่คริสต์มาสสิ่งนี้จะเกิดข้อผิดพลาดพร้อมกับข้อผิดพลาดของดัชนี มิฉะนั้นจะพิมพ์Merry Christmasออกมา (เปลี่ยนวันที่ในสตริงเพื่อดูว่ามันทำงานอย่างไรในวันอื่น ๆ )


1

แบตช์ 66 ไบต์

@echo off
if %date:~0,5%==25/12 echo Merry Christmas&exit/b
if

บรรทัดใหม่ต่อท้ายมีความสำคัญเนื่องจากทำให้การแยกวิเคราะห์ifคำสั่งล้มเหลว คุณอาจต้องปรับแต่งการตรวจสอบวันที่เพื่อให้ตรงกับรูปแบบวันที่ท้องถิ่นของคุณ


1

Python 2, 69 77 75 หรือ72 70 Bytes

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
else:1/0

ถ้ามันไม่สำคัญว่ามันจะออกมาพร้อมกับข้อผิดพลาดเมื่อเป็นวันคริสต์มาสหรือไม่แล้ว:

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
1/0

แก้ไข:

ขอบคุณ @ Flp.Tkc สำหรับการชี้ให้เห็นว่าฉันจำเป็นต้องยกข้อผิดพลาด

-2 ไบต์จาก @Max สำหรับการชี้ให้เห็นเกี่ยวกับการลบโคลอนจากฟังก์ชั่น strftime


1
มันตั้งใจที่จะผิดพลาดถ้าไม่ใช่คริสมาสต์นี่แค่ออกจากปกติ
FlipTack

คุณสามารถบันทึก 2 ไบต์เพื่อลบโคลอน -> '% d% m' == '2512'
สูงสุด

@ Max ตกลงขอบคุณสำหรับเคล็ดลับ ฉันไม่เคยใช้ฟังก์ชั่นนี้มาก่อนดังนั้นฉันจึงไม่คิดที่จะทำเช่นนั้น
sonrad10

บันทึกอีก 3 ไบต์ด้วย: time.ctime () [6:10] == 'c 25'
สูงสุด

1

CJam, 28

et[C25]#1="Merry Christmas"/

ลองออนไลน์

คำอธิบาย:

et                   push an array of current [year month day hour ...]
[C25]                push the array [12 25] (C=12)
#                    find the position of the 2nd array within the first one
1=                   compare it with 1, resulting in 1 for 1 and 0 otherwise
"Merry Christmas"/   split "Merry Christmas" into pieces of that length
                      (it crashes if the length is 0)
                     at the end, all the pieces are concatenated
                      and printed automatically

0

C # .NET, 180 172 171 ไบต์

บันทึกแล้ว 8 ไบต์ขอบคุณ Kritixi Lithos

บันทึก 1 ไบต์ขอบคุณ Kritixi Lithos อีกครั้ง;)

namespace System{class P{static void Main(string[] args){var d=DateTime.Today;if(d.Day==25)if(d.Month>11){Console.Write("Merry Christmas!");return;}throw new Exception();}}}

ทางเลือกตัวแปร ungolfed:

namespace System //In System, so we don't have to use system.
{
    class Program
    {
        static void Main(string[] args) //Main function.
        {
            var d = DateTime.Today; //Get Today.
            if (d.Day == 25) if (d.Month == 12) //Day has to be 25th, Month has to be 12nd.
                {
                    Console.Write("Merry Christmas!"); return; //Prints.
                }
            throw new NotChristmasException(); //Errors/Crashes the program.
        }
    }
    class NotChristmasException : Exception { } //Holiday exception, hooray!
}

คุณไม่สามารถตั้งชื่อคลาสให้สั้นลงได้หรือไม่
Kritixi Lithos

คุณสามารถลบบางไบต์ได้โดยเปลี่ยน "NotChristmasException" ให้สั้นลง
Leo

@FishProHD NotChristmasExceptionเป็นเพียงในตัวแปร ungolfed
devRicher

@KritixiLithos ขอบคุณเปลี่ยนไป
devRicher

1
if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()หมายเหตุถ้ารวมงบและการกำจัดของการจัดฟันรอบConsole.Writeและแทนที่ ด้วยreturn elseนอกจากนี้var d=DateTime.Nowคุณยังสามารถกำจัดข้อยกเว้นการโยนด้วยบางทีargs[-1];หลังจากเปลี่ยนชื่อ args เป็นaเช่นa[-1];นี้ (ซึ่งไม่เหมือนกับการหารด้วยเลขศูนย์ที่ใช้ที่อื่น)
pinkfloydx33

0

Mathematica ขนาด 46 ไบต์

If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]

Nowบันทึกมากกว่า 2 ไบต์Today
Kelly Lowder

นอกจากนี้คุณต้องการความผิดพลาดในผลลัพธ์เท็จดังนั้นฉันคิดว่าสิ่งที่ชอบQuit[]หรือ1/0ควรจะพอเพียง
Kelly Lowder

0

เสียงกระเพื่อมสามัญ 140

(let((m(multiple-value-list(decode-universal-time(get-universal-time)))))(if(and(eq(nth 3 m)25)(eq(nth 4 m)12))(write"Merry Christmas")(c)))

เกิดปัญหากับฟังก์ชั่นที่ไม่ได้กำหนดหากวันที่ไม่ถูกต้อง


0

awk, 29 ไบต์ (ความยาว + ("Merry Christmas"))

v=1225==strftime("%m%d")||1/0

ใช้มัน

$ echo Merry xmas | awk 'v=1225==strftime("%m%d")||1/0'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: division by zero attempted

awkฤดูกาลอวยพรประปาไป strftimeผลตอบแทนเดือน + วัน (ตัวอย่าง1226) และถ้ามันตรงกับ1225 $0บันทึกได้รับการส่งออก ผลลัพธ์ของการเปรียบเทียบ1225==1226ถูกวางไว้ที่vvar ซึ่งใช้ในการหาร 1 หากการเปรียบเทียบวันที่ล้มเหลว


0

Haskell, 116

เกิดปัญหากับ "รูปแบบที่ไม่ครบถ้วนสมบูรณ์ในฟังก์ชั่น f" ถ้าไม่ใช่คริสมาสต์

import Data.Time
f(_,12,25)="Merry Christmas"
main=getZonedTime>>=print.f.toGregorian.localDay.zonedTimeToLocalTime

น่าเสียดายที่ไม่มีฟังก์ชั่นที่ช่วยให้คุณได้รับเวลาทันทีในรูปแบบที่มีประโยชน์ดังนั้นส่วนใหญ่จะเป็นการแปลงรูปแบบวันที่


0

C #, 122 104 ไบต์

บันทึกแล้ว 18 ไบต์ขอบคุณ @raznagul

using System;i=>{if(DateTime.Now.AddDays(7).DayOfYear==1)Console.Write("Merry Christmas");else{i/=0;};};

มันเพิ่ม 7 วันในวันปัจจุบันและตรวจสอบว่าเป็นวันแรกของปีหรือไม่ถ้าใช่มันจะแสดง "Merry Christmas" มิฉะนั้นจะหารด้วยศูนย์


returnไม่จำเป็น ใช้แทนi ()
raznagul

0

Ruby, 69 ไบต์

if Time.now.strftime("%j")=="360";puts "Merry Christmas";else 0/0;end

ทำงานในปี 2559 ไม่ได้แยกความแตกต่างระหว่างปีปกติและปีอธิกสุรทินอาจต้องมีการปรับสำหรับปีที่ไม่ได้ก้าวกระโดด


0

ForceLang, 180 ไบต์

set s datetime.toDateString datetime.now()
set t "Dec 25"
def c s.charAt i
def d t.charAt i
set i -1
label 1
set i 1+i
if i=6
 io.write "Merry Christmas!"
 exit()
if c=d
goto 1
z.z

(โปรดจำไว้ว่าdatetime.toDateStringขึ้นอยู่กับสถานที่ดังนั้นสิ่งนี้อาจไม่ทำงานขึ้นอยู่กับสถานที่ของคุณ)



0

บรรทัดคำสั่ง bash, 45 48 49 48 ไบต์

date +%m%d|grep -q 1225&&echo Merry Christmas||!-
date +%m%d|grep -q 1225||!-;echo Merry Christmas

คล้ายกับของมิตเชลล์สเปคเตอร์แต่ใช้grepในโหมดเงียบเพื่อตรวจสอบการจับคู่จากนั้น&&จะให้แน่ใจว่ามันพิมพ์บนความสำเร็จเท่านั้นและ||ทำให้มันค้นหาประวัติด้วย!-ซึ่งให้สิ่งนี้กับฉัน:

-bash: !-: event not found

และจะหยุดการทำงานตามที่!- ; echo fooแสดง bashเอกสารกล่าวว่า!-nหมายถึงลบคำสั่งปัจจุบันnดังนั้นบางทีมันจะถูกตีความว่าเป็น!-0ซึ่งจะช่วยให้ข้อผิดพลาดเหมือนกัน (และไม่ใช่ภาษาท้องถิ่น)


เป็นความคิดที่ดี แต่สิ่งนี้ไม่ได้ผิดพลาดในวันอื่น ๆ นอกเหนือจากวันคริสต์มาสอย่างที่ควรจะเป็นใช่ไหม?
Mitchell Spector

ตอนนี้มันทำให้เกิดข้อผิดพลาดเกี่ยวกับความล้มเหลว
Ken YN

1
ข้อความนี้พิมพ์ข้อความแสดงข้อผิดพลาด แต่ดำเนินการต่อ; มันไม่ได้ผิดพลาดจริง ๆ หากคุณเปลี่ยน ด้วย $ {} แล้วมันจะผิดพลาดจริง ๆ เพียงแค่พิมพ์ข้อความแสดงข้อผิดพลาดและดำเนินการต่อไป ฉันคิดว่าการขัดข้องต้องมีการยกเลิกโปรแกรม ณ เวลานั้น คุณสามารถบอกได้ว่าคุณไม่ได้ยุติโดยใส่ส่วนเสริม "; echo x" ในตอนท้ายและเห็นว่ามันถูกประหารชีวิต (นั่นเป็นเหตุผลที่ฉันใช้ $ {} แทนคำตอบของฉัน) ฉันไม่รู้ว่ามีลำดับตัวอักษร 1-2 หรือ 2 ตัวที่คุณสามารถใช้ได้ซึ่งจะทำให้เกิดความผิดพลาดจริง
Mitchell Spector

@MitchellSpector: ฉันพบตัวละคร 2 ตัว!
Ken YN

และตอนนี้กลับไปที่ 48 โดยการเปลี่ยนตรรกะเพื่อให้สามารถใช้แทน; ||
Ken YN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.