Project Euler#17に触発され、これがあなたの挑戦です。入力として数値を受け取る完全なプログラムまたは関数を作成し、その数値までカウントするのに必要な文字数(1から始まる)を印刷または返します。スペース、コンマ、ハイフンは含めませんが、単語を含める必要がありますand。例えば。342のスペルは次のとおりThree Hundred and Forty-Twoです。これは23文字の長さです。
入力は正の整数になります。無効な入力を処理する必要はありません。数値を英語に変換する組み込みまたはライブラリは許可されていません。
数字のつづり方に関するすべてのルールを次に示します。(注:一部の人々は、数字のつづり方に異なる規則のセットを使用していることを認識しています。これは、このチャレンジの目的のための公式規則にすぎません)
1から20
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20
21から99
これらに参加してください:
20、30、40、50、60、70、80、90
これらに:
-one、-two、-three、-four、-five、-six、-seven、-eight、-nine、
4にはuが40あることに注意してくださいしません!
例:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100から999
数百(百、二百、三百など)、「および」、および上記の残りの数字を書きます。とあなたの手紙のスコアにカウントされます。
例:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
1,000から999,999
数千(1000、2000など)、カンマ、残りの数字を上記のように書きます。あなたは何の数百を持っていない場合、あなたはまだ必要があることを注意して。
例:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
百万
数百万、次に残りの数を上記のように書きます。「百万」は6つのゼロ「1,000,000」であることに注意してください。
例:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
同じルールが何十億、1兆、4千万以上にも当てはまりますが、このチャレンジの目的のために、999,999,999(9億9,900万、9億、9万9千、 999
Pythonソルバー
回答を確認するための短いPythonスクリプトを次に示します。
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
これはNodeBox言語ライブラリを使用して数値を英語に変換することに注意してください。(はい、私は自分のルールを破っただけですが、これは競合する答えではありません)これはここで自由に利用できます。
サンプルI / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174