Nim game: Difference between revisions
Content added Content deleted
No edit summary |
(add Rust) |
||
Line 1,008: | Line 1,008: | ||
──────── No tokens left. |
──────── No tokens left. |
||
──────── The computer wins! |
──────── The computer wins! |
||
</pre> |
|||
=={{header|Rust}}== |
|||
<lang rust>use std::io; |
|||
fn main() { |
|||
let mut tokens = 12; |
|||
println!("Nim game"); |
|||
println!("Starting with {} tokens.", tokens); |
|||
println!(""); |
|||
loop { |
|||
tokens = p_turn(&tokens); |
|||
print_remaining(&tokens); |
|||
tokens = c_turn(&tokens); |
|||
print_remaining(&tokens); |
|||
if tokens == 0 { |
|||
println!("Computer wins!"); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
fn p_turn(tokens: &i32) -> i32 { |
|||
loop { //try until we get a good number |
|||
println!("How many tokens would you like to take?"); |
|||
let mut take = String::new(); |
|||
io::stdin().read_line(&mut take) |
|||
.expect("Sorry, I didn't understand that."); |
|||
let take: i32 = match take.trim().parse() { |
|||
Ok(num) => num, |
|||
Err(_) => { |
|||
println!("Invalid input"); |
|||
println!(""); |
|||
continue; |
|||
} |
|||
}; |
|||
if take > 3 || take < 1 { |
|||
println!("Take must be between 1 and 3."); |
|||
println!(""); |
|||
continue; |
|||
} |
|||
return tokens - take; |
|||
} |
|||
} |
|||
fn c_turn(tokens: &i32) -> i32 { |
|||
let take = tokens % 4; |
|||
println!("Computer takes {} tokens.", take); |
|||
return tokens - take; |
|||
} |
|||
fn print_remaining(tokens: &i32) { |
|||
println!("{} tokens remaining.", tokens); |
|||
println!(""); |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
sample game: |
|||
<pre> |
|||
Nim game |
|||
Starting with 12 tokens. |
|||
How many tokens would you like to take? |
|||
foo |
|||
Invalid input |
|||
How many tokens would you like to take? |
|||
3 |
|||
9 tokens remaining. |
|||
Computer takes 1 tokens. |
|||
8 tokens remaining. |
|||
How many tokens would you like to take? |
|||
5 |
|||
Take must be between 1 and 3. |
|||
How many tokens would you like to take? |
|||
2 |
|||
6 tokens remaining. |
|||
Computer takes 2 tokens. |
|||
4 tokens remaining. |
|||
How many tokens would you like to take? |
|||
1 |
|||
3 tokens remaining. |
|||
Computer takes 3 tokens. |
|||
0 tokens remaining. |
|||
Computer wins! |
|||
</pre> |
</pre> |