2013年1月22日火曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 9章(自作メソッドの書き方), 9.5(練習問題)古典的なローマ数字 を解いてみる。

その他参考書籍

古典的なローマ数字

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-

def old_roman_numeral n
  roman = ""
  roman += 'M' * (n / 1000)
  n = n % 1000
  roman += 'D' * (n / 500)
  n = n % 500
  roman += 'C' * (n / 100)
  n = n % 100
  roman += 'L' * (n / 50)
  n = n % 50
  roman += 'X' * (n / 10)
  n = n % 10
  roman += 'V' * (n / 5)
  roman += 'I' * (n % 5)
  roman
end

[4,45,456,4567].each do |n|
  puts "#{n}: #{old_roman_numeral n}"
end

入出力結果(Terminal)

#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-

def old_roman_numeral n
  roman = ""
  roman += 'M' * (n / 1000)
  n = n % 1000
  roman += 'D' * (n / 500)
  n = n % 500
  roman += 'C' * (n / 100)
  n = n % 100
  roman += 'L' * (n / 50)
  n = n % 50
  roman += 'X' * (n / 10)
  n = n % 10
  roman += 'V' * (n / 5)
  roman += 'I' * (n % 5)
  roman
end

[4,45,456,4567].each do |n|
  puts "#{n}: #{old_roman_numeral n}"
end

ちなみにJavaScriptの場合。

コード(BBEdit)

String.prototype.repeat = function(n){
    var result = "";
 for(var i = 0; i < n; i++){
  result += this;
 }
 return result;
};
var old_roman_numeral = function(n){
 var roman = 'M'.repeat(Math.floor(n / 1000));
 n %= 1000;
 roman += 'D'.repeat(Math.floor(n / 500));
 n %= 500;
 roman += 'C'.repeat(Math.floor(n / 100));
 n %= 100;
 roman += 'L'.repeat(Math.floor(n / 50));
 n %= 50;
 roman += 'X'.repeat(Math.floor(n / 10));
 n %= 10;
 roman += 'V'.repeat(Math.floor(n / 5));
 roman += 'I'.repeat( n % 5);
 return roman;
};
var n = parseInt($('#number').val(), 10);
$('#pre0').text(old_roman_numeral(n));
$('#number').css('text-align', 'right');




pythonの場合。

sample.py

コード(BBEdit)

#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-

def old_roman_numeral(n):
    roman = 'M' * (n // 1000)
    n = n % 1000
    roman += 'D' * (n // 500)
    n = n % 500
    roman += 'C' * (n // 100)
    n = n % 100
    roman += 'L' * (n // 50)
    n = n % 50
    roman += 'X' * (n // 10)
    n = n % 10
    roman += 'V' * (n // 5)
    roman += 'I' * (n % 5)
    return roman

for n in [4,45,456,4567]:
 print("{0}: {1}".format(n, old_roman_numeral(n)))

入出力結果(Terminal)

$ ./sample.py
4: IIII
45: XXXXV
456: CCCCLVI
4567: MMMMDLXVII
$

perlの場合。

sample.pl

コード(BBEdit)

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

sub old_roman_numeral{
 my $n = shift;
 my $roman = 'M' x ( $n / 1000 );
 $n = $n % 1000;
 $roman .= 'D' x ( $n / 500 );
 $n = $n % 500;
 $roman .= 'C' x ( $n / 100 );
 $n = $n % 100;
 $roman .= 'L' x ( $n / 50 );
 $n = $n % 50;
 $roman .= 'X' x ($n / 10);
 $n = $n % 10;
 $roman .= 'V' x ($n / 5 );
 $roman .= 'I' x ($n % 5);
 $roman;
}

for(4, 45, 456, 4567){
 print $_ . ": " . old_roman_numeral($_) . "\n";
}

入出力結果(Terminal)

$ ./sample.pl
4: IIII
45: XXXXV
456: CCCCLVI
4567: MMMMDLXVII
$

0 コメント:

コメントを投稿