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