開発環境
- 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 コメント:
コメントを投稿