読者です 読者をやめる 読者になる 読者になる

毛のはえたようなもの

インターネット的なものをつらつらとかきつらねる。

Hit and Blow(数当てゲーム)

Ruby

書いても誰も得しないソース公開所ゴミ箱ことこのサイト。
今日は数当てゲームです。

ルール

超有名ですが一応説明を。
互いに相異なる4つ数を当てるゲーム。用意された答えにたいしてユーザが数を入力する。その際、種類のみ合っていた(Blow)数と、場所・種類ともに合っていた(Hit)数が教えてもらえる。それらから類推して用意された答えを導き出すゲーム、です。
例えば答えが「4216」,ユーザの入力が「1234」だったらHit=1,Blow=2です。

ソース

def make_answer
  list = [0,1,2,3,4,5,6,7,8,9]
  answer =[]
  while answer.size < 4
    rand_num = rand(list.size-1)
    answer << list[rand_num]
    list.delete_at(rand_num)
    end
  return answer
end

def check(user,answer)
  hit,blow=0,0
  4.times{|i| hit +=1 if user[i] == answer[i] }
  answer.each{|item_ans|
    user.each{|item_user| blow +=1 if item_ans == item_user}
  }
  blow -= hit
  return [hit, blow]
end
  

answer =  make_answer
p "== Hit and Blow =="
p "Please enter number (4-digit)"

try_times =0

loop{
  try_times +=1
  printf("try %d ::",try_times)
  user = $stdin.gets.chomp!.unpack("a1a1a1a1").collect{|i| i.to_i}
  h_b = check(user,answer)
  if h_b[0] == 4
    p "You win!"
    break
  else
    p "   hit:#{h_b[0]}  blow:#{h_b[1]}"
  end
}

まあ私が書かなくても誰か書いているという

プログラミングスレまとめ in VIP - Ruby:初心者用課題解答例