数当てゲーム

てけとー。

#!/bin/ruby
#
#=数当てゲーム
#
#Authors:: Leigh_hakuro
#Version:: 0.1 2009-01-16
#

#0から9までの文字列を格納した配列を作成
number = Array("0".."9")

#randomエントロピーデバイスでseed取得(Linuxなら使えることが多い)
t = Time.now
srand(t.sec ^ t.usec ^ Process.pid)

#Rubyのバージョンが1.8.6以上の場合shuffleが使える
if RUBY_VERSION >= "1.8.6" then
  #配列の内容をランダムに並べかえ
  number.shuffle!
else
  number.each_index{|i|
    j = rand(i+1)
    array[i], array[j] = array[j], array[i]
  }
end

#配列から先頭4つを抜き出して答えを決定
answer = number[0..3]

5.times{
  puts "4桁の番号を入力してね"

  #入力された文字列から数字以外を削除し、先頭の4文字を格納した配列を作成
  ans_size = answer.size
  input = gets.gsub(/\D/, "").split(//)[0..ans_size] while input.size < ans_size

  cow = 0  #位置も数字も同じ
  bull = 0 #数字が同じ

  #配列の共通要素数をもとめる
  cow = (input & answer).size

  #配列の位置と数字が合っている数をもとめる
  answer.each_index{|i|
    bull += 1 if input[i] == answer[i]
  }

  #bullとの重複分を引く
  cow -= bull

  #表示
  puts "bull:#{bull}"
  puts "cow:#{cow}"
  puts
  break if input == answer
}

puts "answer:#{answer}"