McNuggets problem: Difference between revisions
Content added Content deleted
m (→Python :: List monad: Tidied) |
|||
Line 1,155: | Line 1,155: | ||
box = size(limit) |
box = size(limit) |
||
return set |
return set( |
||
bind( |
|||
⚫ | |||
bind |
)(lambda x: bind( |
||
box(9) |
|||
)(lambda y: bind( |
|||
box(20) |
|||
)(lambda z: ( |
|||
lambda v=sum([x, y, z]): ( |
|||
[] if v > limit else [v] |
|||
) |
|||
)()))) |
|||
) |
|||
Line 1,192: | Line 1,192: | ||
# |
# -------------------------- TEST -------------------------- |
||
def main(): |
def main(): |
||
'''List monad and set comprehension - parallel routes''' |
'''List monad and set comprehension - parallel routes''' |
||
Line 1,218: | Line 1,218: | ||
# |
# ------------------------ GENERIC ------------------------- |
||
# bind (>>=) :: [a] -> (a -> [b]) -> [b] |
# bind (>>=) :: [a] -> (a -> [b]) -> [b] |
||
Line 1,227: | Line 1,227: | ||
passed as an argument to the second. |
passed as an argument to the second. |
||
''' |
''' |
||
return lambda f: |
return lambda f: chain.from_iterable( |
||
map(f, xs) |
|||
⚫ | |||
⚫ | |||
) |
) |
||
Line 1,237: | Line 1,235: | ||
def enumFromThenTo(m): |
def enumFromThenTo(m): |
||
'''Integer values enumerated from m to n |
'''Integer values enumerated from m to n |
||
with a step defined by nxt |
with a step defined by nxt-m. |
||
''' |
''' |
||
def go(nxt, n): |
def go(nxt, n): |
||
d = nxt - m |
d = nxt - m |
||
return range(m, n - 1 if d < 0 else 1 + n, d) |
return range(m, n - 1 if d < 0 else 1 + n, d) |
||
return lambda nxt: lambda n: |
return lambda nxt: lambda n: go(nxt, n) |
||
# |
# ------------------------ DISPLAY ------------------------- |
||
# fTable :: String -> (a -> String) -> |
# fTable :: String -> (a -> String) -> |
||
# |
# (b -> String) -> (a -> b) -> [a] -> String |
||
def fTable(s): |
def fTable(s): |
||
'''Heading -> x display function -> fx display function -> |
'''Heading -> x display function -> fx display function -> |
||
f -> xs -> tabular string. |
|||
''' |
''' |
||
def |
def gox(xShow): |
||
def gofx(fxShow): |
|||
def gof(f): |
|||
def goxs(xs): |
|||
ys = [xShow(x) for x in xs] |
|||
w = max(map(len, ys)) |
|||
⚫ | |||
def arrowed(x, y): |
|||
return lambda xShow: lambda fxShow: lambda f: lambda xs: go( |
|||
return y.rjust(w, ' ') + ' -> ' + fxShow(f(x)) |
|||
xShow, fxShow, f, xs |
|||
return s + '\n' + '\n'.join( |
|||
) |
|||
map(arrowed, xs, ys) |
|||
⚫ | |||
return goxs |
|||
return gof |
|||
⚫ | |||
return gox |
|||