Bugün YOLD'da


15

Discordian takvim Discordians tarafından kullanılan alternatif bir takvimdir.

  1. Tutarsız yıl, her biri 73 gün süren 5 mevsim vardır: Kaos, Uyuşmazlık, Karışıklık, Bürokrasi ve Sonrası.
  2. Tutarsız haftanın 5 günü vardır: Sweetmorn, Boomtime, Pungenday, Prickle-Prickle ve Setting Orange. Her yıl Sweetmorn (ve Kaos'ta) ile başlar.
  3. Her ön ourth yıl (Happe n Greg ile hizalamak s o rian sıçrama evet r ekstra, s) d ay kaos 59 ve adı kaos 60 arasına sokulur St TIB Günü . Discordian haftasının dışında, yani St. Tib's Günü'nden sonraki gün Prickle-Prickle'den bir gün önce Portakal Ayarı olacak.
  4. Gregoryen ve Uyumsuz takvimler sıralanır; her ikisi de Gregoryen takviminde 1 Ocak olarak adlandırılan aynı gün başlar ve Tuhaf olanda Kaos 1 olarak adlandırılır.
  5. Uyuşmazlığımızın İlk Yılı (YOLD 1) Gregoryen takviminde MÖ 1166 idi, yani bu yıl (MS 2017) YOLD 3183'tür.
  6. Discordian takviminin de tatilleri var, ancak bu meydan okuma için önemli değiller ve onları ya da onlar hakkında herhangi bir şeyi çıkarmamalısınız.

Bugünün tarihini (yürütme sırasında) veren veya döndüren bir program veya işlev yazın:

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

Biçim, "Today is $day_of_the_week, the $ordinal day of $season in the YOLD $year"$ day_of_the_week öğesinin haftanın büyük harfli (başlık-vakası) günü, $ ordinal ise sezonun sıralı gün olduğu gündür (1., 2., 3., 4., ...), $ sezonu büyük harfle yazılır (başlık-dava) sezonu ve $ yıl yıl.

Programınız veya işleviniz St. Tib's Günü'nde yürütülürse, bunun yerine çıktı almalı veya geri dönmelidir "Today is St. Tib's Day in the YOLD $year".

Kurallar:

  • Standart boşluklar geçerlidir.
  • Seçtiğiniz dilin geçerli tarihi almanın bir yolu yoksa, geçerli Gregoryen tarihini herhangi bir makul biçimde girdi olarak alabilir.
  • Bu , dil başına en kısa kod kazanır.
  • Sondaki boşluk tamam.
  • Büyük harf kullanımı önemlidir.
  • ddateHerhangi bir şekilde arama yasaklandı
  • Programınızın 3067 ila 3265 YOLD (1901 ila 2099 AD) arasında çalışacağı garanti edilmelidir, bu aralığın dışında yanlış değerler verebilir

Ayrıca bakınız:


4

1
Bugün karışıklığın 16. günü olduğunu düşünüyorum. Örnek hangi tarihi temsil ediyor?
user202729


1
@ user202729 Evet, örnekteki tarih, meydan okumayı ilk yazdığım zamandan, bugünkü tarihi göstermek için güncelleyeceğim, ki bu gerçekten de Karışıklık'nın 16. günü.
L3viathan

1
@ L3viathan bu durumda (büyük yerel tipte bir dil kullananlar için) a) uyumsuz yüzyıllar arasındaki uyumsuz yüzyılların dönüşünü nasıl uyumsuz çelişkilerin "her 4 yılda bir" olarak ele alacağınızı açıklayabilirsiniz "yunanca ile hizalar" b) yunanca cal'ın tanıtılmasından yıllar önce nasıl ele alınacağı. Mevcut spesifikasyonunuz tarafından düzgün bir şekilde tanımlanan maksimum aralığı öneriyordum. Bunu reddederseniz, programın bu aralık dışında ne yapması gerektiğini tanımlamanız gerekir. Ayrıca mevcut cevabı geçersiz kılmaktan da kaçınmalısınız. tr.wikipedia.org/wiki/Gregorian_calendar
Level River St

Yanıtlar:


5

Mathematica, 403401 bayt

Bayt sayısını saymak için sürüm: (boşluklar ve yeni satırlar kaldırıldı - ne yazık ki bu bölüm oldukça zor)

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

Okunacak sürüm:

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

Cevap değiştirerek keyfi tarih ile test edilebilir DateString@"ISOOrdinalDate"tarafından DateString[{year,month,day},"ISOOrdinalDate"]için year, monthve daysayı ile değiştirilir.


Mathematica kodunu nasıl test edebilirim?
L3viathan

6
"Yerleşik değil misin?"
Jonathan Allan

4

Python 2, 423 Bayt

Kısa versiyon:

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)

Daha uzun, daha okunabilir form:

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
    )

Güncelleme: @Neil ve @EriktheOutgolfer yardımıyla düzeltildi. Ama @Jonathans'ın cevabı çok daha kısa.


2
Programlama Bulmacaları ve Kod Golf hoş geldiniz!
Dada

3
Bu 21., 22., 23. ... 73. için doğru soneki mi üretiyor? @ L3viathan y%4<1işe yarar , ama sanmıyorum 1-y%4.
Neil


@EriktheOutgolfer eDeğişkeni ortadan kaldırarak 4 bayt daha kaydedemez misiniz ?
Neil

PPCG'ye Hoşgeldiniz! Güzel ilk gönderi. Ben oldu burada size biraz uzakta vermek planlayan ve orada fark ve son ek sorununu sabit ve ben bu yüzden kendi versiyonunu göndererek sona erdi düşündüm daha fazla kod golfed ama.
Jonathan Allan

2

Python 2,346 bayt

Not: Bu jammon cevabının bir golf (ve düzeltme) - Ben aslında bir yorum göndereceğini düşündüm, ama sonunda biraz değişti (artı gün sonekleri düzeltildi).

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]

Çevrimiçi deneyin! veya bazı sabit kodlu test tarihlerine bakın .


Sanırım e%10*(e/9!=1)işler değil mi?
Neil

Hayır, o zaman baskı olur 11st, 12stve 13st(ne zaman e/9sıfır ile çarpın olur 1'dir ve minalacağını sıfır)
Jonathan Allan

2

JavaScript (ES6), 387 380 bayt

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

İsteğe bağlı bir tarih parametresi alır. 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 bayt

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

Tam / Biçimlendirilmiş sürüm:

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 bayt

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

Not: ikili dosya içerir, buradan kopyalayıp yapıştırmak güvenli olmayabilir. TIO'dan kopya yapıştırma çalışmalıdır.

Çevrimiçi deneyin!

.d2Başlangıçta 3 parçalı (yıl, ay, gün) ile değiştirerek keyfi tarihleri ​​test edebilirsiniz :(2020 2 29) .

Pyth "yılın" almak için hiçbir yolu olmadığı için bu biraz sinir bozucu oldu, bu yüzden kendim hesaplamak zorunda kaldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.