วันนี้ใน YOLD


15

ปฏิทิน Discordianเป็นปฏิทินทางเลือกที่ใช้โดย Discordians

  1. ปีแห่งความไม่ลงรอยกันมี 5 ฤดูกาลแต่ละ 73 วันยาวนาน: ความโกลาหลความไม่ลงรอยกันความสับสนระบบราชการและผลที่ตามมา
  2. สัปดาห์ discordian มี 5 วัน: Sweetmorn, Boomtime, Pungenday, Prickle-Prickle และ Set orange ทุกปีเริ่มต้นด้วย Sweetmorn (และใน Chaos)
  3. ทุกปี ourth (ซึ่ง Happe n s เพื่อให้สอดคล้องกับเกร็กoก้าวกระโดด rian อือR s), พิเศษ d Ay ถูกแทรกระหว่างความวุ่นวายโกลาหล 59 และ 60 เรียกว่าวันเซนต์ Tib ของ มันอยู่นอกสัปดาห์ Discordian ซึ่งหมายความว่าวันหลังจากวันเซนต์ Tib จะตั้งค่าสีส้มวันก่อน Prickle-Prickle
  4. ปฏิทิน Gregorian และ Discordian จัดเรียง; ทั้งสองเริ่มต้นในวันเดียวกันซึ่งเรียกว่าวันที่ 1 มกราคมในปฏิทินเกรโกเรียนและ Chaos 1 ใน Discordian one
  5. ปีแรกแห่งพระแม่แห่งความไม่ลงรอยกัน (YOLD 1) คือ 1166 ปีก่อนคริสตกาลในปฏิทินเกรกอเรียนซึ่งหมายความว่าปีนี้ (2017 AD) คือ YOLD 3183
  6. ปฏิทิน Discordian ก็มีวันหยุด แต่ก็ไม่สำคัญสำหรับความท้าทายนี้และคุณไม่ควรส่งออกหรืออะไรก็ตามที่เกี่ยวกับพวกเขา

เขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกหรือส่งกลับวันที่วันนี้ (ณ เวลาที่ดำเนินการ):

Today is Boomtime, the 16th day of Confusion in the YOLD 3183

รูปแบบคือ"Today is $day_of_the_week, the $ordinal day of $season in the YOLD $year"ที่ $ day_of_the_week เป็นตัวพิมพ์ใหญ่ (ตัวพิมพ์ใหญ่ - เล็ก) วันของสัปดาห์ $ ordinal คือวันของฤดูกาลในฐานะที่เป็นอันดับ (1, 2, 3, 4, ... ), $ season คือตัวพิมพ์ใหญ่ ฤดูกาล (ชื่อเรื่อง) และ $ ปีคือปี

หากโปรแกรมหรือฟังก์ชั่นของคุณถูกดำเนินการในวันเซนต์ Tib มันควรจะเอาท์พุทหรือผลตอบแทน"Today is St. Tib's Day in the YOLD $year"แทน

กฎ:

  • ช่องโหว่มาตรฐานใช้
  • หากภาษาที่คุณเลือกไม่มีวิธีในการรับวันที่ปัจจุบันอาจต้องใช้วันที่แบบคริสต์ศักราชปัจจุบันในรูปแบบที่เหมาะสมเป็นอินพุต
  • นี่คือซึ่งเป็นรหัสที่สั้นที่สุด (ต่อภาษา) จะชนะ
  • ช่องว่างต่อท้ายไม่เป็นไร
  • การใช้อักษรตัวพิมพ์ใหญ่มีความสำคัญ
  • การโทรddateในทางใดทางหนึ่งถูกแบน
  • โปรแกรมของคุณควรรับประกันว่าจะทำงานได้ตั้งแต่ 3067 ถึง 3265 YOLD (1901 ถึง 2099 AD) นอกช่วงนั้นจะสามารถให้ค่าที่ไม่ถูกต้อง

ดูสิ่งนี้ด้วย:


4
discord เป็นไคลเอนต์การส่งข้อความทันทีที่ยอดเยี่ยม
Okx

1
ฉันคิดว่าวันนี้เป็นวันที่ 16 ของความสับสน ตัวอย่างแสดงวันที่ใด
user202729


