プロジェクトオイラー問17


1~1000までをイギリス英語で書いたとき-とスペースを除いて合計何文字必要か。
この問題、私は最初全部の文字列を規則にしたがって生成するというとても頭の悪い方法をとっていました。
下記解法はほかの方のコードを参考に書いたものです。


one("onetwothreefourfivesixseveneightnine").
teens("teneleventwelvethirteenfourteenfifteensixteenseventeeneighteennineteen").
tens("twentythirtyfortyfiftysixtyseventyeightyninety").


main:-
	one(X),
	teens(Y),
	tens(Z),
	length(X,X1),
	length(Y,Y1),
 	length(Z,Z1),
	X2 is (X1*9)*10+X1*100,
	Y2 is Y1*10,
	Z2 is Z1*10*10,
	And2 is 3*(900-9),
	Hand2 is 7*900,
	Ans is (X2+Y2+Z2+And2+Hand2+11),
 	write(Ans).






1から99までの数字は
https://kw-note.com/translation/numbers-1-to-100-in-english/
によれば854文字、Excelで簡単な加工で求まる。
これが3桁の数字の頭が1~9まであるので10倍の8540文字。
これで下2桁は全て数え終わり。
3桁でandがつくのが99*9回存在するので3*99*9=2673文字。
3桁で頭の数字を現す単語はそれぞれ100回登場するので100*(36=1から9までの文字を繋げた時の文字の長さ)=3600文字
ハンドレットは7文字で900回登場するので900*7=6300文字
1000が11文字。
合計すれば答え。
Excelでちょちょとしても答えが出ますね。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2016年12月16日 13:42