2013年3月1日金曜日

開発環境

『初めてのプログラミング 第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
    result = 'M' * (n / 1000)
    n = n % 1000
    result += 'D' * (n / 500)
    n = n % 500
    result += 'C' * (n / 100)
    n = n % 100
    result += 'L' * (n / 50)
    n = n % 50
    result += 'X' * (n / 10)
    n = n % 10
    result += 'V' * (n / 5)
    n = n % 5
    result += 'I' * n
    result
end
puts old_roman_numeral 4
puts old_roman_numeral 1234

入出力結果(Terminal)

$ ./sample.rb
IIII
MCCXXXIIII
$

ちなみにJavaScriptの場合。

コード(BBEdit)

var n = parseInt($('#t0').val(), 10),
    oldRomanNumeral = function( n ) {
        var result = new Array( Math.floor(n / 1000) + 1).join('M');
        n %= 1000;
        result += new Array( Math.floor(n / 500) + 1).join('D');
        n %= 500;
        result += new Array( Math.floor(n / 100) + 1).join('C');
        n %= 100;
        result += new Array( Math.floor(n / 50) + 1).join('L');
        n %= 50;
        result += new Array( Math.floor( n / 10 ) + 1 ).join('X');
        n %= 10;
        result += new Array( Math.floor(n / 5 ) + 1).join('V');
        n %= 5;
        result += new Array( n + 1 ).join('I');
        return result;
    };
$('#pre0').text(oldRomanNumeral(n));




pythonの場合。

sample.py

コード(BBEdit)

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

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

for x in [4, 1234]:
    print(oldRomanNumeral(x))

入出力結果(Terminal)

$ ./sample.py
IIII
MCCXXXIIII
$

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 oldRomanNumeral {
    my $n = shift;
    my $result = 'M' x floor($n / 1000);
    $n = $n % 1000;
    $result .= 'D' x floor($n / 500);
    $n = $n % 500;
    $result .= 'C' x floor($n / 100);
    $n = $n % 100;
    $result .= 'L' x floor($n / 50);
    $n = $n % 50;
    $result .= 'X' x floor($n / 10);
    $n = $n % 10;
    $result .= 'V' x floor($n / 5);
    $n = $n % 5;
    $result .= 'I' x $n;
    $result;
}

for  ((4,1234)) {
    printf "%s\n", oldRomanNumeral $_;
}

入出力結果(Terminal)

$ ./sample.pl
IIII
MCCXXXIIII
$

0 コメント:

コメントを投稿