Chinaunix
标题:
[练习] 1A2B 猜数字游戏
[打印本页]
作者:
rubyish
时间:
2013-12-01 05:44
标题:
[练习] 1A2B 猜数字游戏
问题:
由
player
生成一个由0-9组成的四位数给电脑猜。
规则:可以由0开头,不能有重复数字,比如1123就不符合规则,0123符合规则。
电脑每猜一个数字,player 就根据这个数字给出几A几B。
直到电脑猜中(即 4A0B)为止。
计分规则:
player 输入 4A0B为最后一步,而不是以已经知道答案那一步为最后一步。
电脑 1 步猜中,player 得到 0 分
电脑 2 步猜中,player 得到 1 分
...
电脑 8 步猜中,player 得到 7 分
作者:
rubyish
时间:
2013-12-04 04:50
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'
复制代码
作者:
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