Day of the week: Difference between revisions

→‎{{header|Python}}: Pylinted datetime version for Python 3, added {Works with}, updated output.
(Added 11l)
(→‎{{header|Python}}: Pylinted datetime version for Python 3, added {Works with}, updated output.)
Line 3,373:
 
Or, in terms of datetime:
{{Works with|Python|3.7}}
<lang python>import datetime
<lang python>'''Days of the week'''
 
from datetime import date
from itertools import islice
 
 
# xmasIsSunday :: Int -> Bool
def xmasIsSunday(y):
'''True if Dec 25 in the given year is a Sunday.'''
return 6 == datetime.date(y, 12, 25).weekday()
return 6 == date(y, 12, 25).weekday()
 
 
# main :: IO ()
def main():
'''Years between 2008 and 2121 with 25 Dec on a Sunday'''
for x in filter(xmasIsSunday, enumFromTo(2008)(2121)):
 
print (x)
xs = list(filter(
xmasIsSunday,
enumFromTo(2008)(2121)
))
total = len(xs)
print(
fTable(main.__doc__ + ':\n\n' + '(Total ' + str(total) + ')\n')(
lambda i: str(1 + i)
)(str)(index(xs))(
enumFromTo(0)(total - 1)
)
)
 
 
# GENERIC -------------------------------------------------
 
# enumFromTo :: (Int ->, Int) -> [Int]
def enumFromTo(m):
'''Integer enumeration from m to n.'''
return lambda n: list(range(m, 1 + n))
 
 
# index (!!) :: [a] -> Int -> a
def index(xs):
'''Item at given (zero-based) index.'''
return lambda n: None if 0 > n else (
xs[n] if (
hasattr(xs, "__getitem__")
) else next(islice(xs, n, None))
)
 
 
# unlines :: [String] -> String
def unlines(xs):
'''A single string formed by the intercalation
of a list of strings with the newline character.
'''
return '\n'.join(xs)
 
 
# FORMATTING ---------------------------------------------
# fTable :: String -> (a -> String) ->
# (b -> String) -> (a -> b) -> [a] -> String
def fTable(s):
'''Heading -> x display function -> fx display function ->
f -> xs -> tabular string.
'''
def go(xShow, fxShow, f, xs):
ys = [xShow(x) for x in xs]
w = max(map(len, ys))
return s + '\n' + '\n'.join(map(
lambda x, y: y.rjust(w, ' ') + ' -> ' + fxShow(f(x)),
xs, ys
))
return lambda xShow: lambda fxShow: lambda f: lambda xs: go(
xShow, fxShow, f, xs
)
 
 
# MAIN --
if __name__ == '__main__':
main()</lang>
main()</lang>
{{Out}}
<pre>Years between 2008 and 2121 with 25 Dec on a Sunday:
<pre>2011
 
2016
(Total 17)
2022
 
2033
1 -> 2011
2039
2 -> 2016
2044
3 -> 2022
2050
4 -> 2033
2061
5 -> 2039
2067
6 -> 2044
2072
7 -> 2050
2078
8 -> 2061
2089
9 -> 2067
2095
10 -> 2072
2101
11 -> 2078
2107
12 -> 2089
2112
13 -> 2095
2118</pre>
14 -> 2101
15 -> 2107
16 -> 2112
17 -> 2118</pre>
 
=={{header|R}}==
9,655

edits