Hôm nay trong YÊN


15

Các lịch Discordian là một lịch thay thế được sử dụng bởi Discordians.

  1. Năm bất hòa có 5 mùa, mỗi mùa kéo dài 73 ngày: Hỗn loạn, Bất hòa, Nhầm lẫn, Quan liêu, và Hậu quả.
  2. Tuần lễ bất hòa có 5 ngày: Sweetmorn, Boomtime, Pungenday, Prickle-Prickle và Set Orange. Mỗi năm bắt đầu với Sweetmorn (và trong Chaos).
  3. Mỗi f năm ourth (mà happe n s để phù hợp với Greg o Rian bước nhảy vọt yea r s), thêm một d ay được chèn giữa Chaos 59 và Chaos 60 được gọi là Ngày Thánh Tib của . Nó nằm ngoài tuần lễ Discordian, có nghĩa là ngày sau Ngày Thánh Tib sẽ là Set Orange, một ngày trước Prickle-Prickle.
  4. Lịch Gregorian và Discordian xếp hàng; cả hai bắt đầu vào cùng một ngày, được gọi là ngày 1 tháng 1 theo lịch Gregorian và Chaos 1 trong Discordian.
  5. Năm đầu tiên của Đức Mẹ bất hòa (YÊN 1) là năm 1166 trước Công nguyên theo lịch Gregorian, nghĩa là năm nay (2017 sau Công nguyên) là YÊN 3183.
  6. Lịch Discordian cũng có ngày lễ, nhưng chúng không quan trọng đối với thử thách này và bạn không nên xuất chúng hoặc bất cứ điều gì về chúng.

Viết chương trình hoặc hàm xuất hoặc trả về ngày hôm nay (tại thời điểm thực hiện):

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

Định dạng là "Today is $day_of_the_week, the $ordinal day of $season in the YOLD $year" , trong đó $ day_of_the_week là ngày viết hoa (trường hợp tiêu đề) trong tuần, $ ordinal là ngày của mùa như một thứ tự (thứ 1, thứ 2, thứ 3, thứ 4, ...), $ season là chữ viết hoa (trường hợp tiêu đề) mùa, và $ năm là năm.

Nếu chương trình hoặc chức năng của bạn được thực thi vào Ngày St. Tib, thay vào đó, nó sẽ xuất hoặc trả lại "Today is St. Tib's Day in the YOLD $year" .

Quy tắc:

  • Tiêu chuẩn áp dụng.
  • Nếu ngôn ngữ bạn chọn không có cách nào để có được ngày hiện tại, nó cũng có thể lấy ngày Gregorian hiện tại ở bất kỳ định dạng hợp lý nào làm đầu vào.
  • Đây là , mã ngắn nhất (theo ngôn ngữ) sẽ thắng.
  • Trailing khoảng trắng là được.
  • Vấn đề vốn.
  • Gọi ddatebằng mọi cách đều bị cấm
  • Chương trình của bạn phải được đảm bảo hoạt động từ 3067 đến 3265 YOLD (1901 đến 2099 AD), ngoài phạm vi đó, nó có thể đưa ra các giá trị không chính xác

Xem thêm:


4

1
Tôi nghĩ hôm nay là ngày thứ 16 của sự nhầm lẫn? Ví dụ đại diện cho ngày nào?
dùng202729


1
@ user202729 Vâng, ngày trong ví dụ là từ khi tôi viết thử thách ban đầu, tôi sẽ cập nhật nó để hiển thị ngày hôm nay, đó thực sự là ngày thứ 16 của sự nhầm lẫn.
L3viathan

1
@ L3viathan trong trường hợp đó (đối với những người sử dụng ngôn ngữ có loại bản địa lớn) bạn có thể làm rõ a) cách xử lý các năm của thế kỷ không phải là năm nhuận trong calregorian như "mỗi năm thứ 4" của mâu thuẫn với "căn chỉnh với gregorian" b) cách xử lý nhiều năm trước khi giới thiệu cal gregorian. Tôi đã đề xuất phạm vi tối đa được xác định chính xác bởi thông số kỹ thuật hiện tại của bạn. Nếu bạn từ chối điều này, bạn nên xác định chương trình nên làm gì ngoài phạm vi đó. Ngoài ra, bạn nên tránh làm mất hiệu lực câu trả lời hiện có. vi.wikipedia.org/wiki/Gregorian_calWiki
Level River St

Câu trả lời:


5

Mathematica, 403 401 byte

Phiên bản để đếm số byte: (loại bỏ khoảng trắng và dòng mới - thật không may phần này khá khó)

"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~"-"

Phiên bản để đọc:

"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~"-"

Câu trả lời có thể được thử nghiệm với ngày tùy ý bằng cách thay thế DateString@"ISOOrdinalDate"bằng cách DateString[{year,month,day},"ISOOrdinalDate"]cho year, monthdaythay thế bằng con số.


Làm thế nào tôi có thể kiểm tra mã Mathicala?
L3viathan

6
"Không có nội dung?"
Jonathan Allan

4

Python 2, 423 byte

Phiên bản ngắn:

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)

Hình thức dài hơn, dễ đọc hơn:

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
    )

Cập nhật: Đã sửa với sự trợ giúp của @Neil và @EriktheOutgolfer tuyệt vời. Nhưng câu trả lời @Jonathans ngắn hơn nhiều.


2
Chào mừng bạn đến với Câu đố lập trình & Code Golf!
Dada

3
Điều này có tạo ra hậu tố đúng cho các ngày 21, 22, 23 ... 73 không? @ L3viathan y%4<1sẽ hoạt động, nhưng tôi không nghĩ là 1-y%4sẽ như vậy.
Neil


@EriktheOutgolfer Bạn không thể lưu thêm 4 byte bằng cách loại bỏ ebiến?
Neil

Chào mừng đến với PPCG! Đẹp bài đầu tiên. Tôi đã dự định cung cấp cho bạn một chút ở đây và ở đó, nhưng nhận thấy và khắc phục vấn đề hậu tố và đánh golf mã nhiều hơn tôi nghĩ tôi sẽ kết thúc việc gửi phiên bản của riêng tôi.
Jonathan Allan

2

Python 2 , 346 byte

Lưu ý: Đây là một câu trả lời (và cách khắc phục) câu trả lời của jammon - Ban đầu tôi nghĩ rằng tôi đã gửi một nhận xét, nhưng cuối cùng tôi đã thay đổi một chút (cộng với các hậu tố ngày đã được sửa).

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]

Hãy thử trực tuyến! hoặc xem một số ngày kiểm tra mã hóa cứng .


Tôi không cho là e%10*(e/9!=1)làm việc?
Neil

Nope, sau đó nó sẽ in 11st, 12st13st(khi e/9là 1 nó sẽ nhân với zero và minsẽ chọn hướng đi đó không)
Jonathan Allan

2

JavaScript (ES6), 387 380 byte

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

Có một tham số ngày tùy chọn. Ung dung:

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 byte

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);}

Phiên bản đầy đủ / được định dạng:

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

Bình thường , 295 byte

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

Lưu ý: chứa nhị phân, có thể không an toàn để sao chép-dán từ đây. Sao chép từ TIO sẽ hoạt động.

Hãy thử trực tuyến!

Bạn có thể kiểm tra ngày tùy ý bằng cách thay thế .d2lúc bắt đầu bằng 3 tuple (năm, tháng, ngày) như thế này : (2020 2 29).

Điều này hơi khó chịu vì Pyth không có cách nào để có được "ngày của năm" nên tôi phải tự tính toán.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.