Euler problem 17を解いた。
問題17
1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 5 + 4 + 4 = 19 の文字が使われている。
では 1 から 1000 (one thousand) までの数字をすべて英単語で書けば、全部で何文字になるか。
注: 空白文字やハイフンを数えないこと。例えば、342 (three hundred and forty-two) は 23 文字、115 (one hundred and fifteen) は20文字と数える。なお、"and" を使用するのは英国の慣習。
#-*- coding:utf-8 -*- N=1000 B=[i for i in range(1,N+1)] C=[] D={0:"",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine",10:"ten",11:"eleven",12:"twelve",13:"thirteen",14:"fourteen",15:"fifteen",16:"sixteen",17:"seventeen",18:"eighteen",19:"nineteen",20:"twenty",30:"thirty",40:"forty",50:"fifty",60:"sixty",70:"seventy",80:"eighty",90:"ninety",100:"hundred",1000:"thousand"} #1~99までを文字列化 def num1(X): if X >= 20: return D[X-X%10]+D[X%10] else: return D[X] #100~999までを文字列化 def num2(X): if X % 100 ==0: return D[X/100]+D[100] else: return D[X/100]+D[100] +"and"+num1(X%100) #1000~9999までを文字列化 def num3(X): if X % 1000==0: return D[X/1000] +D[1000] else: return D[X/1000]+D[1000]+num2(X%1000) if __name__=="__main__": for i in B: if i >= 1000: C.append(num3(i)) elif (i >= 100) & (i <=999): C.append(num2(i)) else: C.append(num1(i)) print sum([len(i) for i in C])