- 论坛徽章:
- 7
|
v1:- #!/usr/bin/ruby -w
- $gather = ('0123' .. '9876').reject {|x| x =~ /(\d).*\1/ }
- $score = -1
- def get snum, nscore
- loop do
- print "#{nscore} | #{snum} | AB = "
- sab = gets.scan(/^\s*(\d)\s*(\d)\s*$/).flatten
- return sab if sab.size == 2 && sab[0].to_i + sab[1].to_i <= 4
- puts "#{nscore} | wrong AB !"
- end
- end
- def guess
- spick, apick = $gather.sample, []
- sA, sB = get spick, $score += 1
- $score -= 1 if sA == ?4
- for g in $gather
- sa = (0 .. 3).select {|s| spick[s] == g[s] }.size
- sA.to_i == sa or next
- sab = (g.split(//) & spick.split(//)).size
- sab - sa == sB.to_i and apick << g
- end
- $gather = apick
- end
- while $gather.size > 1 do guess end
- puts $gather.size >= 1 ?
- ($score += 1).to_s << " [ #{$gather[0]} ] score = #{$score}" :
- 'you liar'
复制代码 |
|