Discordian date: Difference between revisions

added powerbasic & freebasic
(add Ruby)
(added powerbasic & freebasic)
Line 205:
2012-02-29 is St. Tib's day, Year of Our Lady of Discord 3178
</pre>
 
=={{header|BASIC}}==
{{works with|FreeBASIC}}
{{trans|PowerBASIC}}
 
<lang qbasic>#INCLUDE "datetime.bi"
 
DECLARE FUNCTION julian(AS DOUBLE) AS INTEGER
 
 
SeasonNames:
DATA "Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"
Weekdays:
DATA "Setting Orange", "Sweetmorn", "Boomtime", "Pungenday", "Prickle-Prickle"
DaysPreceding1stOfMonth:
' jan feb mar apr may jun jul aug sep oct nov dec
DATA 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
 
DIM dyear AS INTEGER, dseason AS STRING, dday AS INTEGER, dweekday AS STRING
DIM tmpdate AS DOUBLE, jday AS INTEGER, result AS STRING
DIM L0 AS INTEGER
 
IF LEN(COMMAND$) THEN
tmpdate = DATEVALUE(COMMAND$)
ELSE
tmpdate = FIX(NOW())
END IF
dyear = YEAR(tmpdate) + 1166
IF (2 = MONTH(tmpdate)) AND (29 = DAY(tmpdate)) THEN
result = "Saint Tib's Day, " & STR$(dyear) & " YOLD"
ELSE
jday = julian(tmpdate)
RESTORE SeasonNames
FOR L0 = 1 TO (jday \ 73) + 1
READ dseason
NEXT
dday = (jday MOD 73)
IF 0 = dday THEN dday = 73
RESTORE Weekdays
FOR L0 = 1 TO (jday MOD 5) + 1
READ dweekday
NEXT
result = dweekday & ", " & dseason & " " & TRIM$(STR$(dday)) & ", " & TRIM$(STR$(dyear)) & " YOLD"
END IF
 
? result
END
 
FUNCTION julian(d AS DOUBLE) AS INTEGER
'doesn't account for leap years (not needed for ddate)
DIM tmp AS INTEGER, L1 AS INTEGER
RESTORE DaysPreceding1stOfMonth
FOR L1 = 1 TO MONTH(d)
READ tmp
NEXT
FUNCTION = tmp + DAY(d)
END FUNCTION</lang>
 
=={{header|C}}==
<lang C>#include <string.h>
Line 857 ⟶ 915:
Result: Day(Thu 20 Oct 2011)
</lang>
 
=={{header|PowerBASIC}}==
<lang powerbasic>#COMPILE EXE
#DIM ALL
 
'change this for systems that use a different character
$DATESEP = "-"
 
FUNCTION day(date AS STRING) AS LONG
'date is same format as date$
DIM tmpdash1 AS LONG, tmpdash2 AS LONG
tmpdash1 = INSTR(date, $DATESEP)
tmpdash2 = INSTR(-1, date, $DATESEP)
FUNCTION = VAL(MID$(date, tmpdash1 + 1, tmpdash2 - tmpdash1 - 1))
END FUNCTION
 
FUNCTION month(date AS STRING) AS LONG
'date is same format as date$
DIM tmpdash AS LONG
tmpdash = INSTR(date, $DATESEP)
FUNCTION = VAL(LEFT$(date, tmpdash - 1))
END FUNCTION
 
FUNCTION year(date AS STRING) AS LONG
'date is same format as date$
DIM tmpdash AS LONG
tmpdash = INSTR(-1, date, $DATESEP)
FUNCTION = VAL(MID$(date, tmpdash + 1))
END FUNCTION
 
FUNCTION julian(date AS STRING) AS LONG
'date is same format as date$
'doesn't account for leap years (not needed for ddate)
'days preceding 1st of month
' jan feb mar apr may jun jul aug sep oct nov dec
DATA 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
FUNCTION = VAL(READ$(month(date))) + day(date)
END FUNCTION
 
FUNCTION PBMAIN () AS LONG
'Season names
DATA "Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"
'Weekdays
DATA "Setting Orange", "Sweetmorn", "Boomtime", "Pungenday", "Prickle-Prickle"
 
DIM dyear AS LONG, dseason AS STRING, dday AS LONG, dweekday AS STRING
DIM tmpdate AS STRING, jday AS LONG, result AS STRING
 
IF LEN(COMMAND$) THEN
tmpdate = COMMAND$
ELSE
tmpdate = DATE$
END IF
dyear = year(tmpdate) + 1166
IF (2 = month(tmpdate)) AND (29 = day(tmpdate)) THEN
result = "Saint Tib's Day, " & STR$(dyear) & " YOLD"
ELSE
jday = julian(tmpdate)
dseason = READ$((jday \ 73) + 1)
dday = (jday MOD 73)
IF 0 = dday THEN dday = 73
dweekday = READ$((jday MOD 5) + 6)
result = dweekday & ", " & dseason & " " & TRIM$(STR$(dday)) & ", " & TRIM$(STR$(dyear)) & " YOLD"
END IF
 
? result
END FUNCTION</lang>
 
=={{header|PureBasic}}==
1,150

edits