Jump to content

Bulls and cows/Player: Difference between revisions

→‎Tcl: Added implementation
m (disambiguate link)
(→‎Tcl: Added implementation)
Line 80:
1549 -> (0, 0)
3627 -> (1, 0)</pre>
 
=={{header|Tcl}}==
{{libheader|tcllib}}
<lang tcl>package require struct::list
package require struct::set
 
proc scorecalc {guess chosen} {
set bulls 0
set cows 0
foreach g $guess c $chosen {
if {$g eq $c} {
incr bulls
} elseif {$g in $chosen} {
incr cows
}
}
return [list $bulls $cows]
}
 
# Allow override on command line
set size [expr {$argc ? int($argv) : 4}]
 
set choices {}
struct::list foreachperm p [split 123456789 ""] {
struct::set include choices [lrange $p 1 $size]
}
set answers {}
set scores {}
 
puts "Playing Bulls & Cows with $size unique digits\n"
fconfigure stdout -buffering none
while 1 {
set ans [lindex $choices [expr {int(rand()*[llength $choices])}]]
lappend answers $ans
puts -nonewline \
"Guess [llength $answers] is [join $ans {}]. Answer (Bulls, cows)? "
set score [scan [gets stdin] %d,%d]
lappend scores $score
if {$score eq {4 0}} {
puts "Ye-haw!"
break
}
foreach c $choices[set choices {}] {
if {[scorecalc $c $ans] eq $score} {
lappend choices $c
}
}
if {![llength $choices]} {
puts "Bad scoring? nothing fits those scores you gave:"
foreach a $answers s $scores {
puts " [join $a {}] -> ([lindex $s 0], [lindex $s 1])"
}
break
}
}</lang>
'''Sample Output'''
<pre>
Playing Bulls & Cows with 4 unique digits
 
Guess 1 is 8527. Answer (Bulls, cows)? 0,1
Guess 2 is 5143. Answer (Bulls, cows)? 0,2
Guess 3 is 9456. Answer (Bulls, cows)? 2,0
Guess 4 is 9412. Answer (Bulls, cows)? 2,1
Guess 5 is 9481. Answer (Bulls, cows)? 3,0
Guess 6 is 9471. Answer (Bulls, cows)? 4,0
Ye-haw!
</pre>
'''Sample Bad Output'''
<pre>
Playing Bulls & Cows with 4 unique digits
 
Guess 1 is 6578. Answer (Bulls, cows)? 0,0
Guess 2 is 3241. Answer (Bulls, cows)? 1,0
Bad scoring? nothing fits those scores you gave:
6578 -> (0, 0)
3241 -> (1, 0)
</pre>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.