mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 15:50:20 -08:00
Create weekday.ms
This commit is contained in:
177
00_Alternate_Languages/95_Weekday/MiniScript/weekday.ms
Normal file
177
00_Alternate_Languages/95_Weekday/MiniScript/weekday.ms
Normal file
@@ -0,0 +1,177 @@
|
||||
TAB = char(9)
|
||||
CR = char(13)
|
||||
|
||||
Age = {"m": 0, "d": 0, "y": 0}
|
||||
Age.init = function(m,d,y)
|
||||
noob = new Age
|
||||
noob.m = m;noob.d = d;noob.y = y
|
||||
return noob
|
||||
end function
|
||||
|
||||
Age.sub = function(a)
|
||||
m1 = self.m; d1 = self.d; y1 = self.y
|
||||
d1 = d1 - a.d
|
||||
if d1 < 0 then
|
||||
d1 = d1 + 30
|
||||
m1 = m1 - 1
|
||||
end if
|
||||
m1 = m1 - a.m
|
||||
if m1 < 0then
|
||||
m1 = m1 + 12
|
||||
y1 = y1 - 1
|
||||
end if
|
||||
y1 = y1 - a.y
|
||||
return Age.init(m1,d1,y1)
|
||||
end function
|
||||
|
||||
Age.multiply = function(multiplier)
|
||||
ageInDays = self.y *365 + self.m * 30 + self.d + floor(self.m / 2)
|
||||
newAge = ageInDays * multiplier
|
||||
years = floor(newAge/ 365)
|
||||
leftover = newAge % 365
|
||||
months = floor(leftover / 30)
|
||||
days = floor(leftover % 30)
|
||||
return Age.init(months, days, years)
|
||||
end function
|
||||
|
||||
Date = {"m": null, "d": null, "y": null}
|
||||
|
||||
// the number of days between the 1st of one month to the next
|
||||
Date.daysPerMonth = [0,31,28,31,30,31,30, 31,31,30,31,30]
|
||||
Date.dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday",
|
||||
"Thursday", "Friday", "Saturday"]
|
||||
|
||||
Date.init = function(dt)
|
||||
d = dt.split(",")
|
||||
if d.len != 3 then return
|
||||
noob = new Date
|
||||
noob.m = d[0].val
|
||||
noob.d = d[1].val
|
||||
noob.y = d[2].val
|
||||
return noob
|
||||
end function
|
||||
|
||||
Date.diff = function(mdy)
|
||||
dday = self.d - mdy.d
|
||||
dmonth = self.m - mdy.m
|
||||
if dday < 0 then
|
||||
dmonth -= 1
|
||||
dday += 30
|
||||
end if
|
||||
|
||||
dyear = self.y - mdy.y
|
||||
if dmonth <0 then
|
||||
dyear -= 1
|
||||
dmonth += 12
|
||||
end if
|
||||
return Age.init(dmonth, dday, dyear)
|
||||
end function
|
||||
|
||||
Date._isLeapYear = function
|
||||
return (self.y % 4 == 0 and self.y % 100 != 0) or self.y % 400 == 0
|
||||
end function
|
||||
|
||||
Date.value = function
|
||||
//Not accepting dates Jan 1st 1583 this because the
|
||||
//transistion to Gregorian calendar occurred in 1582.
|
||||
|
||||
//calculating days since the end of 1582
|
||||
years = self.y - 1583
|
||||
days = years * 365 + self._leapYears + Date.daysPerMonth[:self.m].sum + self.d
|
||||
return days // returns 1 for 1,1,1583
|
||||
end function
|
||||
|
||||
Date.dayOfWeek = function
|
||||
// 1,1,1583 is a Saturday
|
||||
// Date.value calculates a value of 1 for that date
|
||||
return (self.value + 5) % 7
|
||||
end function
|
||||
|
||||
Date.weekday = function
|
||||
return Date.dayNames[self.dayOfWeek]
|
||||
end function
|
||||
|
||||
// get # of lear yeaps since the change to Gregorian
|
||||
Date._leapYears = function
|
||||
ly = floor((self.y - 1580) / 4)
|
||||
|
||||
//exclude centuries
|
||||
centuries = floor((self.y - 1500) / 100)
|
||||
|
||||
//unless centuries divisible by 400
|
||||
centuries400 = floor((self.y - 1200) / 400)
|
||||
ly = ly - centuries + centuries400
|
||||
|
||||
if self._isLeapYear and self.m < 3 then ly -= 1
|
||||
return ly
|
||||
end function
|
||||
|
||||
print " "*32 + "WEEKDAY"
|
||||
print " "*15 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"+CR+CR+CR
|
||||
|
||||
print "WEEKDAY is a computer demonstration that"
|
||||
print "gives facts about a date of interest to you."+CR
|
||||
|
||||
mdy = input("Enter today's date in the form: 3,24,1979?"+CR)
|
||||
today = Date.init(mdy)
|
||||
|
||||
mdy = input("Enter day of birth (or other day of interest)"+CR)
|
||||
dob = Date.init(mdy)
|
||||
|
||||
print
|
||||
if dob.y < 1583 then
|
||||
print "Not prepared to give day of the week prior to 1583"
|
||||
exit
|
||||
end if
|
||||
|
||||
verb = " was a "
|
||||
if today.value < dob.value then verb= " will be a "
|
||||
if today.value == dob.value then verb = " is a "
|
||||
|
||||
if dob.d == 13 and dob.weekday == "Friday" then
|
||||
endMsg = " The Thirteenth--Beware!"
|
||||
else
|
||||
endMsg = "."
|
||||
end if
|
||||
print dob.m + "/" + dob.d + "/" + dob.y + verb + dob.weekday + endMsg
|
||||
|
||||
age = today.diff(dob)
|
||||
|
||||
totalAge = Age.init(age.m,age.d,age.y)
|
||||
if verb == " was a " then
|
||||
lines= [["", "YEARS", "MONTHS", "DAYS"]]
|
||||
lines.push(["", "-----", "------", "----"])
|
||||
lines.push(["Your age (if birthdate)", age.y,age.m, age.d])
|
||||
|
||||
spent = age.multiply(.35)
|
||||
lines.push(["You have slept", spent.y,spent.m, spent.d])
|
||||
totalAge = totalAge.sub(spent)
|
||||
|
||||
spent = age.multiply(.17)
|
||||
lines.push(["You have eaten", spent.y,spent.m, spent.d])
|
||||
totalAge = totalAge.sub(spent)
|
||||
|
||||
if totalAge.y <= 3 then
|
||||
phrase = "You have played"
|
||||
else if totalAge.y <= 9 then
|
||||
phrase = "You have played/studied"
|
||||
else
|
||||
phrase = "You have worked/played"
|
||||
end if
|
||||
|
||||
spent = age.multiply(.23)
|
||||
lines.push([phrase, spent.y,spent.m, spent.d])
|
||||
totalAge = totalAge.sub(spent)
|
||||
|
||||
relaxed = totalAge
|
||||
lines.push(["You have relaxed", relaxed.y, relaxed.m, relaxed.d])
|
||||
for line in lines
|
||||
col0 = (" " * 25 + line[0])[-25:]
|
||||
col1 = (line[1] + " " * 6)[:6]
|
||||
col2 = (line[2] + " " * 7)[:7]
|
||||
col3 = (line[3] + " " * 5)[:5]
|
||||
print (col0+" " + col1+col2+col3)
|
||||
end for
|
||||
end if
|
||||
|
||||
print CR+"Yoy may retire in " + (dob.y + 65)
|
||||
Reference in New Issue
Block a user