Rock-paper-scissors: Difference between revisions

D version
(→‎BASIC: removed FreeBASIC note; successfully tested in QBasic)
(D version)
Line 429:
}
}</lang>
 
=={{header|D}}==
{{trans|Python}}
<lang d>import std.stdio, std.algorithm, std.random, std.string;
 
enum string[] order = ["rock", "paper", "scissors"];
int[string] choiceFrequency;
 
string[string] whatBeats;
static this() {
whatBeats = ["paper": "scissors",
"scissors": "rock",
"rock": "paper"];
}
 
string checkWinner(string a, string b) {
if (b == whatBeats[a])
return b;
else if (a == whatBeats[b])
return a;
return "";
}
 
string getRandomChoice() {
if (choiceFrequency.length == 0)
return order[uniform(0, order.length)];
const choices = choiceFrequency.keys;
const probabilities = choiceFrequency.values;
return whatBeats[choices[dice(probabilities)]];
}
 
void main() {
writeln("Rock-paper-scissors game");
while (true) {
write("Your choice: ");
const string humanChoice = readln().strip().toLower();
if (humanChoice == "")
break;
if (!canFind(order, humanChoice)) {
writeln("Wrong input: ", humanChoice);
continue;
}
const compChoice = getRandomChoice();
write("Computer picked ", compChoice, ", ");
// Don't register the player choice until after
// the computer has made its choice.
choiceFrequency[humanChoice]++;
string winner = checkWinner(humanChoice, compChoice);
if (winner == "")
winner = "nobody";
writeln(winner, " wins!");
}
}</lang>
Output example:
<pre>Rock-paper-scissors game
Your choice: rock
Computer picked scissors, rock wins!
Your choice: scissors
Computer picked paper, scissors wins!
Your choice:</pre>
 
=={{header|Euphoria}}==
{{trans|C}}
Anonymous user