バックグラウンド
この課題は、次の図を公開しているこの Webサイトから着想を得ています。
この図は、250未満のローマ数字の最長表現が188であり、表現するのに9つの数字が必要であることを示しています。
チャレンジ
ほとんどのローマ数字を表現するために使用される標準的な記号は以下の通りである:{ I
、V
、X
、L
、C
、D
、M
}、文字の数値である場合M
= 1000 D
= 500 C
= 100 L
= 50、X
= 10、V
= 5、I
= 1。
この課題の目標は、正の整数nが与えられた場合、n個の標準シンボルを連結して構成できる有効なローマ数字表現の数を計算することです。
次に、プログラムはこの計算の結果を出力する必要があります!
入力:正の整数n。
出力:長さnの有効なローマ数字表現の数。
ローマ数字表現の規則
ローマ数字はもともと「加算」ペアのみでした。つまり、数字は常に降順で書き込まれ、すべての数字の値の合計は数字の値でした。
後に、減算ペアリング、より大きな数字の前に小さな数字を配置して、大きな数字から小さな数字を減算する使用が、ローマ数字の表現を短縮するために一般的になりました。次の無効な式のように、減算ペアは連鎖できませんIXL
。
以下は、加算と減算のペアリングに関する現代のルールです。
- 1つのI、X、およびCのみが減算ペアの一部の先頭の数字として使用できます。
- 減算ペアのVまたはXの前にのみ配置できます。
- Xは、減算ペアのLまたはCの前にのみ配置できます。
- Cは、減算ペアのDまたはMの前にのみ配置できます。
- 減算ペア以外の数字は降順でなければなりません(つまり、各減算ペアの先頭の数字をドロップすると、数字は降順になります)。
- M、C、およびXは、より小さい額種で同等または超過することはできません。
- D、L、およびVはそれぞれ1回だけ表示できます。
- Mのみを4回以上繰り返すことができます。
さらなる注記
バー表記は使用しません。むしろ、Mを追加して任意の数を表現します。
これらは、ローマ数字について従う唯一の規則です。つまり、などの奇数の式
IVI
もシステムで有効と見なされます。また、一部の数値には複数の式があるため、長さnの式を持つ数値の数はカウントしないことに注意してください。代わりに、有効な式の数のみをカウントしています。
テストケース
1
→ 7
2
→ 31
3
→ 105
上記を手動で確認したので、テストケースを再確認し、可能であれば追加してください。
受賞基準
これはコードゴルフの挑戦なので、楽しんでください!少なくとも1〜9の入力を処理できるソリューションのみを受け入れます。それ以上はボーナスです!
編集
コメンターの要求に応じて、以下を見つけるか、このペーストビンリンクで、n = 3 としてカウントした105のコンボ
III IVI IXI IXV IXX VII XII XIV XIX XVI XXI XXV XXX XLI XLV XLX XCI XCV XCX XCL XCC LII LIV LIX LVI LXI LXV LXX CII CIV CIX CVI CXI CXV CXX CXL CXC CLI CLV CDX CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CDC CMI CMV CMX CML CMC CMD CMM DII DIV DIX DVI DXI DXV DXX DXL DXC DLI DLV DLX DCI DCV DCX DCL DCC MII MIV MIX MVI MXI MXV MXX MXL MXC MLI MLV MLX MCI MCV MCX MCL MCC MCD MCM MDC MML MDC MDL MMV MMX MML MMC MMD MMM
編集2:
結果を確認するには、ジョナサンアランの厚意により、次のゴルフ以外のコードを使用します。
編集3:
このチャレンジのすべてのエラーについておIび申し上げます。次回はもっと良い仕事をするようにします!