2012年9月13日木曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13(新しいクラスの作成と既存クラスの変更), 13.1(練習問題)、組み込みクラスの拡張 を解いてみる。

その他参考書籍

組み込みクラスの拡張

コード(TextWrangler)

sample.rb

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

class Array
  def shuffle
    shuffle_tmp self,[]
  end
  
  private
  def shuffle_tmp unshuffled_array,shuffled_array
    array = Array.new(unshuffled_array)
    return shuffled_array if unshuffled_array.length <= 0
    l = unshuffled_array.length
    r = rand(l)
    tmp = []
    shuffled_array.push unshuffled_array[r]
    (0...l).each do |i|
      tmp.push unshuffled_array[i] unless i == r
    end
    shuffle_tmp tmp,shuffled_array
  end
end

class Integer
  def to_roman
    num = self
    roman = ""
    tho = num / 1000
    num = num % 1000
    hun = num / 100
    num = num % 100
    ten = num / 10
    num = num % 10
    one = num
    roman += "M" * tho
    if hun == 9
      roman += "CM"
    elsif hun == 4
      roman += "CD"
    else
      roman += "D" * (hun / 5)
      hun = hun % 5
      roman += "C" * hun
    end
    if ten == 9
      roman += "XC"
    elsif ten == 4
      roman += "XL"
    else
      roman += "L" * (ten / 5)
      ten = ten % 5
      roman += "X" * ten
    end
    if one == 9
      roman += "IX"
    elsif one == 4
      roman += "IV"
    else
      roman += "V" * (one / 5)
      one = one % 5
      roman += "I" * one
    end
    roman
  end
  
  def factorial
    number = self
    return number if number <= 1
    return number * (number - 1).factorial
  end
end

strings = %w[A B C D E a b c d e]
numbers = [1,2,3,4,5,6,7,8,9,0]
[strings,numbers].each do |array|
  shuffled = array.shuffle
  puts "ソート前: #{array.join(', ')}"
  puts "ソート後: #{shuffled.join(', ')}"
end

(1..100).each do |number|
  puts "#{number}: #{number.to_roman}"
end

(1..10).each do |number|
  puts "#{number}! = #{number.factorial}"
end

入出力結果(Terminal)

$ ./sample.rb
ソート前: A, B, C, D, E, a, b, c, d, e
ソート後: E, D, d, c, b, e, C, B, A, a
ソート前: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
ソート後: 7, 8, 4, 2, 1, 5, 3, 0, 6, 9
1: I
2: II
3: III
4: IV
5: V
6: VI
7: VII
8: VIII
9: IX
10: X
11: XI
12: XII
13: XIII
14: XIV
15: XV
16: XVI
17: XVII
18: XVIII
19: XIX
20: XX
21: XXI
22: XXII
23: XXIII
24: XXIV
25: XXV
26: XXVI
27: XXVII
28: XXVIII
29: XXIX
30: XXX
31: XXXI
32: XXXII
33: XXXIII
34: XXXIV
35: XXXV
36: XXXVI
37: XXXVII
38: XXXVIII
39: XXXIX
40: XL
41: XLI
42: XLII
43: XLIII
44: XLIV
45: XLV
46: XLVI
47: XLVII
48: XLVIII
49: XLIX
50: L
51: LI
52: LII
53: LIII
54: LIV
55: LV
56: LVI
57: LVII
58: LVIII
59: LIX
60: LX
61: LXI
62: LXII
63: LXIII
64: LXIV
65: LXV
66: LXVI
67: LXVII
68: LXVIII
69: LXIX
70: LXX
71: LXXI
72: LXXII
73: LXXIII
74: LXXIV
75: LXXV
76: LXXVI
77: LXXVII
78: LXXVIII
79: LXXIX
80: LXXX
81: LXXXI
82: LXXXII
83: LXXXIII
84: LXXXIV
85: LXXXV
86: LXXXVI
87: LXXXVII
88: LXXXVIII
89: LXXXIX
90: XC
91: XCI
92: XCII
93: XCIII
94: XCIV
95: XCV
96: XCVI
97: XCVII
98: XCVIII
99: XCIX
100: C
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
$

0 コメント:

コメントを投稿