37 lines
855 B
Python
37 lines
855 B
Python
# Dropping or keeping any non-numerics in the string
|
|
|
|
|
|
# succString :: Bool -> String -> String
|
|
def succString(blnPruned):
|
|
def go(x):
|
|
try:
|
|
return [str(1 + (float(x) if '.' in x else int(x)))]
|
|
except ValueError:
|
|
return [] if blnPruned else [x]
|
|
return lambda s: ' '.join(concatMap(go)(s.split()))
|
|
|
|
|
|
# TEST ----------------------------------------------------
|
|
def main():
|
|
print(
|
|
'\n'.join(
|
|
[succString(bln)(
|
|
'41.0 pine martens in 1491 -1.5 mushrooms ≠ 136'
|
|
) for bln in [False, True]]
|
|
)
|
|
)
|
|
|
|
|
|
# GENERIC ---------------------------------------------------
|
|
|
|
# concatMap :: (a -> [b]) -> [a] -> [b]
|
|
def concatMap(f):
|
|
return lambda xs: (
|
|
[ys[0] for ys in [f(x) for x in xs] if ys]
|
|
)
|
|
|
|
|
|
# MAIN ---
|
|
if __name__ == '__main__':
|
|
main()
|