今日はYOLDで


15

ディスコルディア暦カレンダー Discordiansによって使用される別のカレンダーです。

  1. Discordian年には5つの季節があり、それぞれ73日続きます:Chaos、Discord、Confusion、Bureaucracy、The Aftermath。
  2. Discordian週には5日間があります:Sweetmorn、Boomtime、Pungenday、Prickle-Prickle、およびSetting Orange。毎年、Sweetmorn(およびChaos)で始まります。
  3. すべてのF ourth年(そのhappe Nグレッグと整列に対するS oをリアンうるういやのR s)は、余分のDと呼ばれるAYがカオス59とカオス60との間に挿入されているセントティブの日。それはディスコルディアン週の外にあります。つまり、聖チブの日の翌日は、プリクル・プリクルの前日であるオレンジになります。
  4. グレゴリオ暦とディスコルディアン暦が並んでいます。どちらもグレゴリオ暦で1月1日と呼ばれる同じ日に始まり、ディスコディアン暦でカオス1と呼ばれます。
  5. 不和の聖母の最初の年(YOLD 1)は、グレゴリオ暦で紀元前1166年でした。つまり、今年(2017 AD)はYOLD 3183です。
  6. ディスコディアンカレンダーにも休日がありますが、このチャレンジにとって重要ではないため、休日やそれらに関する情報を出力しないでください。

今日の日付(実行時)を出力または返すプログラムまたは関数を作成します。

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は大文字です(タイトルケース)シーズン、$ yearは年です。

プログラムまたは関数がSt. Tib's Dayに実行される場合、代わりにoutputまたはreturnが返され"Today is St. Tib's Day in the YOLD $year"ます。

ルール:

  • 標準の抜け穴が適用されます。
  • 選択した言語に現在の日付を取得する方法がない場合は、現在のグレゴリオ暦の日付を適切な形式で入力として使用することもできます。
  • これはで、最短のコード(言語ごと)が勝ちます。
  • 末尾の空白は問題ありません。
  • 大文字は重要です。
  • ddateあらゆる方法での呼び出しは禁止されています
  • プログラムは、3067〜3265 YOLD(1901〜2099 AD)で動作することが保証されている必要があります。その範囲外では、不正な値を与える可能性があります

こちらもご覧ください:


4
不和は、クールなインスタントメッセージングクライアント
Okx

1
今日は混乱の16日目だと思う?例は何日を表しますか?
user202729


1
@ user202729はい、例の日付は最初にチャレンジを書いたときのものです。今日の日付を表示するように更新します。これは実際に混乱の16日目です。
L3viathan

1
その場合の@ L3viathan(大きなネイティブタイプの言語を使用している場合)を明確にすることができますa)グレゴリオ暦のle年ではない世紀の変わり目をディスコディアンcal矛盾の「4年ごと」として処理する方法「グレゴリオ暦に沿って」b)グレゴリオ暦の導入の何年も前に処理する方法。現在の仕様で適切に定義されている最大範囲を提案していました。これを拒否する場合は、プログラムがその範囲外で行うべきことを定義する必要があります。また、既存の回答を無効にしないでください。en.wikipedia.org/wiki/Gregorian_calendar
レベルリバーセント

回答:


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"]のためyearmonthそしてday数字に置き換えます。


Mathematicaコードをテストするにはどうすればよいですか?
L3viathan

6
「組み込み機能はありませんか?」
ジョナサンアラン

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
プログラミングパズルとコードゴルフへようこそ!
ダダ

3
これにより、21番目、22番目、23番目... 73番目の正しい接尾辞が生成されますか?@ L3viathan y%4<1は動作しますが、動作しないと思います1-y%4
ニール


@EriktheOutgolfer e変数を削除してさらに4バイト節約できませんか?
ニール

PPCGへようこそ!素敵な最初の投稿。私あちこちで少しお返しするつもりでしたが、接尾辞の問題に気づき、修正し、思った以上にコードをゴルフして、自分のバージョンを提出することにしました。
ジョナサンアラン

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)動作しないと思いますか?
ニール

いいえ、それは印刷し11st12stそして13st(場合e/91であり、それはゼロによる乗算なり、minゼロことを選ぶだろう)
ジョナサンアラン

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

オプションの日付パラメーターを取ります。ゴルフをしていない:

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タプル(年、月、日)に置き換えることにより、任意の日付をテストできます(2020 2 29)

Pythには「曜日」を取得する方法がないため、これは少し面倒で、自分で計算する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.