'''Program made by riddle to represent the so-called "perpetual calendar"
( http://www.evilmadscientist.com/article.php/perpetualcalendar )
BTW: if you don't know what year it is, you're just fucked.
'''
from datetime import date
daysofweek = ("Sunday","Monday","Tuesday",
"Wednesday","Thursday","Friday","Saturday")
months = ("January","February","March","April","May","June","July","August",
"September","October","November","December")
today = (date.today().isoweekday()+1,
date.today().isoformat()[5:7],
date.today().isoformat()[8:])
class Matrix(object):
'''Matrix type is initialized with two args: # of columns and # of rows'''
def __init__(self, cols, rows):
self.cols = cols; self.rows = rows; self.matrix = []
for i in range(rows):
ea_row = []
for j in range(cols): ea_row.append(0)
self.matrix.append(ea_row)
def setitem(self, col, row, x):
self.matrix[col-1][row-1] = x
def getitem(self, col, row):
return self.matrix[col-1][row-1]
def __repr__(self):
outStr = ""
for i in range(self.rows): outStr += '%s\n' % (self.matrix[i])
return outStr
def d2b(n):
'''Returns the base 2 value of non-negative int n (base 10) as a list'''
binStr= ''
if n < 0: raise ValueError("number must be non-negative")
if n == 0: return '0'
while n > 0: binStr = str(n%2)+binStr; n = n>>1
return list(binStr)
def binarycalendar(dweek=today[0], mnth=today[1], dmonth=today[2]):
'''Returns, as a Matrix, a binary representations of
the day of the week, the month, and the day of month.
Keyword arguments:
dweek -- day of the week; defaults to today
mnth -- month; defaults to the current month
dmonth -- day of the month; defaults to today
'''
bcal = (d2b(dweek),d2b(int(mnth)),d2b(int(dmonth)))
bcmatrix= Matrix(3,5)
for x in range(3):
if len(bcal[x])<5:
for y in range(5-len(bcal[x])): bcal[x].insert(0,'0')
for y in range(5): bcmatrix.setitem(y+1,x+1,bcal[x][y])
bcmatrix.setitem(1,1,' ')
bcmatrix.setitem(2,1,' ')
bcmatrix.setitem(1,2,' ')
return bcmatrix
if __name__ == '__main__':
print(str(binarycalendar().__repr__()).replace('[','')
.replace('\'','').replace(',','').replace(']',''))
print("%s, %s %s" %
(daysofweek[int(today[0]-1)], months[int(today[1])-1], today[2]))