10章 再帰とこれまでの復習にて、無事イニシエーションを潜り抜けて立ち向かうが今回の 10.3に項目立てらる練習問題を引用すれば、
10.1 再帰
10.2 通過儀礼:並べ替え(ソート)
10.3 練習問題
10.4 例をもう1つ
10.5 追加練習問題
配列を取ってそれを完全にシャッフルして返す、 shuffleというメソッドを書いて下さい。とあり、此れを章意に沿って、 再帰を用いて作成するを今回は当方解答例として供すべく積りにてあります。
スポンサーリンク
class Array
def sort
# このメソッドは「recursive_sort」をラップする。
# ´[]´を引数に渡すのを防ぐ為
shuffle_sort self, []
end
# シャッフル・ソート・メソッド
def shuffle_sort unsorted_array, sorted_array
shuffle = ´´ #ランダム抽出単語
tmp_sorted_array = [] #一時保存用配列
randam_num = rand(unsorted_array.size)
if unsorted_array.size > 1
i = 0
unsorted_array.size.times do
if i == randam_num
shuffle = unsorted_array[i]
else
tmp_sorted_array.push unsorted_array[i]
end
i += 1
end
else
shuffle = unsorted_array[0]
end
sorted_array.push shuffle
if unsorted_array.size > 1
#再帰
shuffle_sort(tmp_sorted_array, sorted_array)
else
puts sorted_array.join(´, ´)
end
end
end
# ユーザー入力取得ブロック
word = []
while word.last != ´´
puts ´シャッフルしたい単語を入力!´
puts ´結果閲覧:無入力=>ENTER押下´
word.push gets.chomp
end
word.pop
# シャッフルソート及び結果表示ブロック
word.sort
上記プログラムを、現在と云えども最早二年前のものとなる手元Windows環境
def sort
# このメソッドは「recursive_sort」をラップする。
# ´[]´を引数に渡すのを防ぐ為
shuffle_sort self, []
end
# シャッフル・ソート・メソッド
def shuffle_sort unsorted_array, sorted_array
shuffle = ´´ #ランダム抽出単語
tmp_sorted_array = [] #一時保存用配列
randam_num = rand(unsorted_array.size)
if unsorted_array.size > 1
i = 0
unsorted_array.size.times do
if i == randam_num
shuffle = unsorted_array[i]
else
tmp_sorted_array.push unsorted_array[i]
end
i += 1
end
else
shuffle = unsorted_array[0]
end
sorted_array.push shuffle
if unsorted_array.size > 1
#再帰
shuffle_sort(tmp_sorted_array, sorted_array)
else
puts sorted_array.join(´, ´)
end
end
end
# ユーザー入力取得ブロック
word = []
while word.last != ´´
puts ´シャッフルしたい単語を入力!´
puts ´結果閲覧:無入力=>ENTER押下´
word.push gets.chomp
end
word.pop
# シャッフルソート及び結果表示ブロック
word.sort
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
で走らせて得られる結果は、
orange、kiwi、banana、apple、pineapple、peach
の順に単語を入力すれば、
C:¥tsukamotch¥Ruby¥programs>shuffle.rb
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
orange
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
kiwi
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
banana
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
apple
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
pineapple
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
peach
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
orange, kiwi, peach, banana, pineapple, apple
との結果が得られるが一回目、
扠、二回目は同様にして、実施して列挙すば以下、
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
orange
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
kiwi
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
banana
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
apple
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
pineapple
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
peach
シャッフルしたい単語を入力!
結果閲覧:無入力=>ENTER押下
orange, kiwi, peach, banana, pineapple, apple
- orange, kiwi, peach, banana, pineapple, apple
- peach, orange, banana, apple, pineapple, kiwi
- peach, apple, orange, banana, kiwi, pineapple
- pineapple, peach, banana, orange, apple, kiwi
- peach, kiwi, apple, banana, orange, pineapple
- peach, pineapple, apple, banana, kiwi, orange
- kiwi, pineapple, banana, apple, orange, peach
- apple, peach, kiwi, banana, orange, pineapple
- kiwi, banana, orange, pineapple, peach, apple
- banana, pineapple, orange, apple, peach, kiwi
- kiwi, banana, orange, apple, pineapple, peach
- banana, pineapple, kiwi, orange, peach, apple
- kiwi, orange, peach, banana, apple, pineapple
- apple, banana, pineapple, kiwi, peach, orange
- peach, apple, orange, pineapple, banana, kiwi
- peach, pineapple, orange, apple, kiwi, banana
- orange, apple, kiwi, banana, peach, pineapple
- apple, pineapple, kiwi, orange, peach, banana
- apple, kiwi, banana, pineapple, peach, orange
- banana, peach, pineapple, kiwi, apple, orange
- pineapple, peach, kiwi, apple, banana, orange
- apple, banana, kiwi, pineapple, peach, orange
- banana, kiwi, orange, pineapple, apple, peach
- orange, peach, kiwi, banana, pineapple, apple
- banana, orange, peach, apple, pineapple, kiwi
- orange, banana, peach, apple, kiwi, pineapple
- kiwi, peach, apple, pineapple, banana, orange
- kiwi, pineapple, peach, banana, orange, apple
- peach, banana, orange, pineapple, apple, kiwi
- peach, apple, banana, pineapple, kiwi, orange
- orange, banana, apple, kiwi, pineapple, peach
- banana, orange, pineapple, apple, kiwi, peach
- pineapple, kiwi, apple, orange, banana, peach
- orange, peach, apple, banana, pineapple, kiwi
- banana, peach, orange, apple, kiwi, pineapple
- kiwi, apple, orange, peach, banana, pineapple
- apple, peach, orange, kiwi, banana, pineapple
- banana, kiwi, apple, peach, pineapple, orange
- banana, peach, apple, orange, kiwi, pineapple
- peach, banana, apple, orange, pineapple, kiwi
- peach, orange, banana, apple, kiwi, pineapple
- pineapple, banana, kiwi, peach, orange, apple
- orange, banana, apple, peach, pineapple, kiwi
- banana, apple, peach, orange, pineapple, kiwi
- apple, peach, orange, kiwi, banana, pineapple
- apple, pineapple, orange, kiwi, banana, peach
- peach, apple, pineapple, orange, kiwi, banana
- kiwi, orange, peach, pineapple, banana, apple
- peach, pineapple, banana, apple, kiwi, orange
- pineapple, peach, orange, banana, kiwi, apple
- kiwi, orange, banana, peach, apple, pineapple
- peach, apple, banana, kiwi, pineapple, orange
- kiwi, pineapple, peach, apple, orange, banana
- banana, apple, pineapple, peach, orange, kiwi
- apple, banana, kiwi, peach, pineapple, orange
- orange, peach, apple, banana, pineapple, kiwi
- peach, apple, kiwi, pineapple, banana, orange
- orange, kiwi, banana, pineapple, apple, peach
- banana, pineapple, kiwi, orange, peach, apple
- orange, kiwi, banana, apple, peach, pineapple
- pineapple, banana, kiwi, apple, orange, peach
- orange, apple, kiwi, pineapple, peach, banana
- peach, pineapple, kiwi, orange, banana, apple
- apple, peach, orange, banana, pineapple, kiwi
- peach, banana, apple, pineapple, kiwi, orange
- peach, kiwi, pineapple, orange, apple, banana
- orange, peach, apple, kiwi, banana, pineapple
- apple, kiwi, orange, peach, banana, pineapple
- apple, kiwi, banana, peach, pineapple, orange
- peach, kiwi, banana, orange, apple, pineapple
- pineapple, kiwi, orange, peach, banana, apple
- peach, kiwi, apple, pineapple, orange, banana
- orange, kiwi, pineapple, apple, banana, peach
- pineapple, peach, kiwi, banana, orange, apple
- banana, apple, kiwi, peach, pineapple, orange
- apple, orange, pineapple, kiwi, peach, banana
- apple, orange, kiwi, banana, pineapple, peach
- banana, orange, pineapple, peach, apple, kiwi
- orange, banana, apple, pineapple, kiwi, peach
- peach, banana, orange, pineapple, kiwi, apple
- orange, pineapple, peach, kiwi, apple, banana
- apple, kiwi, pineapple, peach, banana, orange
- pineapple, banana, orange, peach, kiwi, apple
- peach, banana, pineapple, kiwi, apple, orange
- apple, peach, kiwi, banana, orange, pineapple
- kiwi, peach, pineapple, banana, apple, orange
- apple, peach, orange, kiwi, banana, pineapple
- orange, apple, pineapple, kiwi, banana, peach
- banana, peach, pineapple, kiwi, orange, apple
- kiwi, peach, orange, banana, pineapple, apple
- kiwi, banana, pineapple, orange, peach, apple
- orange, kiwi, apple, banana, peach, pineapple
- pineapple, peach, orange, kiwi, apple, banana
- peach, orange, banana, pineapple, kiwi, apple
- banana, pineapple, peach, apple, kiwi, orange
- orange, kiwi, pineapple, banana, apple, peach
- pineapple, kiwi, peach, orange, banana, apple
- pineapple, orange, peach, banana, apple, kiwi
- pineapple, apple, orange, kiwi, banana, peach
- kiwi, apple, orange, pineapple, banana, peach
- orange, peach, pineapple, kiwi, banana, apple
- banana, kiwi, apple, orange, peach, pineapple
- peach, pineapple, orange, banana, apple, kiwi
- banana, peach, kiwi, apple, pineapple, orange
- apple, kiwi, banana, pineapple, peach, orange
- kiwi, orange, pineapple, peach, banana, apple
- peach, orange, kiwi, pineapple, banana, apple
いつものように、作り終わったらテストするべきなのですが、 それには少し技がいると思います。 完全にシャッフルしてあると確認するにはどうすればよいのでしょう? というより、完全なシャッフルとはどういうことを言うのでしょうか? それについてもテストしてみましょう。と引用されるこそ、前半を受けたる常とは異なる様相の、 完全なシャッフルと問われれば全くの思考停止に陥るは、 例えば、操作の前後で配列が入れ替わる、入力と出力が異なれば即ち是シャッフルと云わば、 では、可也の低確率なれど操作の前後で形が揃うが無きにしも有らずとて、 例えば、何某かの配列を変えんとする操作が加われば是シャッフルと云わば、 正しく手品使いのトランプ操作もシャッフルなれど、此れに賛意を示される方の有られるや否や、 と、何うにも堂々巡りのケージ内でランニングホイールを回す栗鼠状態にて、 此処にランダムとシャッフルのアナロジーは別にして、 ランダム関数を利用してシャッフルを実現せんとせば、 コンピュータ上に完全なるランダムの現出の不可能なるを屡聞き及べば、 即ちシャッフルとて其の影響を受けざるを得ず、 検証するに例えばSLAかの如く、処理を繰り返すに当たり、 入力と同配列の出力される確率を百分率にて任意の数値以下に抑えると考えれども、 扠、其処に規則性の有り哉無し哉は、 ガウスやポワンカレ及びペレリマン抔の天才ならぬ凡人たる身には推し量るに及ばず、 此処に灰色の脳細胞は凍結たりて有効なアーカイバは存在しないのであります。
此れは少々入門書と申すには敷居の高く感じられれば幾許かにもヒントが欲しかったとの愚痴と共に、 今回は申し訳なくも悪しからず。
ブログ上で様々な言語を実行可能なAPI
当アーティクルタイトルに限った使用法に無きにしは勿論のことなるも、取敢えず自らの理解の為に、先ずは此の如き使用法もありとて、入門的に試用が、404 Blog Not Found運営のアルファブロガー小飼弾氏が提供されるAjax – llevalのサポート言語がさらに増えましたの余りの素
アルファベットソート関数ダウングレード
初めてのプログラミング当ブログのカテゴリーにも誂える初めてのプログラミングにアーティクルを順次、Ruby及びプログラミングの両者共に入門書として有用なるとは屡ご紹介の初めてのプログラミングに従いエントリを進捗すべき図った積りが、投稿間隔の開くに因ってか、遂に
江戸時代のプログラマー現出せり