diff --git a/ProjectClock/AlarmActivationViewController.swift b/ProjectClock/AlarmActivationViewController.swift
index 9b543f5..1028055 100644
--- a/ProjectClock/AlarmActivationViewController.swift
+++ b/ProjectClock/AlarmActivationViewController.swift
@@ -102,6 +102,11 @@ class AlarmActivationViewController: EndEditingOnReturn
// Initialize alarm
switch wvm
{
+ case "Math 1", "Math 2", "Math 3":
+ let q = MathExpProblem(size: Int(wvm[5...5])!)
+ puzzleQuestionLabel.text = "Solve: \(q.prob.replacingOccurrences(of: "**", with: "^"))"
+ puzzleAnswers = [q.ans]
+ puzzleView.show()
case "Factor":
initFactorProblem()
puzzleView.show()
diff --git a/ProjectClock/Base.lproj/Main.storyboard b/ProjectClock/Base.lproj/Main.storyboard
index 699b339..42d14d2 100644
--- a/ProjectClock/Base.lproj/Main.storyboard
+++ b/ProjectClock/Base.lproj/Main.storyboard
@@ -677,10 +677,10 @@
-
+
-
-
+
@@ -723,7 +723,7 @@
-
+
diff --git a/ProjectClock/MathExpressions.swift b/ProjectClock/MathExpressions.swift
index a1e6c1f..3135942 100644
--- a/ProjectClock/MathExpressions.swift
+++ b/ProjectClock/MathExpressions.swift
@@ -40,11 +40,10 @@ enum MathOperator : String {
case plus = "+"
case minus = "-"
case multiply = "*"
- case divide = "/"
case power = "**"
static func random() -> MathOperator {
- let allMathOperators: [MathOperator] = [.plus, .minus, .multiply, .divide, .power]
+ let allMathOperators: [MathOperator] = [.plus, .minus, .multiply, .power]
let index = Int(arc4random_uniform(UInt32(allMathOperators.count)))
return allMathOperators[index]
@@ -83,50 +82,42 @@ class MathExpression : CustomStringConvertible {
return "\(leftString) \(self.op.rawValue) \(rightString)"
}
- var result : Int? {
+ var result: Int {
let format = "\(lhs.nsExpressionFormatString) \(op.rawValue) \(rhs.nsExpressionFormatString)"
let expr = NSExpression(format: format)
- return expr.expressionValue(with: nil, context: nil) as? Int
+ let result = expr.expressionValue(with: nil, context: nil)
+ return Int(round(result as! Double))
}
static func random() -> MathExpression {
+ let op: MathOperator = .random()
let lhs = MathElement.Integer(value: Int(arc4random_uniform(10)))
- let rhs = MathElement.Integer(value: Int(arc4random_uniform(10)))
+ let rhs = MathElement.Integer(value: Int(arc4random_uniform(op == .power ? 3 : 10)))
- return MathExpression(lhs: lhs, rhs: rhs, op: .random())
+ return MathExpression(lhs: lhs, rhs: rhs, op: op)
}
}
/**
Generate simple problem - 2 expressions
*/
-class AlgProb2 : MathExpression {
- let a = MathExpression.random()
- let b = MathExpression.random()
+class MathExpProblem
+{
+ let prob: String
+ let ans: Int
- func getProblem() -> String {
- return "\(a) + \(b)"
- }
-
- func getAnswer() -> String {
- return "\(a.result! + b.result!)"
- }
-}
-
-/**
- Generate simple problem - 3 expressions
- */
-class AlgProb3 : MathExpression {
- let a = MathExpression.random()
- let b = MathExpression.random()
- let c = MathExpression.random()
-
- func getProblem() -> String {
- return "\(a) + \(b) + \(c)"
- }
-
- func getAnswer() -> String {
- return "\(a.result! + b.result! + c.result!)"
+ init(size: Int)
+ {
+ var expressions: [String] = []
+ var answer = 0
+ for _ in 1...size
+ {
+ let exp = MathExpression.random()
+ expressions.append(exp.description)
+ answer += exp.result
+ }
+ prob = expressions.joined(separator: " + ")
+ ans = answer
}
}
diff --git a/ProjectClock/Models.swift b/ProjectClock/Models.swift
index 5362127..3741d06 100644
--- a/ProjectClock/Models.swift
+++ b/ProjectClock/Models.swift
@@ -39,9 +39,12 @@ struct WVM: Codable
let wvms = [
+ WVM(name: "Shake", desc: "Shake your phone... aggresively!"),
+ WVM(name: "Math 1", desc: "Easy math expression"),
+ WVM(name: "Math 2", desc: "Medium math expression"),
+ WVM(name: "Math 3", desc: "Hard math expression"),
WVM(name: "Factor", desc: "Factor a binomial"),
WVM(name: "RPS", desc: "Win a game of rock paper scissors"),
- WVM(name: "Shake", desc: "Shake your phone... aggresively!"),
//WVM(name: "Smash", desc: "It'll never turn off"),
//WVM(name: "Walk", desc: "Walk a few steps"),
//WVM(name: "Jump", desc: "Make a few jumps")