開発環境
- 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 コメント:
コメントを投稿