Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Rust version of 57_Literature_Quiz #871

Merged
merged 1 commit into from
Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions 57_Literature_Quiz/rust/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
3 changes: 3 additions & 0 deletions 57_Literature_Quiz/rust/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)

Conversion to [Rust](https://www.rust-lang.org/)
127 changes: 127 additions & 0 deletions 57_Literature_Quiz/rust/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
use std::io;


fn print_instructions() {
println!("TEST YOUR KNOWLEDGE OF CHILDREN'S LITERATURE.");
println!();
println!("THIS IS A MULTIPLE-CHOICE QUIZ.");
println!("TYPE A 1, 2, 3, OR 4 AFTER THE QUESTION MARK.");
println!();
println!("GOOD LUCK!");
println!();
println!();
}


fn print_center(text: String, width: usize) {
let pad_size;
if width > text.len() {
pad_size = (width - text.len()) / 2;
} else {
pad_size = 0;
}
println!("{}{}", " ".repeat(pad_size), text);
}


fn print_results(score: usize, number_of_questions: usize) {
if score == number_of_questions {
println!("WOW! THAT'S SUPER! YOU REALLY KNOW YOUR NURSERY");
println!("YOUR NEXT QUIZ WILL BE ON 2ND CENTURY CHINESE");
println!("LITERATURE (HA, HA, HA)");
} else if score < number_of_questions / 2 {
println!("UGH. THAT WAS DEFINITELY NOT TOO SWIFT. BACK TO");
println!("NURSERY SCHOOL FOR YOU, MY FRIEND.");
} else {
println!("NOT BAD, BUT YOU MIGHT SPEND A LITTLE MORE TIME");
println!("READING THE NURSERY GREATS.");
}
}

fn main() {
let page_width: usize = 64;

struct Question<'a> {
question: &'a str,
choices: Vec<&'a str>,
answer: u8,
correct_response: &'a str,
wrong_response: &'a str,
}

impl Question<'_>{
fn ask(&self) -> bool {
println!("{}", self.question);
for i in 0..4 {
print!("{}){}", i+1, self.choices[i]);
if i != 3 { print!(", ")};
}
println!("");
let mut user_input: String = String::new();
io::stdin()
.read_line(&mut user_input)
.expect("Failed to read the line");

if user_input.starts_with(&self.answer.to_string()) {
println!("{}", self.correct_response);
true
} else {
println!("{}", self.wrong_response);
false
}
}
}

let questions: Vec<Question> = vec![
Question{
question: "IN PINOCCHIO, WHAT WAS THE NAME OF THE CAT?",
choices: vec!["TIGGER", "CICERO", "FIGARO", "GUIPETTO"],
answer: 3,
wrong_response: "SORRY...FIGARO WAS HIS NAME.",
correct_response: "VERY GOOD! HERE'S ANOTHER.",
},
Question{
question: "FROM WHOSE GARDEN DID BUGS BUNNY STEAL THE CARROTS?",
choices: vec!["MR. NIXON'S", "ELMER FUDD'S", "CLEM JUDD'S", "STROMBOLI'S"],
answer: 2,
wrong_response: "TOO BAD...IT WAS ELMER FUDD'S GARDEN.",
correct_response: "PRETTY GOOD!",
},
Question{
question: "IN THE WIZARD OF OS, DOROTHY'S DOG WAS NAMED?",
choices: vec!["CICERO", "TRIXIA", "KING", "TOTO"],
answer: 4,
wrong_response: "BACK TO THE BOOKS,...TOTO WAS HIS NAME.",
correct_response: "YEA! YOU'RE A REAL LITERATURE GIANT.",
},
Question{
question: "WHO WAS THE FAIR MAIDEN WHO ATE THE POISON APPLE?",
choices: vec!["SLEEPING BEAUTY", "CINDERELLA", "SNOW WHITE", "WENDY"],
answer: 3,
wrong_response: "OH, COME ON NOW...IT WAS SNOW WHITE.",
correct_response: "GOOD MEMORY!",
},
];
let number_of_questions: usize = questions.len();

print_center("LITERATURE QUIZ".to_string(), page_width);
print_center("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".to_string(), page_width);
println!();
println!();
println!();
print_instructions();

let mut score = 0;
for question in questions {
if question.ask() {
score += 1;
}
println!();
}

print_results(score, number_of_questions);

}