Bulls and cows: Difference between revisions

Simpler D entry
(Updated D entry)
(Simpler D entry)
Line 689:
cows bulls)))))))</lang>
=={{header|D}}==
Inspired by the PicoLisp entry.
<lang d>void main() {
import std.stdio, std.random, std.string, std.algorithm,
std.range, std.conv;
 
immutable chosenhidden = ddigits"123456789"d.randomCover.take(size4).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) {
writef( "\nNextNext guess (%d): ", nGuesses).write;
guess immutable d = readln.strip.dtext;
if (guessd.length == 4 && d.countchars(ddigits"1-9") == size4 &&
guess d.dup.sort().uniq.count == size4) {
immutable bulls = guessd.zip(chosenhidden).count!q{(p => ap[0] == ap[1] });
break;
writefln("I need %d unique digits from 1if to 9, no(bulls spaces",== size4);
return " You guessed it!".writeln;
immutable cows = d.count!(pg => p[0] != p[1] && chosenhidden.canFind(p[0]g)) - bulls;
writefln(" bulls %d, Bulls\n cows %d Cows", bulls, cows);
break;}
" 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>
{{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 Bad guess! (4 unique digits, 1-9): 123
Next guess: 5284
I need 4 unique digits from 1 to 9, no spaces
bulls 2, cows 1
 
Next Bad guess! (4 unique digits, 1-9): 1234
Next guess: 4386
1 Bulls
bulls 0, cows 2
1 Cows
Bad guess! (4 unique digits, 1-9)
 
Next guess (2): 5296-
Bad guess! (4 unique digits, 1-9)
2 Bulls
Next guess: 5894
0 Cows
bulls 3, cows 0
 
Next Bad guess! (3):4 5217unique 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 correctly in 3 attempts.it!</pre>
 
=={{header|E}}==