Bulls and cows: Difference between revisions

Content added Content deleted
(Updated D entry)
(Simpler D entry)
Line 689: Line 689:
cows bulls)))))))</lang>
cows bulls)))))))</lang>
=={{header|D}}==
=={{header|D}}==
Inspired by the PicoLisp entry.
<lang d>void main() {
<lang d>void main() {
import std.stdio, std.random, std.string, std.algorithm,
import std.stdio, std.random, std.string, std.algorithm,
std.range, std.conv;
std.range, std.conv;


immutable hidden = "123456789"d.randomCover.take(4).array;
enum size = 4;
immutable ddigits = "123456789"d;
immutable chosen = ddigits.randomCover.take(size).array;
writeln("Guess a number composed of ", size,
" unique digits from 1 to 9 in random order.");

uint nGuesses;
while (true) {
nGuesses++;
dstring guess;
while (true) {
while (true) {
writef("\nNext guess (%d): ", nGuesses);
"Next guess: ".write;
guess = readln.strip.dtext;
immutable d = readln.strip.dtext;
if (guess.countchars(ddigits) == size &&
if (d.length == 4 && d.countchars("1-9") == 4 &&
guess.dup.sort().uniq.count == size)
d.dup.sort().uniq.count == 4) {
immutable bulls = d.zip(hidden).count!(p => p[0] == p[1]);
break;
writefln("I need %d unique digits from 1 to 9, no spaces", size);
if (bulls == 4)
return " You guessed it!".writeln;
immutable cows = d.count!(g => hidden.canFind(g)) - bulls;
writefln("bulls %d, cows %d", bulls, cows);
}
" Bad guess! (4 unique digits, 1-9)".writeln;
}
}

if (guess == chosen) {
writefln("\nYou guessed correctly in %d attempts.", nGuesses);
break;
}

immutable bulls = guess.zip(chosen).count!q{ a[0] == a[1] };
immutable cows = guess.zip(chosen)
.count!(p => p[0] != p[1] && chosen.canFind(p[0]));
writefln(" %d Bulls\n %d Cows", bulls, cows);
}
}</lang>
}</lang>
{{out}}
{{out}}
<pre>Next guess: 6548
<pre>Guess a number composed of 4 unique digits from 1 to 9 in random order.
bulls 0, cows 3

Next guess (1): 123
Bad guess! (4 unique digits, 1-9)
Next guess: 5284
I need 4 unique digits from 1 to 9, no spaces
bulls 2, cows 1

Next guess (1): 1234
Bad guess! (4 unique digits, 1-9)
Next guess: 4386
1 Bulls
bulls 0, cows 2
1 Cows
Bad guess! (4 unique digits, 1-9)

Next guess (2): 5296
Next guess: -
Bad guess! (4 unique digits, 1-9)
2 Bulls
Next guess: 5894
0 Cows
bulls 3, cows 0

Next guess (3): 5217
Bad guess! (4 unique digits, 1-9)
Next guess: 5874

bulls 3, cows 0
You guessed correctly in 3 attempts.</pre>
Bad guess! (4 unique digits, 1-9)
Next guess: 5814
You guessed it!</pre>


=={{header|E}}==
=={{header|E}}==