diff --git a/57 Literature Quiz/javascript/literature-quiz-node.mjs b/57 Literature Quiz/javascript/literature-quiz-node.mjs new file mode 100644 index 00000000..0d38d540 --- /dev/null +++ b/57 Literature Quiz/javascript/literature-quiz-node.mjs @@ -0,0 +1,90 @@ +import * as readline from 'readline' + +// start reusable code +async function input(prompt = "") { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }) + + return new Promise((resolve, _) => { + rl.setPrompt(prompt) + // show user the question + rl.prompt() + // listen for user answer, + // callback is triggered as soon as user hits enter key + rl.on('line', answer => { + rl.close() + // resolve the promise, with the input the user entered + resolve(answer) + }) + }) +} + +function println(message = "", align = "left"){ + let padColCount = 0 + if(align === "center"){ + // calculate the amount of spaces required to center the message + // process.stdout.columns is the number of spaces per line in the terminal + padColCount = Math.round(process.stdout.columns / 2 + message.length / 2) + } + console.log(message.padStart(padColCount, " ")) +} +// end reusable code + + +function equalIgnoreCase(correct, provided){ + return correct.toString().toLowerCase() === provided.toString().toLowerCase() +} + +async function evaluateQuestion(question, answerOptions, correctAnswer, correctMessage, wrongMessage){ + // ask the user to answer the given question + // this is a blocking wait + const answer = await input(question + "\n" + answerOptions + "\n") + const isCorrect = equalIgnoreCase(correctAnswer, answer) + println(isCorrect ? correctMessage : wrongMessage) + return isCorrect ? 1 : 0 +} + +async function main(){ + let score = 0 + println("LITERATURE QUIZ", "center") + println("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY", "center") + println();println();println() + + score += await evaluateQuestion("IN PINOCCHIO, WHAT WAS THE NAME OF THE CAT?", + "1)TIGGER, 2)CICERO, 3)FIGARO, 4)GUIPETTO", 3, + "VERY GOOD! HERE'S ANOTHER.", "SORRY...FIGARO WAS HIS NAME.") + println() + + score += await evaluateQuestion("FROM WHOSE GARDEN DID BUGS BUNNY STEAL THE CARROTS?", + "1)MR. NIXON'S, 2)ELMER FUDD'S, 3)CLEM JUDD'S, 4)STROMBOLI'S", 2, + "PRETTY GOOD!", "TOO BAD...IT WAS ELMER FUDD'S GARDEN.") + println() + + score += await evaluateQuestion("IN THE WIZARD OF OS, DOROTHY'S DOG WAS NAMED", + "1)CICERO, 2)TRIXIA, 3)KING, 4)TOTO", 4, + "YEA! YOU'RE A REAL LITERATURE GIANT.", + "BACK TO THE BOOKS,...TOTO WAS HIS NAME.") + println() + + score += await evaluateQuestion("WHO WAS THE FAIR MAIDEN WHO ATE THE POISON APPLE", + "1)SLEEPING BEAUTY, 2)CINDERELLA, 3)SNOW WHITE, 4)WENDY", 3, + "GOOD MEMORY!", "OH, COME ON NOW...IT WAS SNOW WHITE.") + + println();println() + + if(score === 4) { + println("WOW! THAT'S SUPER! YOU REALLY KNOW YOUR NURSERY\n"+ + "YOUR NEXT QUIZ WILL BE ON 2ND CENTURY CHINESE\n"+ + "LITERATURE (HA, HA, HA)") + } else if(score <= 2){ + println("UGH. THAT WAS DEFINITELY NOT TOO SWIFT. BACK TO\n" + + "NURSERY SCHOOL FOR YOU, MY FRIEND.") + } else { + println("NOT BAD, BUT YOU MIGHT SPEND A LITTLE MORE TIME\n"+ + "READING THE NURSERY GREATS.") + } +} + +main() \ No newline at end of file