Skip to content

Commit

Permalink
Exponent and root (#27)
Browse files Browse the repository at this point in the history
* Refactor skill level

* Add exponentAndRoot
  • Loading branch information
Temez1 authored Sep 28, 2021
1 parent dcb965d commit c80345a
Show file tree
Hide file tree
Showing 14 changed files with 288 additions and 139 deletions.
24 changes: 24 additions & 0 deletions src/math/SkillLevel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
export type SkillLevels = "unknown" | "beginner" | "skilled" | "pro" | "expert"

class SkillLevel {
private skillLevel: SkillLevels

constructor() {
this.skillLevel = "unknown"
}

initSkillLevel(newSkillLevel: SkillLevels) {
this.skillLevel = newSkillLevel
}

getSkillLevel() {
return this.skillLevel
}

updateSkillLevel(newSkillLevel: SkillLevels) {
this.skillLevel = newSkillLevel
// Update user skill level to DB
}
}

export default SkillLevel
63 changes: 26 additions & 37 deletions src/math/arithmetic/basicOperations/divide.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
import { getRandomInt } from "../../utils"

let currentSkillLevel: SkillLevel = "unknown"

const updateSkillLevel = (newSkillLevel: SkillLevel) => {
currentSkillLevel = newSkillLevel
}

const getSkillLevel = (): SkillLevel => currentSkillLevel

const getChallenge = (): Challenge => {
export default (currentSkillLevel: SkillLevels): Challenge => {
let min = 0
let max = 10

if (currentSkillLevel === "unknown") {
min = 0
max = 10
} else if (currentSkillLevel === "beginner") {
if (currentSkillLevel === "unknown" || currentSkillLevel === "beginner") {
min = 0
max = 10
} else if (currentSkillLevel === "skilled") {
Expand All @@ -29,40 +18,40 @@ const getChallenge = (): Challenge => {
max = 20
}

const b = getRandomInt(min, max)
let a
const denominator = getRandomInt(min, max)
let numerator

if (b === 0) {
a = getRandomInt(min, max)
if (denominator === 0) {
numerator = getRandomInt(min, max)
} else {
// We want the answer to be an integer
a = b * getRandomInt(min, max)
numerator = denominator * getRandomInt(min, max)
}

let finalStep = ""
let explanation: undefined | string

let answers = [""]

if (b === 0) {
finalStep = "määrittelemätön"
explanation = "Nollalla jakamista ei ole määritelty"
answers = ["määrittelemätön", "eimääritelty"]
let steps: Step[] = []
let answers: Latex[] | undefined = []

if (denominator === 0) {
steps = [
{
math: "=määrittelemätön",
explanation: "Nollalla jakamista ei ole määritelty",
},
]
answers = undefined
} else {
finalStep = `${a / b}`
answers = [`${a / b}`]
steps = [
{
math: `=${numerator / denominator}`,
},
]
answers = [`${numerator / denominator}`]
}

return {
description: "Ratkaise",
descriptionLatex: `${a}/${b}`,
steps: [{ math: `=${finalStep}`, explanation }],
descriptionLatex: `${numerator}/${denominator}`,
steps,
answers,
}
}

export default {
updateSkillLevel,
getSkillLevel,
getChallenge,
}
29 changes: 13 additions & 16 deletions src/math/arithmetic/basicOperations/index.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,33 @@
import divide from "./divide"
import multiply from "./multiply"
import substract from "./substract"
import sum from "./sum"
import SkillLevel from "../../SkillLevel"
import divideChallenge from "./divide"
import multiplyChallenge from "./multiply"
import substractChallenge from "./substract"
import sumChallenge from "./sum"

const subTopics = new Map<NameLowerCamelCase, SubTopic>()

subTopics.set("sum", {
name: "Yhteenlasku",
getChallenge: sum.getChallenge,
getCurrentSkillLevel: sum.getSkillLevel,
updateSkillLevel: sum.updateSkillLevel,
getChallenge: sumChallenge,
skillLevel: new SkillLevel(),
})

subTopics.set("substract", {
name: "Vähennyslasku",
getChallenge: substract.getChallenge,
getCurrentSkillLevel: substract.getSkillLevel,
updateSkillLevel: substract.updateSkillLevel,
getChallenge: substractChallenge,
skillLevel: new SkillLevel(),
})

subTopics.set("multiply", {
name: "Kertolasku",
getChallenge: multiply.getChallenge,
getCurrentSkillLevel: multiply.getSkillLevel,
updateSkillLevel: multiply.updateSkillLevel,
getChallenge: multiplyChallenge,
skillLevel: new SkillLevel(),
})

subTopics.set("divide", {
name: "Jakolasku",
getChallenge: divide.getChallenge,
getCurrentSkillLevel: divide.getSkillLevel,
updateSkillLevel: divide.updateSkillLevel,
getChallenge: divideChallenge,
skillLevel: new SkillLevel(),
})

export default subTopics
21 changes: 2 additions & 19 deletions src/math/arithmetic/basicOperations/multiply.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
import { getRandomInt } from "../../utils"

let currentSkillLevel: SkillLevel = "unknown"

const updateSkillLevel = (newSkillLevel: SkillLevel) => {
currentSkillLevel = newSkillLevel
}

const getSkillLevel = (): SkillLevel => currentSkillLevel

const getChallenge = (): Challenge => {
export default (currentSkillLevel: SkillLevels): Challenge => {
let min = 0
let max = 10

if (currentSkillLevel === "unknown") {
min = 0
max = 10
} else if (currentSkillLevel === "beginner") {
if (currentSkillLevel === "unknown" || currentSkillLevel === "beginner") {
min = 0
max = 10
} else if (currentSkillLevel === "skilled") {
Expand All @@ -40,9 +29,3 @@ const getChallenge = (): Challenge => {
answers: [`${a * b}`],
}
}

export default {
updateSkillLevel,
getSkillLevel,
getChallenge,
}
21 changes: 2 additions & 19 deletions src/math/arithmetic/basicOperations/substract.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
import { getRandomInt } from "../../utils"

let currentSkillLevel: SkillLevel = "unknown"

const updateSkillLevel = (newSkillLevel: SkillLevel) => {
currentSkillLevel = newSkillLevel
}

const getSkillLevel = (): SkillLevel => currentSkillLevel

const getChallenge = (): Challenge => {
export default (currentSkillLevel: SkillLevels): Challenge => {
let min = 0
let max = 10

if (currentSkillLevel === "unknown") {
min = 0
max = 10
} else if (currentSkillLevel === "beginner") {
if (currentSkillLevel === "unknown" || currentSkillLevel === "beginner") {
min = 0
max = 10
} else if (currentSkillLevel === "skilled") {
Expand All @@ -40,9 +29,3 @@ const getChallenge = (): Challenge => {
answers: [`${a - b}`],
}
}

export default {
updateSkillLevel,
getSkillLevel,
getChallenge,
}
21 changes: 2 additions & 19 deletions src/math/arithmetic/basicOperations/sum.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
import { getRandomInt } from "../../utils"

let currentSkillLevel: SkillLevel = "unknown"

const updateSkillLevel = (newSkillLevel: SkillLevel) => {
currentSkillLevel = newSkillLevel
}

const getSkillLevel = (): SkillLevel => currentSkillLevel

const getChallenge = (): Challenge => {
export default (currentSkillLevel: SkillLevels): Challenge => {
let min = 0
let max = 10

if (currentSkillLevel === "unknown") {
min = 0
max = 10
} else if (currentSkillLevel === "beginner") {
if (currentSkillLevel === "unknown" || currentSkillLevel === "beginner") {
min = 0
max = 10
} else if (currentSkillLevel === "skilled") {
Expand All @@ -40,9 +29,3 @@ const getChallenge = (): Challenge => {
answers: [`${a + b}`],
}
}

export default {
updateSkillLevel,
getSkillLevel,
getChallenge,
}
79 changes: 79 additions & 0 deletions src/math/arithmetic/exponentiationAndRoot/exponentiation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { getRandomInt } from "../../utils"

export default (currentSkillLevel: SkillLevels): Challenge => {
let baseMin = 0
let baseMax = 10
let exponentMin = 0
let exponentMax = 3

if (currentSkillLevel === "unknown" || currentSkillLevel === "beginner") {
baseMin = 0
baseMax = 10
exponentMin = 1
exponentMax = 2
} else if (currentSkillLevel === "skilled") {
baseMin = -5
baseMax = 5
exponentMin = 0
exponentMax = 3
} else if (currentSkillLevel === "pro") {
baseMin = -6
baseMax = 6
exponentMin = -3
exponentMax = 3
} else if (currentSkillLevel === "expert") {
baseMin = -10
baseMax = 10
exponentMin = -3
exponentMax = 3
}

const base = getRandomInt(baseMin, baseMax)

const exponent = getRandomInt(exponentMin, exponentMax)

let steps: Step[] = []
let answers: Latex[] | undefined = []

if (exponent === 0 && base !== 0) {
steps = [
{
math: `=1`,
explanation: "Kaikki nollaa suuremmat luvut potenssiin nolla on yksi.",
},
]
answers = ["1"]
} else if (exponent === 0 && base === 0) {
steps = [
{
math: `=määrittelemätön`,
explanation: "Nolla potenssiin nolla on määrittelemätön",
},
]
answers = undefined
} else {
const baseWithMultiplier = `${base.toString()}*`
const exponentiationAsMultiplies = `${baseWithMultiplier.repeat(
exponent - 1
)}${base}`
steps = [
{
math: `=${exponentiationAsMultiplies}`,
explanation:
"Potenssi on lyhennysmerkintä saman luvun toistuvalle kertolaskulle. " +
"Potenssissa kantaluku kerrotaan toistuvasti eksponentin osoittaman määrän verran",
},
{
math: `=${base ** exponent}`,
},
]
answers = [`${base ** exponent}`]
}

return {
description: "Ratkaise",
descriptionLatex: `${base}^${exponent}`,
steps,
answers,
}
}
19 changes: 19 additions & 0 deletions src/math/arithmetic/exponentiationAndRoot/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import exponentiationChallenge from "./exponentiation"
import SkillLevel from "../../SkillLevel"
import squareRootChallenge from "./squareRoot"

const subTopics = new Map<NameLowerCamelCase, SubTopic>()

subTopics.set("exponent", {
name: "Potenssi",
getChallenge: exponentiationChallenge,
skillLevel: new SkillLevel(),
})

subTopics.set("squareRoot", {
name: "Neliöjuuri",
getChallenge: squareRootChallenge,
skillLevel: new SkillLevel(),
})

export default subTopics
Loading

0 comments on commit c80345a

Please sign in to comment.