永井@知能.九工大です.

From: ktokita <ktokita-p / pajya.net>
Subject: [ruby-list:40902] Re: 配列をシャッフル
Date: Sat, 2 Jul 2005 02:39:55 +0900
Message-ID: <20050702023930.87A8.KTOKITA-P / pajya.net>
> んー、なんでreverseが入るのかがわからなかった
> reverseするのではなく、
> 通常 切った片方 下の部分を更に分割して下の部分を上にのせる
> この処理をすっかり忘れていました^^;

よくわからないんですが,人がトランプを切り混ぜるのを真似するというなら
こんな感じですかね?
------------------------------------------------
def shuffle1(a,time=1)
  size = a.size - 1
  time.times{
    x = rand(size)
    y = rand(size - x) + 1
    b = a.slice!(x + 1, y)
    a[0,0] = b
  }
  a
end

def shuffle2(a,time=1)
  size = a.size/2
  time.times{
    x = rand(size)
    b = a.slice!(0..x)
    a.replace(a.zip(b).flatten!.compact)
  }
  a
end

def cut(a)
  x = rand(a.size-1)
  b = a.slice!(0..x)
  a.concat(b)
end

array = ["a", "b", "c", "d", "e", "f", "g", "h"]
p shuffle1(array,10)
p shuffle2(array,10)
p cut(array)
------------------------------------------------
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai / ai.kyutech.ac.jp