今回は配列をでたらめに並び替えるという処理を行います。 これにも目的があります。いつも規則正しく並べるのに飽きたとかそんな理由じゃあないのです。 何に使うのかは付録で述べるとして、ひとまずコードを示しましょう。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 |
#! ruby -Ks #Shirao #ランダムに並べ替え def main() while true print "Input sting : " s = gets.chomp break if s.size == 0 #空行で終了 ary = s.scan(/./) randSort(ary) ary.each{|r| print r} puts end end #配列のランダムソート def randSort( ary ) i = ary.size temp = 0; idx = 0 while 0 < i idx = rand(i) #末尾とidxを入れ替える temp = ary[idx]; ary[idx] = ary[i-1]; ary[i-1] = temp i-=1 end end main |
Rubyでは、rand(
number)
で
number未満の数をランダムで返します。
Rubyで文字列から一文字一要素の配列を作るには、str.scan(/./)
とすれば簡潔です。
実際にこれを文字列に作用させた例を示します。
オブジェクト指向スクリプト言語 Ruby Convert ↓ スブ 向u bプ指ククトジリトェyオ言語R
これは、重複なしにコーパスからデータの集合を作るときに便利です。このときは当然
ほしいn個ソートしたらそこを取り出します。このとき配列の要素はファイル名となります。
他にはゲームの処理にも使えそうですね。
今回の文字列のソートだけでも工夫次第でミニゲーム程度にはなりそうだと思いました。
Rubyソースコードを置いておきます。