Bulls and cows: Difference between revisions
Content added Content deleted
(→{{header|FutureBasic}}: Replaced with simpler code using same design) |
Not a robot (talk | contribs) (Add SETL) |
||
Line 6,825: | Line 6,825: | ||
end repeat |
end repeat |
||
end repeat</syntaxhighlight> |
end repeat</syntaxhighlight> |
||
=={{header|SETL}}== |
|||
<syntaxhighlight lang="setl">program bulls_and_cows; |
|||
setrandom(0); |
|||
print("Bulls and cows"); |
|||
print("--------------"); |
|||
print; |
|||
secret := make_secret(); |
|||
loop do |
|||
guess := read_guess(); |
|||
tries +:= 1; |
|||
bulls := count_bulls(guess, secret); |
|||
cows := count_cows(guess, secret); |
|||
print(bulls, "bulls,", cows, "cows."); |
|||
if bulls = 4 then |
|||
print("You win! Tries:", tries); |
|||
exit; |
|||
end if; |
|||
end loop; |
|||
proc make_secret(); |
|||
digits := []; |
|||
loop for i in [1..4] do |
|||
loop until not digit in digits do |
|||
digit := 1 + random(8); |
|||
end loop; |
|||
digits with:= digit; |
|||
end loop; |
|||
return digits; |
|||
end proc; |
|||
proc read_guess(); |
|||
loop do |
|||
putchar("Guess? "); |
|||
flush(stdout); |
|||
guess := getline(stdin); |
|||
if exists d in guess | not d in "123456789" then |
|||
print("invalid input:", d); |
|||
elseif #guess /= #{d : d in guess} then |
|||
print("no duplicates allowed"); |
|||
elseif #guess /= 4 then |
|||
print("need 4 digits"); |
|||
else |
|||
exit; |
|||
end if; |
|||
end loop; |
|||
return [val d : d in guess]; |
|||
end proc; |
|||
proc count_bulls(guess, secret); |
|||
return #[i : i in [1..4] | guess(i) = secret(i)]; |
|||
end proc; |
|||
proc count_cows(guess, secret); |
|||
return #[d : d in guess | d in secret] - count_bulls(guess, secret); |
|||
end proc; |
|||
end program;</syntaxhighlight> |
|||
{{out}} |
|||
<pre>Bulls and cows |
|||
-------------- |
|||
Guess? 1234 |
|||
0 bulls, 1 cows. |
|||
Guess? 5678 |
|||
2 bulls, 1 cows. |
|||
Guess? 5978 |
|||
2 bulls, 0 cows. |
|||
Guess? 5968 |
|||
1 bulls, 1 cows. |
|||
Guess? 5976 |
|||
1 bulls, 1 cows. |
|||
Guess? 6978 |
|||
3 bulls, 0 cows. |
|||
Guess? 6971 |
|||
2 bulls, 0 cows. |
|||
Guess? 6918 |
|||
2 bulls, 0 cows. |
|||
Guess? 1978 |
|||
2 bulls, 0 cows. |
|||
Guess? 6178 |
|||
3 bulls, 0 cows. |
|||
Guess? 6278 |
|||
3 bulls, 0 cows. |
|||
Guess? 6378 |
|||
4 bulls, 0 cows. |
|||
You win! Tries: 12</pre> |
|||
=={{header|Shale}}== |
=={{header|Shale}}== |
||
Line 6,995: | Line 7,083: | ||
New game |
New game |
||
></pre> |
></pre> |
||
=={{header|Sidef}}== |
=={{header|Sidef}}== |
||
<syntaxhighlight lang="ruby">var size = 4 |
<syntaxhighlight lang="ruby">var size = 4 |