開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の10章(章全部で復習), 10.3(練習問題)シャッフルを解いてみる。
その他参考書籍
シャッフル
再帰を使ったもの。
コード(TextWrangler)
#!/usr/bin/env ruby
#encoding: utf-8
def shuffle some_array
recursive_shuffle some_array, []
end
def recursive_shuffle some_array, shuffled_array
return shuffled_array if some_array.length == 0
l = some_array.length
r = rand(l)
tmp_array = []
(0..(l-1)).each do |i|
if r == i
shuffled_array.push some_array[i]
else
tmp_array.push some_array[i]
end
end
recursive_shuffle tmp_array, shuffled_array
end
array = [0,1,2,3,4,5,6,7,8,9]
puts array
5.times do
puts '再帰でシャッフル'
puts shuffle array
end
入出力結果(Terminal)
$ ./ruby_program.rb 0 1 2 3 4 5 6 7 8 9 再帰でシャッフル 4 2 1 6 7 5 8 0 3 9 再帰でシャッフル 1 6 0 2 3 8 9 5 4 7 再帰でシャッフル 9 3 5 1 7 6 8 2 0 4 再帰でシャッフル 2 0 5 7 1 8 6 4 9 3 再帰でシャッフル 1 5 8 6 7 4 3 9 0 2 $
再帰を使わないバージョン。
コード(TextWrangler)
#!/usr/bin/env ruby
#encoding: utf-8
def shuffle some_array
shuffled_array = []
while some_array.length > 0
l = some_array.length
r = rand(l)
tmp_array = []
(0..(l-1)).each do |i|
if r == i
shuffled_array.push some_array[i]
else
tmp_array.push some_array[i]
end
end
some_array = tmp_array
end
shuffled_array
end
array = [0,1,2,3,4,5,6,7,8,9]
puts array
5.times do
puts 'シャッフル'
puts shuffle array
end
もちろん入出力結果は再帰のバージョンと同じ。
入出力結果(Terminal)
./ruby_program.rb 0 1 2 3 4 5 6 7 8 9 シャッフル 2 3 9 8 5 7 0 4 1 6 シャッフル 0 6 2 1 5 4 3 9 8 7 シャッフル 5 9 3 1 7 6 2 0 8 4 シャッフル 9 7 5 4 6 1 3 2 8 0 シャッフル 8 4 5 6 0 2 1 9 7 3 $
本書を続けつつ、上記の本を入手したらそっちに切り替え。
0 コメント:
コメントを投稿