Discordian date: Difference between revisions
Content added Content deleted
mNo edit summary |
(Added PicoLisp) |
||
Line 14: | Line 14: | ||
see [[Talk:Discordian_date|talk page]]. |
see [[Talk:Discordian_date|talk page]]. |
||
=={{header|PicoLisp}}== |
|||
{{trans|Python}} |
|||
<lang PicoLisp>(de disdate (Year Month Day) |
|||
(let? Date (date Year Month Day) |
|||
(let (Leap (date Year 2 29) D (- Date (date Year 1 1))) |
|||
(if (and Leap (= 2 Month) (= 29 Day)) |
|||
(pack "St. Tib's Day, YOLD " (+ Year 1166)) |
|||
(and Leap (>= D 60) (dec 'D)) |
|||
(pack |
|||
(get |
|||
'("Chaos" "Discord" "Confusion" "Bureaucracy" "The Aftermath") |
|||
(inc (/ D 73)) ) |
|||
" " |
|||
(inc (% D 73)) |
|||
", YOLD " |
|||
(+ Year 1166) ) ) ) ) )</lang> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
Revision as of 16:55, 21 July 2010
Discordian date
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Convert a given date from the Gregorian calendar to the Discordian calendar.
See Also
J
<lang j>disc=: +"1&1166 0 0 </lang>
Example use:
<lang> disc 2012 2 29 3718 29</lang>
see talk page.
PicoLisp
<lang PicoLisp>(de disdate (Year Month Day)
(let? Date (date Year Month Day) (let (Leap (date Year 2 29) D (- Date (date Year 1 1))) (if (and Leap (= 2 Month) (= 29 Day)) (pack "St. Tib's Day, YOLD " (+ Year 1166)) (and Leap (>= D 60) (dec 'D)) (pack (get '("Chaos" "Discord" "Confusion" "Bureaucracy" "The Aftermath") (inc (/ D 73)) ) " " (inc (% D 73)) ", YOLD " (+ Year 1166) ) ) ) ) )</lang>
Python
<lang python>import datetime, calendar
DISCORDIAN_SEASONS = ["Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"]
def ddate(year, month, day):
today = datetime.date(year, month, day) is_leap_year = calendar.isleap(year) if is_leap_year and month == 2 and day == 29: return "St. Tib's Day, YOLD " + (year + 1166) day_of_year = today.timetuple().tm_yday - 1 if is_leap_year and day_of_year >= 60: day_of_year -= 1 # Compensate for St. Tib's Day season, dday = divmod(day_of_year, 73) return "%s %d, YOLD %d" % (DISCORDIAN_SEASONS[season], dday + 1, year + 1166)
</lang>