Roman numerals/Decode: Difference between revisions

m
Line 5,398:
if no letter value is defined.
'''
if mb.get('Nothing')None orin None is(mb, x):
return Nothing()None
else:
r, total = mb.get('Just')
return Just((
x,
total + (-x if x < r else x)
))
 
dct = defaultdict(
Line 5,418:
go,
[dct[k.upper()] for k in reversed(list(s))],
Just((0, 0))
)
)(compose(Just)(snd))
 
 
# TEST --------------------------- TEST -------------------------
def main():
'''Testing a sample of dates.'''
Line 5,439:
 
 
# GENERIC ------------------------- GENERIC ------------------------
 
# Just :: a -> Maybe a
def Just(x):
'''Constructor for an inhabited Maybe (option type) value.'''
return {'type': 'Maybe', 'Nothing': False, 'Just': x}
 
 
# Nothing :: Maybe a
def Nothing():
'''Constructor for an empty Maybe (option type) value.'''
return {'type': 'Maybe', 'Nothing': True}
 
 
# bindMay (>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b
Line 5,460 ⟶ 5,448:
of the (a -> Maybe b) function (mf) to x.'''
return lambda mf: (
m if None is m.get('Nothing') else mf(m.get('Just'))
)
 
 
# compose (<<<) :: (b -> c) -> (a -> b) -> a -> c
def compose(g):
'''Right to left function composition.'''
return lambda f: lambda x: g(f(x))
 
 
Line 5,476 ⟶ 5,458:
where m is Just(x).
'''
return lambda f: lambda m: v if None is m.get('Nothing') else (
f(m.get('Just'))
)
 
Line 5,487 ⟶ 5,469:
 
 
# FORMATTING ------------------------ FORMATTING ----------------------
 
# fTable :: String -> (a -> String) ->
# (b -> String) -> (a -> b) -> [a] -> String
def fTable(s):
'''Heading -> x display function -> fx display function ->
fx display function -> f -> xs -> tabular string.
'''
def go(xShow, fxShow, f, xs):
Line 5,499 ⟶ 5,481:
w = max(map(len, ys))
return s + '\n' + '\n'.join(map(
lambda x, y: y.rjust(w, ' ') + ' -> ' + fxShow(f(x)),
f'{y.rjust(w, " ")} -> {fxShow(f(x))}'
),
xs, ys
))
return lambda xShow: lambda fxShow: lambda f: lambda xs: go(
lambda xs: go(xShow, fxShow, f, xs)
)
 
Line 5,519 ⟶ 5,503:
MMXVIII -> 2018
MMZZIII -> (Contains unknown character)</pre>
 
 
=={{header|QBasic}}==
9,655

edits