開発環境
- OS X Lion - Apple(OS)
- Dart SDK (開発環境)
- Dart (プログラミング言語)
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の9章(自作メソッドの書き方), 9.5(練習問題)、モダンなローマ数字をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
モダンなローマ数字
コード
sample.dart
String replicate(int n, String s){
return new List.filled(n, s).join();
}
String romanNumeral(int nums){
String result = "";
Map<int,String> num_roman = {1000: 'M',
100: {5:'D', 1:'C'},
10: {5: 'L', 1:'X'},
1: {5: 'V', 1: 'I'}};
var keys = num_roman.keys.toList();
keys.sort((a, b) => b - a);
var k = keys.removeAt(0);
var n = nums ~/ k;
nums %= k;
var c = num_roman[k];
var pre_c = c;
result += replicate(n, c);
for(k in keys){
c = num_roman[k];
var roman_five = c[5];
var roman_one = c[1];
n = nums ~/ k;
nums %= k;
if(n==9){
result += roman_one + pre_c;
} else if(n == 4){
result += roman_one + roman_five;
} else {
result += replicate(n ~/ 5, roman_five);
result += replicate(n % 5, roman_one);
}
pre_c = roman_one;
}
return result;
}
void main() {
print(romanNumeral(4));
print(romanNumeral(9));
for(var i = 1010; i < 1021; i += 1){
print('${i}: ${romanNumeral(i)}');
}
}
入出力結果
IV IX 1010: MX 1011: MXI 1012: MXII 1013: MXIII 1014: MXIV 1015: MXV 1016: MXVI 1017: MXVII 1018: MXVIII 1019: MXIX 1020: MXX
0 コメント:
コメントを投稿