開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 9章(自作メソッドの書き方), 9.5(練習問題)モダンなローマ数字 を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
モダンなローマ数字
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby1.9 #-*- coding: utf-8 -*- def roman_numeral n roman = 'M' * (n / 1000) n = n % 1000 h = n / 100 n = n % 100 t = n / 10 o = n % 10 if h != 9 and h != 4 roman += 'D' * (h / 5) roman += 'C' * (h % 5) elsif h != 9 roman += 'CD' else roman += 'CM' end if t != 9 and h != 4 roman += 'L' * (h / 5) roman += 'X' * (h % 5) elsif t != 9 roman += 'XL' else roman += 'XC' end if o != 9 and o != 4 roman += 'V' * (o / 5) roman += 'I' * (o % 5) elsif o != 9 roman += 'IV' else roman += 'IX' end roman end [4,42,458,4569].each do |n| puts "#{n}: #{roman_numeral n}" end
入出力結果(Terminal)
$ ./sample.rb 4: IV 42: II 458: CDXLVIII 4569: MMMMDLIX $
ちなみにJavaScriptの場合。
コード(BBEdit)
function repeat_string(s, n){ var result = ""; for(var i = 0; i < n; i++){ result += s; } return result; }; var roman_numeral = function(n){ var roman = repeat_string('M', Math.floor(n / 1000)); n = Math.floor(n % 1000); var h = Math.floor(n / 100); n = Math.floor(n % 100); var t = Math.floor( n / 10); var o = Math.floor(n % 10); if(h !== 9 && h !== 4){ roman += repeat_string('D', Math.floor(h / 5)); roman += repeat_string('C', Math.floor(h % 5)); } else if(h !== 9){ roman += 'CD'; } else { roman += 'CM'; } if(t !== 9 && t !== 4){ roman += repeat_string('L', Math.floor(t / 5)); roman += repeat_string('X', Math.floor(t % 5)); } else if (t !== 9){ roman += 'XL'; } else { roman += 'XC'; } if( o !== 9 && o !== 4){ roman += repeat_string('V', Math.floor( o / 5)); roman += repeat_string('I', Math.floor(o % 5)); } else if ( o !== 9 ){ roman += 'IV'; } else { roman += 'IX'; } return roman; } var n = parseInt($('#number').val(), 10); $('#pre0').text(roman_numeral(n));
pythonの場合。
sample.py
コード(BBEdit)
#!////usr////bin////env python3.3 # -*- coding: utf-8 -*- def roman_numeral(n): roman = 'M' * (n // 1000) n %= 1000 h = n // 100 n %= 100 t = n // 10 o = n % 10 if h != 9 and h != 4: roman += 'D' * (h // 5) roman += 'C' * (h % 5) elif h != 9: roman += 'CD' else: roman += 'CM' if t != 9 and h != 4: roman += 'L' * (t // 5) roman += 'X' * (t % 5) elif t != 9: roman += 'XL' else: roman += 'XC' if o != 9 and o != 4: roman += 'V' * (o // 5) roman += 'I' * (o % 5) elif o != 9: roman += 'IV' else: roman += 'IX' return roman for n in [4,42,458,4569]: print("{0}: {1}".format(n, roman_numeral(n)))
入出力結果(Terminal)
$ ./sample.py 4: IV 42: XXXXII 458: CDXLVIII 4569: MMMMDLXIX $
perlの場合。
sample.pl
コード(BBEdit)
#!/usr/bin/env perl use strict; use warnings; use utf8; use 5.016; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; use POSIX; sub roman_numeral{ my $n = shift; my $roman = 'M' x floor( $n / 1000 ); $n %= 1000; my $h = floor($n / 100); $n %= 100; my $t = floor($n / 10); my $o = $n % 10; if ($h != 9 && $h != 4) { $roman .= 'D' x floor($h / 5); $roman .= 'C' x floor($h % 5); } elsif ($h != 9){ $roman .= 'CD'; } else { $roman .= 'CM'; } if ($t != 9 && $t != 4) { $roman .= 'L' x floor($t / 5); $roman .= 'X' x floor($t % 5); } elsif ($t != 9) { $roman .= 'XL'; } else { $roman .= 'XC'; } if ($o != 9 && $o != 4) { $roman .= 'V' x floor($o / 5); $roman .= 'I' x floor($o % 5); } elsif ($o != 9) { $roman .= 'IV'; } else { $roman .= 'IX'; } $roman; } for(4, 42, 458, 4569){ print $_ . ": " . roman_numeral($_) . "\n"; }
入出力結果(Terminal)
$ ./sample.pl 4: IV 42: XLII 458: CDLVIII 4569: MMMMDLXIX $
0 コメント:
コメントを投稿