開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13(新しいクラスの作成と既存クラスの変更), 13.1(練習問題)、組み込みクラスの拡張 を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
組み込みクラスの拡張
コード(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 コメント:
コメントを投稿