Bulls and cows: Difference between revisions
Content added Content deleted
(1-based index) |
Not a robot (talk | contribs) (Add Draco) |
||
Line 1,914: | Line 1,914: | ||
=={{header|Delphi}}== |
=={{header|Delphi}}== |
||
See [[#Pascal]]. |
See [[#Pascal]]. |
||
=={{header|Draco}}== |
|||
<syntaxhighlight lang="draco">union { |
|||
ulong state; |
|||
struct { |
|||
byte x; |
|||
byte a; |
|||
byte b; |
|||
byte c; |
|||
} fields; |
|||
} rng; |
|||
proc rand() byte: |
|||
rng.fields.x := rng.fields.x + 1; |
|||
rng.fields.a := rng.fields.a >< rng.fields.c >< rng.fields.x; |
|||
rng.fields.b := rng.fields.b + rng.fields.a; |
|||
rng.fields.c := rng.fields.c + (rng.fields.b >> 1) >< rng.fields.a; |
|||
rng.fields.c |
|||
corp |
|||
proc rand_digit() byte: |
|||
byte digit; |
|||
while |
|||
digit := rand() & 15; |
|||
digit < 1 or digit >= 10 |
|||
do od; |
|||
digit |
|||
corp |
|||
proc make_secret([4]byte secret) void: |
|||
int i, j; |
|||
bool ok; |
|||
for i from 0 upto 3 do |
|||
while |
|||
secret[i] := rand_digit(); |
|||
ok := true; |
|||
for j from 0 upto i-1 do |
|||
ok := ok and secret[i] /= secret[j] |
|||
od; |
|||
not ok |
|||
do od |
|||
od |
|||
corp |
|||
proc bulls([4]byte secret, guess) byte: |
|||
byte i, count; |
|||
count := 0; |
|||
for i from 0 upto 3 do |
|||
if secret[i] = guess[i] then count := count + 1 fi |
|||
od; |
|||
count |
|||
corp |
|||
proc cows([4]byte secret, guess) byte: |
|||
byte i, j, count; |
|||
count := 0; |
|||
for i from 0 upto 3 do |
|||
for j from 0 upto 3 do |
|||
if i /= j and secret[i] = guess[j] then count := count + 1 fi |
|||
od |
|||
od; |
|||
count |
|||
corp |
|||
proc read_guess([4]byte guess) void: |
|||
word guessNo; |
|||
byte i; |
|||
while |
|||
write("Guess? "); |
|||
readln(guessNo); |
|||
if guessNo<1111 or guessNo>9999 then true |
|||
else |
|||
for i from 3 downto 0 do |
|||
guess[i] := guessNo % 10; |
|||
guessNo := guessNo / 10; |
|||
od; |
|||
guess[0]*guess[1]*guess[2]*guess[3] = 0 |
|||
fi |
|||
do |
|||
writeln("A guess must be a four-digit number not containing zeroes.") |
|||
od |
|||
corp |
|||
proc play_game([4]byte secret) word: |
|||
[4]byte guess; |
|||
word tries; |
|||
tries := 1; |
|||
while |
|||
read_guess(guess); |
|||
writeln("Bulls: ", bulls(secret, guess), ", cows: ", cows(secret, guess)); |
|||
bulls(secret, guess) /= 4 |
|||
do |
|||
tries := tries + 1 |
|||
od; |
|||
tries |
|||
corp |
|||
proc main() void: |
|||
[4]byte secret; |
|||
word tries; |
|||
write("Please enter a random seed: "); |
|||
readln(rng.state); |
|||
make_secret(secret); |
|||
tries := play_game(secret); |
|||
writeln(); |
|||
writeln("You got it in ", tries, " tries.") |
|||
corp</syntaxhighlight> |
|||
{{out}} |
|||
<pre>Please enter a random seed: 123456 |
|||
Guess? 1234 |
|||
Bulls: 2, cows: 1 |
|||
Guess? 5678 |
|||
Bulls: 0, cows: 0 |
|||
Guess? 9234 |
|||
Bulls: 1, cows: 2 |
|||
Guess? 1934 |
|||
Bulls: 3, cows: 0 |
|||
Guess? 1294 |
|||
Bulls: 2, cows: 2 |
|||
Guess? 1924 |
|||
Bulls: 4, cows: 0 |
|||
You got it in 6 tries.</pre> |
|||
=={{header|E}}== |
=={{header|E}}== |
||
Line 2,036: | Line 2,162: | ||
}, entropy) |
}, entropy) |
||
}</syntaxhighlight> |
}</syntaxhighlight> |
||
=={{header|EasyLang}}== |
=={{header|EasyLang}}== |
||
<syntaxhighlight lang="text"> |
<syntaxhighlight lang="text"> |