重複のないランダムな数列を作る

3日前に書いたコードですが。

max = 300

def makerandarray(max)
  a = Array.new(max){|i| i}
  for i in 0 .. a.size-1 do
    a[i] = "#{a[i]},#{rand}"
  end
  a.sort!{|p,q| p.split(',')[1] <=> q.split(',')[1]}
  for i in 0 .. a.size-1 do
    k = a[i].split(',')
    a[i] = k[0].to_i
  end
  return a
end

def printarray(a)
  for i in 0 .. a.size-1 do
    p a[i]+1
  end
end

arr = makerandarray(max)
printarray(arr)

max = 300はネタです。w
配列の各要素にランダムな重みを割り振ってそれをsortする方法でやってみた。


でそれをちょっと応用すればこんなこともできることに気づいた。

word = [["西",1,0],["",2,0],["",3,0],["",4,0],
["",5,0],["",6,0],["",7,0],["",8,0],["",9,0]]

word.each do |line|
  line[2] = rand
end

q = word.sort{|a,b| a[2]<=>b[2]}

qword = ""
q.each do |line|
  qword += line[0]
end

printf("%s?\n",qword)

○-T○IP氏に捧ぐ。w

追記

>nyaxtのひと
1行…!orz

さらに追記

西9条山公園線旭通 -> ?
の家積慶あに善余り -> ?
rrrCfoaue -> ?
術祭教火芸L祖P花 -> ?
し匹鳴山一動鼠大て -> ?
バリズオ・ンドル -> ?

こんなのができちゃったよ!後半思いつかなくてgdgdになってるけど!