import { renderLatex } from "@ofb/katex"; import { createMemo, createSignal, For } from "solid-js"; function DotBlock(props: { count: number; tone: "x" | "y" | "z" }) { return (
{() => }
); } function AssociativeDemo() { const [mode, setMode] = createSignal<"add" | "mul">("add"); const [x, setX] = createSignal(2); const [y, setY] = createSignal(3); const [z, setZ] = createSignal(5); const [groupFirst, setGroupFirst] = createSignal(true); const xy = createMemo(() => (mode() === "add" ? x() + y() : x() * y())); const total = createMemo(() => (mode() === "add" ? xy() + z() : xy() * z())); const leftGroupHtml = createMemo(() => { if (mode() === "add") { return groupFirst() ? renderLatex(`(${x()}+${y()})+${z()} = ${xy()}+${z()} = ${total()}`) : renderLatex(`${x()}+(${y()}+${z()}) = ${x()}+${y() + z()} = ${total()}`); } return groupFirst() ? renderLatex(`(${x()}\\times${y()})\\times${z()} = ${xy()}\\times${z()} = ${total()}`) : renderLatex( `${x()}\\times(${y()}\\times${z()}) = ${x()}\\times${y() * z()} = ${total()}` ); }); const otherGroupHtml = createMemo(() => { if (mode() === "add") { return groupFirst() ? renderLatex(`${x()}+(${y()}+${z()}) = ${total()}`) : renderLatex(`(${x()}+${y()})+${z()} = ${total()}`); } return groupFirst() ? renderLatex(`${x()}\\times(${y()}\\times${z()}) = ${total()}`) : renderLatex(`(${x()}\\times${y()})\\times${z()} = ${total()}`); }); return (

Associative property

setX(Number(e.currentTarget.value))} />
setY(Number(e.currentTarget.value))} />
setZ(Number(e.currentTarget.value))} />

{groupFirst() ? ( <> ) : ( <> )}
{() => } {total() > 48 ? ( +{total() - 48} more ) : null}

Brackets show which pair to combine first. Different groupings give the same final answer.

); } export default AssociativeDemo;