1
@ user202729 ใช่วันที่ในตัวอย่างมาจากตอนที่ฉันเขียนความท้าทายในตอนแรกฉันจะอัปเดตให้แสดงวันที่วันนี้ซึ่งเป็นวันที่ 16 แห่งความสับสน
L3viathan

1
@ L3viathan ในกรณีนั้น (สำหรับผู้ที่ใช้ภาษาที่มีภาษาพื้นเมืองขนาดใหญ่) คุณช่วยอธิบายได้อย่างไร) วิธีจัดการกับการเปลี่ยนศตวรรษของปีที่ไม่ได้กระโดดปีในแคลเกรเรเรียนว่า "ทุก ๆ ปีที่ 4" ด้วย "สอดคล้องกับเกรกอเรียน" ข) วิธีจัดการกับปีก่อนนำแคลเกรียน ฉันแนะนำช่วงสูงสุดที่ถูกกำหนดโดยสเป็คปัจจุบันของคุณอย่างเหมาะสม หากคุณปฏิเสธสิ่งนี้คุณควรกำหนดว่าโปรแกรมควรทำอะไรนอกช่วงนั้น นอกจากนี้คุณควรหลีกเลี่ยงการยกเลิกคำตอบที่มีอยู่ en.wikipedia.org/wiki/Gregorian_calendar
Level River St

คำตอบ:


5

Mathematica, 403 401 ไบต์

เวอร์ชันที่จะนับจำนวนไบต์: (ลบช่องว่างและบรรทัดใหม่ - น่าเสียดายที่ส่วนนี้ค่อนข้างยาก)

