我想总结馅饼的前100.000位数字(我有文字和数字), 但我想以特定的形式做到这一点。
我想把数字放在一个矩阵(或任何方便的占位符)中,用我预定义的少量单元格,并重叠这些单元格中的数字。
我的意思是这样的:假设我们有这个数字列表(31415926535)
并且假设我们有4个单元格j,j1,j2,j3
在第一次运行中j = 3,j1 = 1,j2 = 4,j3 = 1注意每个单元格已被分配了一个列表的编号,并且列表中剩余的数字是(5926535)所以我想重叠它们 j = 8(因为它的值为3,现在增加了5),j1 = 10(1 + 9),j2 = 6 j3 = 7
我希望为我所有的100k数字做到这一点
但我想在其上加上另一个转折
我想在x个循环次数之后打印结果(循环我的意思是一次运行就像在上面的例子中指定j,j1,j2,j3和3,1,4,1将是第一个循环)以及最后的结果。
我更喜欢简单的语言,如python或haskell
答案 0 :(得分:1)
这将是Haskell中的完整实现
import Data.List.Split (chunksOf)
import Data.List
import Data.Char (digitToInt)
main :: IO ()
main = do digits <- map digitToInt <$> readFile "pifile.txt"
let summator = foldl1' (zipWith (+)) . chunksOf 4
print $ summator digits
我会在今天晚些时候用一些解释来更新这个。
main = do digits <- map digitToInt <$> readFile "pifile.txt"
let summator = scanl1' (zipWith (+)) . chunksOf 4
mapM_ print $ take 100 $ summator digits
答案 1 :(得分:0)
bins = [0,0,0,0] # four bins
for i,n in itertools.izip(itertools.cycle([0,1,2,3]),my_digits):
bins[i] += int(n)
我猜...有时打印它
bins = [0,0,0,0] # four bins
num_bins = 4
for i,n in enumerate(my_digits):
bins[i%num_bins] += int(n)
if i % 100: print( bins ) # every 100 items print