2016-04-27 6 views
-6

Я хочу суммировать цифры первых 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

И я хочу сделать это за все свои 100 тыс. Цифр

Но я хочу, чтобы добавить другой поворот на вершине этого

Я хочу, чтобы напечатать результаты после й количества циклов (от циклов я имею в виду один прогон, как в приведенном выше примере, присваивающие J, J1, J2, J3 с 3,1,4,1 будет 1-й цикл), а также конечный результат.

Я бы предпочел простой язык, таких как питон или Haskell

+2

Ничего себе, я никогда не слышал, чтобы кто называют Haskell простым языком раньше. :) – 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 

Ниже я расскажу об этом позже.

Update @Comments

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

Спасибо, я думаю, что получаю большую часть того, что происходит здесь: D только для меня «размытие» - это «(zipWith (+))« Я полагаю, это добавляет каждую цифру, которая приземляется над отдельным куском? – papajo

+0

exacly 'zipWith (+) [1,2,3,4] [5,6,7,8] => [6,8,10,12]' обратите внимание, если один список короче, чем другой 'zipWith' сжимается результирующий список к размеру меньше, поэтому вы можете обрабатывать бесконечные списки, а также 'zipWith (+) [1] [1 ..] => [2] ' – epsilonhalbe

+0

Я еще не запускаю код (сделаю очень скоро, когда вернусь домой и при необходимости отправлю отзыв, или выберите это в качестве ответа, если все будет плавным). У меня просто есть сомнения относительно print мне кажется, что результатом будет список сумм каждого куска, в то время как мне нужно что-то большее (в промежутке между результатами let говорят первые 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

спасибо, но большая часть моей проблемы заключается в том, как вставить мои цифры в 100 тыс. Я имею их в формате txt, так как я могу связать «my_digits» с этим файлом? или есть ли разумный способ заставить python вычислять цифру pi по цифре, поскольку она идет, чтобы заполнить ее в бункеры? – papajo

+0

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