Discordian date: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js compatible
(Add CLU)
m (→‎{{header|Phix}}: added syntax colouring, marked p2js compatible)
Line 3,627:
 
=={{header|Phix}}==
<!--<lang Phix>(phixonline)-->
<lang Phix>constant seasons = {"Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"}
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
constant weekday = {"Sweetmorn", "Boomtime", "Pungenday", "Prickle-Prickle", "Setting Orange"}
<span style="color: #008080;">constant</span> <span style="color: #000000;">seasons</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Chaos"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Discord"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Confusion"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Bureaucracy"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"The Aftermath"</span><span style="color: #0000FF;">},</span>
constant apostle = {"Mungday", "Mojoday", "Syaday", "Zaraday", "Maladay"}
<span style="color: #000000;">weekday</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Sweetmorn"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Boomtime"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Pungenday"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Prickle-Prickle"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Setting Orange"</span><span style="color: #0000FF;">},</span>
constant holiday = {"Chaoflux", "Discoflux", "Confuflux", "Bureflux", "Afflux"}
<span style="color: #000000;">apostle</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Mungday"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Mojoday"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Syaday"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Zaraday"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Maladay"</span><span style="color: #0000FF;">},</span>
<span style="color: #000000;">holiday</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Chaoflux"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Discoflux"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Confuflux"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Bureflux"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Afflux"</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">discordianDate</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">dt</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dt</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">leap</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">is_leap_year</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">doy</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">day_of_year</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">dyear</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1166</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">leap</span> <span style="color: #008080;">and</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">and</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">=</span><span style="color: #000000;">29</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">return</span> <span style="color: #008000;">"St. Tib's Day, in the YOLD "</span> <span style="color: #0000FF;">&</span> <span style="color: #000000;">dyear</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">leap</span> <span style="color: #008080;">and</span> <span style="color: #000000;">doy</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">60</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">doy</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">dsday</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">doy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">73</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">dseason</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">(</span><span style="color: #000000;">doy</span><span style="color: #0000FF;">/</span><span style="color: #000000;">73</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">dsday</span><span style="color: #0000FF;">=</span><span style="color: #000000;">5</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">apostle</span><span style="color: #0000FF;">[</span><span style="color: #000000;">dseason</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">&</span> <span style="color: #008000;">", in the YOLD "</span> <span style="color: #0000FF;">&</span> <span style="color: #000000;">dyear</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">dsday</span><span style="color: #0000FF;">=</span><span style="color: #000000;">50</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">holiday</span><span style="color: #0000FF;">[</span><span style="color: #000000;">dseason</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">&</span> <span style="color: #008000;">", in the YOLD "</span> <span style="color: #0000FF;">&</span> <span style="color: #000000;">dyear</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">dseas</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">seasons</span><span style="color: #0000FF;">[</span><span style="color: #000000;">dseason</span><span style="color: #0000FF;">],</span>
<span style="color: #000000;">dwday</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">weekday</span><span style="color: #0000FF;">[</span><span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">doy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%s, day %d of %s in the YOLD %s"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">dwday</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dsday</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dseas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dyear</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #000080;font-style:italic;">-- test code</span>
function discordianDate(sequence dt)
string dyear, dseas, dwday
integer leap, doy, dsday,dseason
integer {y,m,d} = dt
dyear = sprintf("%d",y+1166)
leap = is_leap_year(y)
if leap and m=2 and d=29 then
return "St. Tib's Day, in the YOLD " & dyear
end if
<span style="color: #004080;">sequence</span> <span style="color: #000000;">dt</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">2015</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}</span>
doy = day_of_year(y,m,d)-1
<span style="color: #008080;">include</span> <span style="color: #004080;">timedate</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
if leap and doy>=60 then
<span style="color: #004080;">atom</span> <span style="color: #000000;">oneday</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">timedelta</span><span style="color: #0000FF;">(</span><span style="color: #000000;">days</span><span style="color: #0000FF;">:=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
doy -= 1
<span style="color: #7060A8;">set_timedate_formats</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"DD/MM/YYYY"</span><span style="color: #0000FF;">})</span>
end if
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">5</span> <span style="color: #008080;">do</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s: %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">format_timedate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">),</span><span style="color: #000000;">discordianDate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">)})</span>
dsday = remainder(doy,73)+1
<span style="color: #000000;">dt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">adjust_timedate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">,</span><span style="color: #000000;">oneday</span><span style="color: #0000FF;">*</span><span style="color: #000000;">72</span><span style="color: #0000FF;">)</span>
dseason = floor(doy/73+1)
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s: %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">format_timedate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">),</span><span style="color: #000000;">discordianDate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">)})</span>
if dsday=5 then
<span style="color: #000000;">dt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">adjust_timedate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dt</span><span style="color: #0000FF;">,</span><span style="color: #000000;">oneday</span><span style="color: #0000FF;">)</span>
return apostle[dseason] & ", in the YOLD " & dyear
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
elsif dsday=50 then
end for<!--</lang>-->
return holiday[dseason] & ", in the YOLD " & dyear
end if
dseas = seasons[dseason]
dwday = weekday[remainder(doy,5)+1]
return sprintf("%s, day %d of %s in the YOLD %s", {dwday, dsday, dseas, dyear})
end function</lang>
test code
<lang Phix>sequence dt = {2015,1,1,0,0,0,0,0}
include timedate.e
atom oneday = timedelta(days:=1)
set_timedate_formats({"DD/MM/YYYY: "})
for i=1 to 5 do
?format_timedate(dt)&discordianDate(dt)
dt = adjust_timedate(dt,oneday*72)
?format_timedate(dt)&discordianDate(dt)
dt = adjust_timedate(dt,oneday)
end for</lang>
{{out}}
<pre>
7,805

edits