You are on page 1of 2

use std::io;

struct Game {
piles: Vec<i32>,
}

impl Game {
fn new(piles: Vec<i32>) -> Game {
Game { piles }
}

fn is_over(&self) -> bool {


self.piles.iter().all(|&x| x == 0)
}

fn xor_sum(&self) -> i32 {


self.piles.iter().fold(0, |acc, &x| acc ^ x)
}
}

fn play_game(game: &mut Game) -> i32 {


let mut current_player = 0;

while !game.is_over() {
println!("Starea curenta a jocului: {:?}", game.piles);

let mut pile = String::new();


let mut stones = String::new();

io::stdin()
.read_line(&mut pile)
.expect("Nu am putut citi numarul gramezii.");

io::stdin()
.read_line(&mut stones)
.expect("Nu am putut citi numarul de pietre.");

let pile: usize = pile.trim().parse().expect("Nu am putut converti numarul


gramezii.");
let mut stones: i32 = stones.trim().parse().expect("Nu am putut converti
numarul de pietre.");

let xor_sum = game.xor_sum();

if xor_sum != 0 {
stones ^= xor_sum;
}

game.piles[pile] -= stones;

current_player = 1 - current_player;
}

current_player as i32
}

fn main() {
let piles = vec![3, 4, 5];
let mut game = Game::new(piles);
let winner = play_game(&mut game);

println!("Castigatorul este jucatorul {}.", winner);


}

You might also like