"""based on http://w...content-available-to-author-only...s.gov/taxstats/indtaxstats/article/0,,id=133521,00.html
in particular Tax Generated, Classified by: Tax Rate and Size of Adjusted Gross Income, in 2008
http://w...content-available-to-author-only...s.gov/pub/irs-soi/08in35tr.xls
"""
payers_str = """\
217,955
365,765
587,434
1,137,799
1,651,758
2,342,620
2,542,013
2,747,013
2,880,415
3,266,667
8,354,766
8,078,487
14,031,669
10,881,138
19,044,011
11,672,302
13,816,581
3,466,191
574,677
139,660
59,078
85,689
21,238
13,403"""
taxes_str = """\
4,553
46,472
68,738
187,187
330,361
618,635
1,008,780
1,419,491
1,892,034
2,532,470
8,784,435
12,351,214
32,408,731
37,948,614
107,402,789
102,841,250
240,148,659
184,072,786
92,512,758
42,310,594
25,763,527
64,697,267
35,640,067
86,304,057"""
def parse_data(s):
return [int(v.replace(',', '')) for v in s.split()]
payers, taxes = parse_data(payers_str), parse_data(taxes_str)
total_payers, total_taxes = sum(payers), sum(taxes)
curr_payers, curr_taxes = 0, 0
for p, t in zip(payers, taxes):
curr_payers += p
curr_taxes += t
print('{0:>4.1f}% payers paid {1:>4.1f}% taxes'.format(100.0 * curr_payers / total_payers, 100.0 * curr_taxes / total_taxes))
IiIiYmFzZWQgb24gaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuZ292L3RheHN0YXRzL2luZHRheHN0YXRzL2FydGljbGUvMCwsaWQ9MTMzNTIxLDAwLmh0bWwKaW4gcGFydGljdWxhciBUYXggR2VuZXJhdGVkLCBDbGFzc2lmaWVkIGJ5OiBUYXggUmF0ZSBhbmQgU2l6ZSBvZiBBZGp1c3RlZCBHcm9zcyBJbmNvbWUsIGluIDIwMDgKaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuZ292L3B1Yi9pcnMtc29pLzA4aW4zNXRyLnhscwoiIiIKCnBheWVyc19zdHIgPSAiIiJcCjIxNyw5NTUKMzY1LDc2NQo1ODcsNDM0CjEsMTM3LDc5OQoxLDY1MSw3NTgKMiwzNDIsNjIwCjIsNTQyLDAxMwoyLDc0NywwMTMKMiw4ODAsNDE1CjMsMjY2LDY2Nwo4LDM1NCw3NjYKOCwwNzgsNDg3CjE0LDAzMSw2NjkKMTAsODgxLDEzOAoxOSwwNDQsMDExCjExLDY3MiwzMDIKMTMsODE2LDU4MQozLDQ2NiwxOTEKNTc0LDY3NwoxMzksNjYwCjU5LDA3OAo4NSw2ODkKMjEsMjM4CjEzLDQwMyIiIgoKdGF4ZXNfc3RyID0gIiIiXAo0LDU1Mwo0Niw0NzIKNjgsNzM4CjE4NywxODcKMzMwLDM2MQo2MTgsNjM1CjEsMDA4LDc4MAoxLDQxOSw0OTEKMSw4OTIsMDM0CjIsNTMyLDQ3MAo4LDc4NCw0MzUKMTIsMzUxLDIxNAozMiw0MDgsNzMxCjM3LDk0OCw2MTQKMTA3LDQwMiw3ODkKMTAyLDg0MSwyNTAKMjQwLDE0OCw2NTkKMTg0LDA3Miw3ODYKOTIsNTEyLDc1OAo0MiwzMTAsNTk0CjI1LDc2Myw1MjcKNjQsNjk3LDI2NwozNSw2NDAsMDY3Cjg2LDMwNCwwNTciIiIKCmRlZiBwYXJzZV9kYXRhKHMpOgogICAgcmV0dXJuIFtpbnQodi5yZXBsYWNlKCcsJywgJycpKSBmb3IgdiBpbiBzLnNwbGl0KCldCgpwYXllcnMsIHRheGVzID0gcGFyc2VfZGF0YShwYXllcnNfc3RyKSwgcGFyc2VfZGF0YSh0YXhlc19zdHIpCnRvdGFsX3BheWVycywgdG90YWxfdGF4ZXMgPSBzdW0ocGF5ZXJzKSwgc3VtKHRheGVzKQpjdXJyX3BheWVycywgY3Vycl90YXhlcyA9IDAsIDAKZm9yIHAsIHQgaW4gemlwKHBheWVycywgdGF4ZXMpOgogICAgY3Vycl9wYXllcnMgKz0gcAogICAgY3Vycl90YXhlcyArPSB0CiAgICBwcmludCgnezA6PjQuMWZ9JSBwYXllcnMgcGFpZCB7MTo+NC4xZn0lIHRheGVzJy5mb3JtYXQoMTAwLjAgKiBjdXJyX3BheWVycyAvIHRvdGFsX3BheWVycywgMTAwLjAgKiBjdXJyX3RheGVzIC8gdG90YWxfdGF4ZXMpKQo=