From 677686c2c61002a9e356660cc26343e1942128b6 Mon Sep 17 00:00:00 2001 From: David Baer Date: Sat, 2 Mar 2024 12:48:04 -0500 Subject: [PATCH] Button to show solution --- src/app.tsx | 35 ++++++++++++++++++++++++++++++++++- src/solution.css | 6 ++++++ src/solution.tsx | 29 +++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/solution.css create mode 100644 src/solution.tsx diff --git a/src/app.tsx b/src/app.tsx index 3184b7f..28045ca 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,6 +1,8 @@ import { useState } from 'preact/hooks' import './app.css' - +import { Solution } from './solution' +import type { SolutionKey } from './solution' +import type { JSX } from 'preact' export function App() { // choose number between 2 and max inclusive @@ -14,6 +16,22 @@ export function App() { else return gcd(b, a % b) } + const getSolution = (a : number, b : number) : SolutionKey => { + var result : SolutionKey = [ ] + if (b > a) { + var t = b + b = a + a = t + } + while (b != 0) { + result.push([ a, Math.floor(a / b), b, a % b ]) + var t = a % b + a = b + b = t + } + return result + } + const doCheck = (e : Event) : void => { e.preventDefault() const rightAnswer = gcd(factors[0], factors[1]) @@ -32,13 +50,24 @@ export function App() { setFeedback(false) setCorrect(false) setFactors(chooseFactors()) + setSolution(null) document.forms[0].reset() } + const doSolution = (e : Event) : void => { + e.preventDefault() + if (solution === null) { + setSolution() + } else { + setSolution(null) + } + } + const [factors, setFactors] = useState(chooseFactors()) const [correct, setCorrect] = useState(false) const [feedback, setFeedback] = useState(false) + const [solution, setSolution] = useState(null) return (
@@ -54,10 +83,14 @@ export function App() {
+
+ +
{correct ? "Correct" : "Try again!"}
+ {solution !== null ? solution : <>}
) } diff --git a/src/solution.css b/src/solution.css new file mode 100644 index 0000000..001b7d9 --- /dev/null +++ b/src/solution.css @@ -0,0 +1,6 @@ +.solution { + padding: 16px; + border-radius: 12px; + background: white; + color: black; +} diff --git a/src/solution.tsx b/src/solution.tsx new file mode 100644 index 0000000..ce64509 --- /dev/null +++ b/src/solution.tsx @@ -0,0 +1,29 @@ +import './solution.css' + +type SolutionRow = [Number, Number, Number, Number] +export type SolutionKey = Array +type SolutionParams = { + rows : SolutionKey +} + +export function Solution({rows}:SolutionParams) { + const colors = [ + "red", + "blue", + "green", + "brown", + "purple", + "orange" + ] + const displayRow = (row : SolutionRow, index : number) => { + let range : number[] = [0, 1, 2] + const styles = range.map((i)=>{return `padding:3px;color:white;background:${colors[(i+index)%colors.length]}`}) + return

+ {row[0]} ÷ {row[2]} = {row[1]} R {row[3]} +

+ } + + return
+ {rows.map(displayRow)} +
+}