Skip to content

Commit 0766d16

Browse files
ScrabbleScore SquareRoot SumOfMultiples Generator (#124)
1 parent 5125692 commit 0766d16

File tree

5 files changed

+129
-12
lines changed

5 files changed

+129
-12
lines changed

exercises/practice/sum-of-multiples/SumOfMultiplesTest.lean

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,37 @@ open LeanTest
66
def sumOfMultiplesTests : TestSuite :=
77
(TestSuite.empty "SumOfMultiples")
88
|>.addTest "no multiples within limit" (do
9-
return assertEqual 0 (SumOfMultiples.sum [3, 5] 1))
9+
return assertEqual 0 (SumOfMultiples.sum [3,5] 1))
1010
|>.addTest "one factor has multiples within limit" (do
11-
return assertEqual 3 (SumOfMultiples.sum [3, 5] 4))
11+
return assertEqual 3 (SumOfMultiples.sum [3,5] 4))
1212
|>.addTest "more than one multiple within limit" (do
1313
return assertEqual 9 (SumOfMultiples.sum [3] 7))
1414
|>.addTest "more than one factor with multiples within limit" (do
15-
return assertEqual 23 (SumOfMultiples.sum [3, 5] 10))
15+
return assertEqual 23 (SumOfMultiples.sum [3,5] 10))
1616
|>.addTest "each multiple is only counted once" (do
17-
return assertEqual 2318 (SumOfMultiples.sum [3, 5] 100))
17+
return assertEqual 2318 (SumOfMultiples.sum [3,5] 100))
1818
|>.addTest "a much larger limit" (do
19-
return assertEqual 233168 (SumOfMultiples.sum [3, 5] 1000))
19+
return assertEqual 233168 (SumOfMultiples.sum [3,5] 1000))
2020
|>.addTest "three factors" (do
21-
return assertEqual 51 (SumOfMultiples.sum [7, 13, 17] 20))
21+
return assertEqual 51 (SumOfMultiples.sum [7,13,17] 20))
2222
|>.addTest "factors not relatively prime" (do
23-
return assertEqual 30 (SumOfMultiples.sum [4, 6] 15))
23+
return assertEqual 30 (SumOfMultiples.sum [4,6] 15))
2424
|>.addTest "some pairs of factors relatively prime and some not" (do
25-
return assertEqual 4419 (SumOfMultiples.sum [5, 6, 8] 150))
25+
return assertEqual 4419 (SumOfMultiples.sum [5,6,8] 150))
2626
|>.addTest "one factor is a multiple of another" (do
27-
return assertEqual 275 (SumOfMultiples.sum [5, 25] 51))
27+
return assertEqual 275 (SumOfMultiples.sum [5,25] 51))
2828
|>.addTest "much larger factors" (do
29-
return assertEqual 2203160 (SumOfMultiples.sum [43, 47] 10000))
29+
return assertEqual 2203160 (SumOfMultiples.sum [43,47] 10000))
3030
|>.addTest "all numbers are multiples of 1" (do
3131
return assertEqual 4950 (SumOfMultiples.sum [1] 100))
3232
|>.addTest "no factors means an empty sum" (do
3333
return assertEqual 0 (SumOfMultiples.sum [] 10000))
3434
|>.addTest "the only multiple of 0 is 0" (do
3535
return assertEqual 0 (SumOfMultiples.sum [0] 1))
3636
|>.addTest "the factor 0 does not affect the sum of multiples of other factors" (do
37-
return assertEqual 3 (SumOfMultiples.sum [3, 0] 4))
37+
return assertEqual 3 (SumOfMultiples.sum [3,0] 4))
3838
|>.addTest "solutions using include-exclude must extend to cardinality greater than 3" (do
39-
return assertEqual 39614537 (SumOfMultiples.sum [2, 3, 5, 7, 11] 10000))
39+
return assertEqual 39614537 (SumOfMultiples.sum [2,3,5,7,11] 10000))
4040

4141
def main : IO UInt32 := do
4242
runTestSuitesWithExitCode [sumOfMultiplesTests]

