Chinaunix

标题: [练习] 1A2B 猜数字游戏 [打印本页]

作者: rubyish    时间: 2013-12-01 05:44
标题: [练习] 1A2B 猜数字游戏
问题:

player 生成一个由0-9组成的四位数给电脑猜。
规则:可以由0开头,不能有重复数字,比如1123就不符合规则,0123符合规则。
电脑每猜一个数字,player 就根据这个数字给出几A几B。
直到电脑猜中(即 4A0B)为止。

计分规则:

作者: rubyish    时间: 2013-12-04 04:50
v1:
  1. #!/usr/bin/ruby -w
  2. $gather = ('0123' .. '9876').reject {|x| x =~ /(\d).*\1/ }
  3. $score  = -1

  4. def get snum, nscore
  5.   loop do
  6.     print "#{nscore} | #{snum} | AB = "
  7.     sab = gets.scan(/^\s*(\d)\s*(\d)\s*$/).flatten
  8.     return sab if sab.size == 2 && sab[0].to_i + sab[1].to_i <= 4
  9.     puts "#{nscore} | wrong  AB !"
  10.   end
  11. end

  12. def guess
  13.   spick, apick = $gather.sample, []
  14.   sA, sB = get spick, $score += 1
  15.   $score -= 1 if sA == ?4
  16.   for g in $gather
  17.     sa  = (0 .. 3).select {|s| spick[s] == g[s] }.size
  18.     sA.to_i == sa or next
  19.     sab = (g.split(//) & spick.split(//)).size
  20.     sab - sa == sB.to_i and apick << g
  21.   end
  22.   $gather = apick
  23. end

  24. while $gather.size > 1 do guess end
  25. puts $gather.size >= 1 ?
  26.   ($score += 1).to_s << " [ #{$gather[0]} ] score = #{$score}" :
  27.   'you liar'
复制代码

作者: lightsorrow    时间: 2013-12-04 10:07
哪兒來的題目?看你發了好多了
作者: rubyish    时间: 2013-12-05 07:03
回复 3# lightsorrow

perl ban~
   
作者: lightsorrow    时间: 2013-12-05 10:32
回复 4# rubyish
你從perler轉ruby了?爲什麼?


   
作者: rubyish    时间: 2013-12-05 22:50
回复 5# lightsorrow

~
不,这不是真的,只是在我的红宝石练习的东西
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2