From cc592ef0e3cf687ae4c1e0b78c25d7a258d958f8 Mon Sep 17 00:00:00 2001 From: Ueli Kunz Date: Tue, 2 Mar 2021 13:44:09 +0100 Subject: [PATCH 1/3] nodejs based literature quiz --- .../javascript/literature-quiz-node.mjs | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 57 Literature Quiz/javascript/literature-quiz-node.mjs 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..fb6192b4 --- /dev/null +++ b/57 Literature Quiz/javascript/literature-quiz-node.mjs @@ -0,0 +1,82 @@ +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) + rl.prompt() + rl.on('line', answer => { + rl.close() + resolve(answer) + }) + }) +} + +function println(message = "", align = "left"){ + let padColCount = 0 + if(align === "center"){ + 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){ + 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 From 28c4883349dcc06329d3edb141c06dc07346439e Mon Sep 17 00:00:00 2001 From: Ueli Kunz Date: Tue, 2 Mar 2021 13:48:24 +0100 Subject: [PATCH 2/3] comments --- 57 Literature Quiz/javascript/literature-quiz-node.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/57 Literature Quiz/javascript/literature-quiz-node.mjs b/57 Literature Quiz/javascript/literature-quiz-node.mjs index fb6192b4..2c8795e4 100644 --- a/57 Literature Quiz/javascript/literature-quiz-node.mjs +++ b/57 Literature Quiz/javascript/literature-quiz-node.mjs @@ -9,9 +9,13 @@ async function input(prompt = "") { return new Promise((resolve, _) => { rl.setPrompt(prompt) + // show use 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) }) }) @@ -20,6 +24,8 @@ async function input(prompt = "") { 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, " ")) @@ -32,6 +38,8 @@ function equalIgnoreCase(correct, provided){ } 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) From e6a65e55cb9346972d6100b150599ddde3748595 Mon Sep 17 00:00:00 2001 From: Ueli Kunz Date: Tue, 2 Mar 2021 14:05:15 +0100 Subject: [PATCH 3/3] typo --- 57 Literature Quiz/javascript/literature-quiz-node.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/57 Literature Quiz/javascript/literature-quiz-node.mjs b/57 Literature Quiz/javascript/literature-quiz-node.mjs index 2c8795e4..0d38d540 100644 --- a/57 Literature Quiz/javascript/literature-quiz-node.mjs +++ b/57 Literature Quiz/javascript/literature-quiz-node.mjs @@ -9,7 +9,7 @@ async function input(prompt = "") { return new Promise((resolve, _) => { rl.setPrompt(prompt) - // show use the question + // show user the question rl.prompt() // listen for user answer, // callback is triggered as soon as user hits enter key