2016-04-27 82 views
-6

我想總結第一個100.000位數字的餅圖(我有文本與數字), ,但我想要以特定的形式。總結一個非常大的數字的位數

我想把數字放在一個矩陣(或任何方便的佔位符)中,使用我預先定義的一小部分單元格,並將這些數字重疊在這些單元格中。

我的意思是這樣的:可以說,我們有一個數字這份名單(31415926535)

,讓我們說我們有4個單元Ĵ,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量結果(通過循環我的意思是一個運行像在上面的例子中與分配Ĵ,J1,J2,J3頂部添加其它捻3,1,4,1將是第一個週期)以及最終結果。

我希望能有一個簡單的語言如Python或哈斯克爾

+2

哇,我從來沒有聽說過任何人之前調用哈斯克爾的簡單語言。 :) – jamshidh

+0

我不明白它(顯然),但我覺得它比直觀和「寬容」相比,C++或Java例如...:P – papajo

+2

Haskell-使困難的事情變得簡單,容易的事情很難。 :) – jamshidh

回答

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 

我會在今天晚些時候更新一些解釋。

更新@Comments

main = do digits <- map digitToInt <$> readFile "pifile.txt" 
       let summator = scanl1' (zipWith (+)) . chunksOf 4 
       mapM_ print $ take 100 $ summator digits 
+0

謝謝我認爲我得到了大部分發生在這裏的事情:對我來說,只有「blury」的東西是「(zipWith(+))」我想這會增加每個數字落在單個塊​​上嗎? – papajo

+0

exacly'zipWith(+)[1,2,3,4] [5,6,7,8] => [6,8,10,12]'如果一個列表比另一個'zipWith'縮小結果列表的大小更小,所以你可以處理無限列表以及'zipWith(+)[1] [1 ..] => [2]' – epsilonhalbe

+0

我還沒有運行代碼(當我回家時,將很快做出迴應,如果有必要的話給我的反饋,或者如果一切順利的話,選擇這個答案) 我只是懷疑打印在我看來,結果將是每個塊的總和列表,而我需要更多的東西(inbetween結果讓我們說第一個100「zipWith」 – papajo

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 
+0

謝謝,但我的問題的一大部分是如何插入我的100k數字我有他們在TXT格式,所以我怎麼能鏈接「my_digits」該文件?或者是否有一個明智的方法來讓python逐個數字地計算pi,然後將它填充到容器中? – papajo

+0

'my_digits = iter(lambda:my_open_file.read(1),None)' –

相關問題