2012年4月22日日曜日

開発環境

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

その他参考書籍

組み込みクラスの拡張(配列メソッドにshuffleメソッドを追加)

コード(TextWrangler)

#!/usr/bin/env ruby
#encoding: utf-8

class Array
  def shuffle
    some_array = self
    recursive_array some_array, []
  end
  
  private
  
  def recursive_array unshuffled_array, shuffled_array
    return shuffled_array if unshuffled_array.length == 0
    r = rand(unshuffled_array.length)
    tmp = []
    i = 0
    while i < unshuffled_array.length
      if i == r
        shuffled_array.push unshuffled_array[i]
      else
        tmp.push unshuffled_array[i]
      end
      i += 1
    end
    recursive_array tmp, shuffled_array
  end
end

5.times do
  [[1,2,3,4,5,6,7,8,9,10],
    ['a','b','c','d','e','f','g','h','i','j']
  ].each do |some_array|
    puts "配列        : #{some_array}"
    puts "シャッフル後: #{some_array.shuffle}"
  end
end

入出力結果(Terminal)

$ ./sample.rb
配列        : 12345678910
シャッフル後: 37108125964
配列        : abcdefghij
シャッフル後: hfgbjaidce
配列        : 12345678910
シャッフル後: 51047238916
配列        : abcdefghij
シャッフル後: bafcdjiehg
配列        : 12345678910
シャッフル後: 82734961015
配列        : abcdefghij
シャッフル後: hicaegfjbd
配列        : 12345678910
シャッフル後: 41893102567
配列        : abcdefghij
シャッフル後: fbeihadgjc
配列        : 12345678910
シャッフル後: 65210479318
配列        : abcdefghij
シャッフル後: cjgehfibad
$

今回の周ではirb(インタラクティブRuby)も少しずつ活用してみることに。

まだ上記の本を入手してないのでまた最初から。

本書を続けつつ、上記の本を早く入手してそっちに切り替え。

0 コメント:

コメントを投稿