"Setting Orange"["Sweetmorn","Boomtime","Pungenday","Prickle-Prickle"][[#~Mod~5]]<>", the "<>SpokenString@p[[Mod[#,73,1]]]~StringExtract~2<>" day of "<>{"Chaos","Discord","Confusion","Bureaucracy","The Aftermath"}[[⌈#/73⌉]]&;
Row@{"Today is ",#2," in the YOLD ",1166+#}&[#,If[4∣#,If[#2>60,%[#2-1],If[#2<60,%@#2,"St.Tib's Day"]],%@#2]]&@@FromDigits/@DateString@"ISOOrdinalDate"~StringSplit~"-"

รุ่นที่อ่าน:

"Setting Orange"["Sweetmorn", "Boomtime", "Pungenday", 
     "Prickle-Prickle"][[#~Mod~5]] <>
   ", the " <>
   SpokenString@p[[Mod[#, 73, 1]]]~StringExtract~2 <>
   " day of " <>
   {"Chaos", "Discord", "Confusion", "Bureaucracy", 
     "The Aftermath"}[[Ceiling[#/73]]] &;
Row@{
      "Today is ",
      #2,
      " in the YOLD ",
      1166 + #
      } &[#,
   If[4 ∣ #,
    If[#2 > 60, %[#2 - 1],
     If[#2 < 60, %@#2, "St.Tib's Day"]
     ], %@#2
    ]] & @@ FromDigits /@ DateString@"ISOOrdinalDate"~StringSplit~"-"

คำตอบที่สามารถทดสอบได้ด้วยวันโดยพลการโดยการแทนที่DateString@"ISOOrdinalDate"โดยDateString[{year,month,day},"ISOOrdinalDate"]สำหรับyear, monthและdayแทนที่ด้วยหมายเลข


ฉันจะทดสอบรหัส Mathematica ได้อย่างไร
L3viathan

6
"ไม่มี builtin หรือ?"
Jonathan Allan

4

Python 2, 423 ไบต์

เวอร์ชั่นสั้น:

import time
y,d=time.gmtime()[0::7]
t="Today is "
o=" in the YOLD "+`y+1166`
if y%4<1 and d>59:
 if d==60:print"%sSt. Tib's Day%s%d"%(t,o);quit()
 d-=1
s,e=divmod(d-1,73)
print t+["Sweetmorn","Boomtime","Pungenday","Prickle-Prickle","Setting Orange"][(d-1)%5]+", the %d%s day of %s"%(e+1,'tsnrthtddh'[min(e*(e/10-1 and 1)%10,4)::5],["Chaos","Discord","Confusion","Bureaucracy","The Aftermath"][s]+o)

แบบฟอร์มที่ยาวและอ่านได้มากขึ้น:

import time

# now = time.strptime("2017.06.11", "%Y.%m.%d")  # for testing
now = time.gmtime()
year, day_of_year = now[0::7]
leapyear = year % 4 < 1
today = "Today is "
yold = " in the YOLD " + `y+1166`

if leapyear and day_of_year>59:
    if day_of_year==60:
        print "%sSt. Tib's Day%s%d"% (today, yold)
        quit()  # dirty, but ... hey.
    day_of_year -= 1
season, day = divmod(day_of_year-1,73)

print today + \
    ["Sweetmorn", "Boomtime", "Pungenday", "Prickle-Prickle", "Setting Orange"][(day_of_year-1)%5] + \
    ", the %d%s day of %s" % (
        day+1,
        'tsnrthtddh'[min(day*(day/10-1 and 1)%10,4)::5],
        ["Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"][season] + yold
    )

อัปเดต:แก้ไขด้วยความช่วยเหลือของ @Neil และ @EriktheOutgolfer ที่ยอดเยี่ยม แต่คำตอบ @Jonathans นั้นสั้นกว่ามาก


2
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ!
Dada

3
สิ่งนี้สร้างคำต่อท้ายที่ถูกต้องสำหรับ 21, 22, 23 หรือไม่ ... 73 @ L3viathan y%4<1จะทำงานได้ แต่ฉันไม่คิดว่า1-y%4จะ
Neil


@EriktheOutgolfer คุณไม่สามารถบันทึกอีก 4 ไบต์โดยกำจัดeตัวแปรได้หรือไม่
Neil

ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี ฉันได้รับการวางแผนที่จะให้คุณบิตออกที่นี่และมี แต่สังเกตเห็นและการแก้ไขปัญหาต่อท้ายและแข็งแรงเล่นกอล์ฟรหัสมากกว่าที่ฉันคิดว่าฉันจะดังนั้นผมจึงจบลงด้วยการส่งรุ่นของตัวเอง
Jonathan Allan

2

Python 2 , 346 ไบต์

หมายเหตุ:นี่คือสนามกอล์ฟ (และแก้ไข) ของคำตอบของ jammon - ฉันคิดว่าฉันต้องการส่งความคิดเห็น แต่ฉันเปลี่ยนไปเล็กน้อยในท้ายที่สุด (รวมทั้งวันต่อท้ายได้รับการแก้ไขแล้ว)

import time
y,d=time.gmtime()[::7]
t="Today is %s in the YOLD "+`y+1166`
r=y%4<1<59<d
d-=r+1
e=d%73
print t%[["Sweetmorn","Boomtime","Pungenday","Prickle-Prickle","Setting Orange"][d%5]+", the %d%s day of "%(e+1,'snrttddh'[min(e%10+3*(e/9==1),3)::4])+["Chaos","Discord","Confusion","Bureaucracy","The Aftermath"][d/73],"St. Tib's Day"][(r*d)==58]

ลองออนไลน์! หรือดูบางวันที่การทดสอบฮาร์ดโค้ด


ฉันไม่คิดว่าจะe%10*(e/9!=1)ทำงานหรือ
Neil

Nope แล้วมันจะพิมพ์11st, 12stและ13st (เมื่อe/9เป็น 1 มันจะคูณด้วยศูนย์และminจะเลือกศูนย์นั้น)
Jonathan Allan

2

JavaScript (ES6), 387 380 ไบต์

f=(d=new Date(),a=d.getDate()-1,y=d.getFullYear()+1166)=>d.getMonth()?f(d,a+d.getDate(d.setDate(0))):`Today is ${y%4-2|a<59||59-a--?`Sweetmorn,Boomtime,Pungenday,Prickle-Prickle,Setting Orange`.split`,`[a%5]+`, the ${d=a%73+1}${[,`st`,`nd`,`rd`][d-10-(d%=10)&&d]||`th`} day of `+`Chaos,Discord,Confusion,Bureaucracy,The Aftermath`.split`,`[a/73|0]:`St. Tib's Day`} in the YOLD `+y

รับพารามิเตอร์ตัวเลือกวันที่ Ungolfed:

function discordian(date) {
    var a = date.getDate();
    while (date.getMonth()) {
        date.setDate(0);
        a += date.getDate();
    }
    if (date.getYear() % 4 == 0) {
        if (a == 60) return "Today is St. Tib's day in the YOLD " + (date.getYear() + 1166);
        if (a > 60) a--;
    }
    var weekday = ['Setting Orange', 'Sweetmorn', 'Boomtime', 'Pungenday', 'Prickle-Prickle'][a % 5];
    var seasonday = (a - 1) % 73 + 1;
    var ordinal = seasonday % 10 == 1 && seasonday != 11 ? 'st' : seasonday % 10 == 2 && seasonday != '12' : 'nd' : seasonday % 10 == 3 && seasonday != '13' ? 'rd' : 'th';
    var season = ['Chaos', 'Discord', 'Confusion', 'Bureaucracy', 'The Aftermath'][Math.floor((a - 1) / 73)];
    return "Today is " + weekday + ", the " + seasonday + ordinal + " day of " + season + " in the YOLD " + (date.getYear() + 1166);
}

1

C #, 392 ไบต์

using System;s=>{var t=DateTime.Now;int d=t.DayOfYear,y=t.Year,m=d%73;return"Today is "+(DateTime.IsLeapYear(y)&d==60?"St. Tib's Day":"Sweetmorn|Boomtime|Pungenday|Prickle-Prickle|Setting Orange".Split('|')[d%5-1]+", the "+ m+(m<2|m==21|m>30?"st":m==2|m==22?"nd":m==3|m==23?"rd":"th")+" day of "+"Chaos|Discord|Confusion|Bureaucracy|The Aftermath".Split('|')[d/73])+" in the YOLD "+(y+1166);}

เวอร์ชันเต็ม / ฟอร์แมต:

using System;

class P
{
    static void Main()
    {
        Func<string, string> f = s =>
        {
            var t = DateTime.Now;
            int d = t.DayOfYear, y = t.Year, m = d % 73;

            return "Today is " + (DateTime.IsLeapYear(y) & d == 60
                   ? "St. Tib's Day"
                   : "Sweetmorn|Boomtime|Pungenday|Prickle-Prickle|Setting Orange".Split('|')[d % 5 - 1] +
                     ", the " +
                     m +
                     (m < 2 | m == 21 | m > 30 ? "st" : m == 2 | m == 22 ? "nd" : m == 3 | m == 23 ? "rd" : "th") +
                     " day of " +
                     "Chaos|Discord|Confusion|Bureaucracy|The Aftermath".Split('|')[d / 73])
                   + " in the YOLD " + (y + 1166);
        };

        Console.WriteLine(f(null));

        Console.ReadLine();
    }
}

1

Pyth , 295 ไบต์

J.d2A<J2Kt+s<+,31 28*2t*3,30 31tH@J2=Y&&!%G4<58K!qH3=N%K73%"Today is %s in the YOLD %d",@,++@c"SweetmornZBoomtimeZPungendayZPrickle-PrickleZSetting Orange"\Z%K5%", the %d%s day of ",+N1@c"stndrdth"2h.mb,3+%NT*3q1/N9@c." yNlSFk.»&ô?Z#u!%ô6'mçM«_ôvëû¹)+¬<"\Z/K73"St. Tib's Day"q*YK59+G1166

หมายเหตุ: มีไบนารีอาจไม่ปลอดภัยที่จะคัดลอกวางจากที่นี่ การคัดลอกวางจาก TIO ควรใช้งานได้

ลองออนไลน์!

คุณสามารถทดสอบวันที่โดยพลการโดยแทนที่.d2ที่จุดเริ่มต้นด้วย 3-tuple ของ (ปี, เดือน, วัน) ดังนี้:(2020 2 29)เช่นนี้

อันนี้น่ารำคาญเล็กน้อยเนื่องจาก Pyth ไม่มีวิธีใดที่จะได้ "วันแห่งปี" ดังนั้นฉันต้องคำนวณด้วยตัวเอง

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