Padovan n-step number sequences: Difference between revisions

m
Line 1,012:
 
<lang python>'''Padovan N-step series'''
 
from itertools import islice, repeat
 
 
# padovans :: Int -> [Int]
def padovans(n):
Line 1,023:
def recurrence(ns):
return ns[0], ns[1:] + [sum(take(n)(ns))]
 
return unfoldr(recurrence)(
take(1 + n)(
repeat(1) if 3 > n else padovans(n - 1)
)
) if 0 <= n else []
 
 
# ------------------------- TEST -------------------------
 
# main :: IO ()
def main():
Line 1,040 ⟶ 1,039:
def sample(n):
return take(15)(padovans(n))
 
def columnWidth(n):
def go(xs):
Line 1,047 ⟶ 1,046:
])
return go
 
print(
fTable('Padovan n-step series:')(repr)(
Line 1,053 ⟶ 1,052:
)(sample)(range(2, 1 + 8))
)
 
 
# ----------------------- GENERIC ------------------------
 
# unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
def unfoldr(f):
Line 1,072 ⟶ 1,071:
valueResidue = f(valueResidue[1])
return go
 
 
# take :: Int -> [a] -> [a]
# take :: Int -> String -> String
Line 1,087 ⟶ 1,086:
)
return go
 
 
# ---------------------- FORMATTING ----------------------
 
# fTable :: String -> (a -> String) ->
# (b -> String) -> (a -> b) -> [a] -> String
Line 1,103 ⟶ 1,102:
ys = [xShow(x) for x in xs]
w = max(map(len, ys))
 
def arrowed(x, y):
return y.rjust(w, ' ') + ' ->' + (
Line 1,115 ⟶ 1,114:
return gofx
return gox
 
 
# MAIN ---
if __name__ == '__main__':
9,655

edits