generators/Generator/Generator.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import Generator.DominoesGenerator
77
import Generator.HighScoresGenerator
88
import Generator.IsogramGenerator
99
import Generator.PangramGenerator
10+
import Generator.ScrabbleScoreGenerator
11+
import Generator.SquareRootGenerator
12+
import Generator.SumOfMultiplesGenerator
1013
import Generator.SublistGenerator
1114
import Generator.RelativeDistanceGenerator
1215
import Generator.HouseGenerator
@@ -86,6 +89,9 @@ def dispatch : Std.HashMap String (introGenerator × testCaseGenerator × endBod
8689
("HighScores", (HighScoresGenerator.genIntro, HighScoresGenerator.genTestCase, HighScoresGenerator.genEnd)),
8790
("Isogram", (IsogramGenerator.genIntro, IsogramGenerator.genTestCase, IsogramGenerator.genEnd)),
8891
("Pangram", (PangramGenerator.genIntro, PangramGenerator.genTestCase, PangramGenerator.genEnd)),
92+
("ScrabbleScore", (ScrabbleScoreGenerator.genIntro, ScrabbleScoreGenerator.genTestCase, ScrabbleScoreGenerator.genEnd)),
93+
("SquareRoot", (SquareRootGenerator.genIntro, SquareRootGenerator.genTestCase, SquareRootGenerator.genEnd)),
94+
("SumOfMultiples", (SumOfMultiplesGenerator.genIntro, SumOfMultiplesGenerator.genTestCase, SumOfMultiplesGenerator.genEnd)),
8995
("Sublist", (SublistGenerator.genIntro, SublistGenerator.genTestCase, SublistGenerator.genEnd)),
9096
("RelativeDistance", (RelativeDistanceGenerator.genIntro, RelativeDistanceGenerator.genTestCase, RelativeDistanceGenerator.genEnd)),
9197
("House", (HouseGenerator.genIntro, HouseGenerator.genTestCase, HouseGenerator.genEnd)),
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace ScrabbleScoreGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := case.get! "input"
21+
let expected := case.get! "expected"
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let funName := getFunName (case.get! "property")
25+
let call := s!"({exercise}.{funName} {insertAllInputs input})"
26+
s!"
27+
|>.addTest {description} (do
28+
return assertEqual {expected} {call})"
29+
30+
def genEnd (exercise : String) : String :=
31+
s!"
32+
33+
def main : IO UInt32 := do
34+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
35+
"
36+
37+
end ScrabbleScoreGenerator
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace SquareRootGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := case.get! "input"
21+
let expected := case.get! "expected"
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let funName := getFunName (case.get! "property")
25+
let call := s!"({exercise}.{funName} {insertAllInputs input})"
26+
s!"
27+
|>.addTest {description} (do
28+
return assertEqual {expected} {call})"
29+
30+
def genEnd (exercise : String) : String :=
31+
s!"
32+
33+
def main : IO UInt32 := do
34+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
35+
"
36+
37+
end SquareRootGenerator
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Lean.Data.Json
2+
import Std
3+
import Helper
4+
5+
open Lean
6+
open Std
7+
open Helper
8+
9+
namespace SumOfMultiplesGenerator
10+
11+
def genIntro (exercise : String) : String := s!"import LeanTest
12+
import {exercise}
13+
14+
open LeanTest
15+
16+
def {exercise.decapitalize}Tests : TestSuite :=
17+
(TestSuite.empty \"{exercise}\")"
18+
19+
def genTestCase (exercise : String) (case : TreeMap.Raw String Json) : String :=
20+
let input := case.get! "input"
21+
let expected := case.get! "expected"
22+
let description := case.get! "description"
23+
|> (·.compress)
24+
let funName := getFunName (case.get! "property")
25+
let call := s!"({exercise}.{funName} {insertAllInputs input})"
26+
s!"
27+
|>.addTest {description} (do
28+
return assertEqual {expected} {call})"
29+
30+
def genEnd (exercise : String) : String :=
31+
s!"
32+
33+
def main : IO UInt32 := do
34+
runTestSuitesWithExitCode [{exercise.decapitalize}Tests]
35+
"
36+
37+
end SumOfMultiplesGenerator

0 commit comments

Comments
 (0)