2021-12-11 16:57:57 +00:00
|
|
|
use rand::Rng;
|
|
|
|
use std::cmp::Ordering;
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
|
|
|
println!("Welcome to bingame! Type \"quit\" anytime to stop playing.");
|
|
|
|
|
2022-04-28 19:36:36 +00:00
|
|
|
let mut liminput = String::new();
|
|
|
|
|
|
|
|
println!("Provide an upward limit for generated numbers: ");
|
|
|
|
std::io::stdin()
|
|
|
|
.read_line(&mut liminput)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let limit = liminput
|
|
|
|
.trim()
|
|
|
|
.parse::<u32>()
|
|
|
|
.unwrap();
|
|
|
|
|
2021-12-11 16:57:57 +00:00
|
|
|
// generate random number
|
2022-04-28 19:36:36 +00:00
|
|
|
|
|
|
|
let nombre: u32 = rand::thread_rng().gen_range(0..limit);
|
|
|
|
|
2021-12-11 16:57:57 +00:00
|
|
|
// convert number from decimal to binary notation
|
|
|
|
|
2022-04-28 19:36:36 +00:00
|
|
|
let mut binvec = vec![];
|
|
|
|
|
|
|
|
let mut countdown = nombre;
|
|
|
|
|
|
|
|
while countdown > 0 {
|
|
|
|
|
|
|
|
binvec.push(countdown % 2);
|
|
|
|
countdown /= 2;
|
2021-12-11 16:57:57 +00:00
|
|
|
|
|
|
|
}
|
2022-04-28 19:36:36 +00:00
|
|
|
|
|
|
|
let mut binnery = String::new();
|
|
|
|
|
2021-12-11 16:57:57 +00:00
|
|
|
for i in binvec {
|
|
|
|
|
2022-04-28 19:36:36 +00:00
|
|
|
binnery = i.to_string() + &binnery;
|
|
|
|
|
2021-12-11 16:57:57 +00:00
|
|
|
}
|
2022-04-28 19:36:36 +00:00
|
|
|
|
|
|
|
let binary = binnery
|
|
|
|
.parse::<u32>()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
println!("Type {} in binary", nombre);
|
|
|
|
let mut input = String::new();
|
|
|
|
|
|
|
|
std::io::stdin()
|
|
|
|
.read_line(&mut input)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let guess = input
|
|
|
|
.trim()
|
|
|
|
.parse::<u32>()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
match guess.cmp(&binary) {
|
|
|
|
Ordering::Equal => {
|
|
|
|
println!("That's correct! {} in binary is {}!", nombre, binnery);
|
|
|
|
}
|
|
|
|
Ordering::Greater | Ordering::Less => {
|
|
|
|
println!("Nope! {} in binary is {}!", nombre, binnery);
|
2021-12-11 16:57:57 +00:00
|
|
|
}
|
|
|
|
}
|
2022-04-28 19:36:36 +00:00
|
|
|
}
|