trackler 2.0.8.23 → 2.0.8.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/csharp/circle.yml +15 -15
- data/tracks/delphi/README.md +1 -1
- data/tracks/java/exercises/wordy/src/test/java/WordProblemSolverTest.java +24 -16
- data/tracks/lisp/README.md +2 -1
- data/tracks/ocaml/config.json +5 -0
- data/tracks/ocaml/exercises/change/.merlin +5 -0
- data/tracks/ocaml/exercises/change/Makefile +11 -0
- data/tracks/ocaml/exercises/change/change.mli +2 -0
- data/tracks/ocaml/exercises/change/example.ml +22 -0
- data/tracks/ocaml/exercises/change/test.ml +42 -0
- data/tracks/ocaml/exercises/triangle/example.ml +9 -11
- data/tracks/ocaml/exercises/triangle/test.ml +14 -14
- data/tracks/ocaml/exercises/triangle/triangle.mli +3 -3
- data/tracks/ocaml/tools/test-generator/src/special_cases.ml +6 -0
- data/tracks/ocaml/tools/test-generator/templates/change/template.ml +17 -0
- data/tracks/python/config.json +6 -0
- data/tracks/python/exercises/isogram/example.py +3 -0
- data/tracks/python/exercises/isogram/isogram.py +2 -0
- data/tracks/python/exercises/isogram/isogram_test.py +35 -0
- data/tracks/typescript/README.md +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cd390706f6428039b6d1b9bd39c84baff013f05
|
4
|
+
data.tar.gz: 30b3c130a0c8c06afeaf937fe37c1561bfa55b05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b529eaeebfb7dd0c9b7daeaebf58d0a882b93d96ce33f0c3948baa9ec3f54377883fde02ccfc7675d7672baeb00abc8c4413ed4cfc2dce45e0d956ade187a398
|
7
|
+
data.tar.gz: d4e8fce50a75e576c1518821023e6f23ea70e6856035989eeef22fd16db13e883f6d1492b3db2cf94955072df9b85eab382d96a9191713e55a7a8c4461e2a523
|
data/lib/trackler/version.rb
CHANGED
data/tracks/csharp/circle.yml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
1
|
+
version: 2
|
2
|
+
jobs:
|
3
|
+
build:
|
4
|
+
working_directory: /exercism/xcsharp
|
5
|
+
docker:
|
6
|
+
- image: microsoft/dotnet:sdk
|
7
|
+
environment:
|
8
|
+
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
|
9
|
+
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
10
|
+
steps:
|
11
|
+
- checkout
|
12
|
+
- run: apt-get -qq update; apt-get -y install unzip
|
13
|
+
- run: ./bin/fetch-configlet
|
14
|
+
- run: ./bin/configlet .
|
15
|
+
- run: ./build.sh
|
data/tracks/delphi/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# xDelphi
|
2
2
|
|
3
|
-
[](https://travis-ci.org/exercism/xdelphi)
|
4
4
|
|
5
5
|
Exercism exercises in Delphi Pascal.
|
6
6
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import org.junit.Ignore;
|
2
2
|
import org.junit.Rule;
|
3
3
|
import org.junit.Test;
|
4
|
+
import org.junit.Before;
|
4
5
|
import org.junit.rules.ExpectedException;
|
5
6
|
|
6
7
|
import static org.junit.Assert.assertEquals;
|
@@ -14,87 +15,94 @@ public final class WordProblemSolverTest {
|
|
14
15
|
@Rule
|
15
16
|
public ExpectedException expectedException = ExpectedException.none();
|
16
17
|
|
18
|
+
WordProblemSolver solver;
|
19
|
+
|
20
|
+
@Before
|
21
|
+
public void setup() {
|
22
|
+
solver = new WordProblemSolver();
|
23
|
+
}
|
24
|
+
|
17
25
|
@Test
|
18
26
|
public void testSingleAddition1() {
|
19
|
-
assertEquals(2,
|
27
|
+
assertEquals(2, solver.solve("What is 1 plus 1?"));
|
20
28
|
}
|
21
29
|
|
22
30
|
@Ignore
|
23
31
|
@Test
|
24
32
|
public void testSingleAddition2() {
|
25
|
-
assertEquals(55,
|
33
|
+
assertEquals(55, solver.solve("What is 53 plus 2?"));
|
26
34
|
}
|
27
35
|
|
28
36
|
@Ignore
|
29
37
|
@Test
|
30
38
|
public void testSingleAdditionWithNegativeNumbers() {
|
31
|
-
assertEquals(-11,
|
39
|
+
assertEquals(-11, solver.solve("What is -1 plus -10?"));
|
32
40
|
}
|
33
41
|
|
34
42
|
@Ignore
|
35
43
|
@Test
|
36
44
|
public void testSingleAdditionOfLargeNumbers() {
|
37
|
-
assertEquals(45801,
|
45
|
+
assertEquals(45801, solver.solve("What is 123 plus 45678?"));
|
38
46
|
}
|
39
47
|
|
40
48
|
@Ignore
|
41
49
|
@Test
|
42
50
|
public void testSingleSubtraction() {
|
43
|
-
assertEquals(16,
|
51
|
+
assertEquals(16, solver.solve("What is 4 minus -12?"));
|
44
52
|
}
|
45
53
|
|
46
54
|
@Ignore
|
47
55
|
@Test
|
48
56
|
public void testSingleMultiplication() {
|
49
|
-
assertEquals(-75,
|
57
|
+
assertEquals(-75, solver.solve("What is -3 multiplied by 25?"));
|
50
58
|
}
|
51
59
|
|
52
60
|
@Ignore
|
53
61
|
@Test
|
54
62
|
public void testSingleDivision() {
|
55
|
-
assertEquals(-11,
|
63
|
+
assertEquals(-11, solver.solve("What is 33 divided by -3?"));
|
56
64
|
}
|
57
65
|
|
58
66
|
@Ignore
|
59
67
|
@Test
|
60
68
|
public void testMultipleAdditions() {
|
61
|
-
assertEquals(3,
|
69
|
+
assertEquals(3, solver.solve("What is 1 plus 1 plus 1?"));
|
62
70
|
}
|
63
71
|
|
64
72
|
@Ignore
|
65
73
|
@Test
|
66
74
|
public void testAdditionThenSubtraction() {
|
67
|
-
assertEquals(8,
|
75
|
+
assertEquals(8, solver.solve("What is 1 plus 5 minus -2?"));
|
68
76
|
}
|
69
77
|
|
70
78
|
@Ignore
|
71
79
|
@Test
|
72
80
|
public void testMultipleSubtractions() {
|
73
|
-
assertEquals(3,
|
81
|
+
assertEquals(3, solver.solve("What is 20 minus 4 minus 13?"));
|
74
82
|
}
|
75
83
|
|
76
84
|
@Ignore
|
77
85
|
@Test
|
78
86
|
public void testSubtractionThenAddition() {
|
79
|
-
assertEquals(14,
|
87
|
+
assertEquals(14, solver.solve("What is 17 minus 6 plus 3?"));
|
80
88
|
}
|
81
89
|
|
82
90
|
@Ignore
|
83
91
|
@Test
|
84
92
|
public void testMultipleMultiplications() {
|
85
|
-
assertEquals(-12,
|
93
|
+
assertEquals(-12, solver.solve("What is 2 multiplied by -2 multiplied by 3?"));
|
86
94
|
}
|
87
95
|
|
88
96
|
@Ignore
|
89
97
|
@Test
|
90
98
|
public void testAdditionThenMultiplication() {
|
91
|
-
assertEquals(-8,
|
99
|
+
assertEquals(-8, solver.solve("What is -3 plus 7 multiplied by -2?"));
|
92
100
|
}
|
93
101
|
|
94
102
|
@Ignore
|
95
103
|
@Test
|
96
104
|
public void testMultipleDivisions() {
|
97
|
-
assertEquals(2,
|
105
|
+
assertEquals(2, solver.solve("What is -12 divided by 2 divided by -3?"));
|
98
106
|
}
|
99
107
|
|
100
108
|
@Ignore
|
@@ -103,7 +111,7 @@ public final class WordProblemSolverTest {
|
|
103
111
|
expectedException.expect(IllegalArgumentException.class);
|
104
112
|
expectedException.expectMessage("I'm sorry, I don't understand the question!");
|
105
113
|
|
106
|
-
|
114
|
+
solver.solve("What is 52 cubed?");
|
107
115
|
}
|
108
116
|
|
109
117
|
@Ignore
|
@@ -113,7 +121,7 @@ public final class WordProblemSolverTest {
|
|
113
121
|
expectedException.expectMessage("I'm sorry, I don't understand the question!");
|
114
122
|
|
115
123
|
// See https://en.wikipedia.org/wiki/President_of_the_United_States if you really need to know!
|
116
|
-
|
124
|
+
solver.solve("Who is the President of the United States?");
|
117
125
|
}
|
118
126
|
|
119
127
|
}
|
data/tracks/lisp/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# xLisp
|
2
2
|
|
3
|
+
[](https://travis-ci.org/exercism/xlisp)
|
4
|
+
|
3
5
|
Exercism exercises in Lisp
|
4
6
|
|
5
|
-
[](https://travis-ci.org/exercism/xlisp)
|
6
7
|
|
7
8
|
## Contributing To the Common Lisp Track
|
8
9
|
|
data/tracks/ocaml/config.json
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
open Core.Std
|
2
|
+
|
3
|
+
let find_smallest_coins_list_meeting_target (cache: int list option array) (coins: int list) (target: int): int list option =
|
4
|
+
let find_coins_meeting_target_minus_coin coin =
|
5
|
+
if target = coin
|
6
|
+
then Some [coin]
|
7
|
+
else cache.(target - coin) |> Option.map ~f:(List.cons coin) in
|
8
|
+
List.filter coins ~f:(fun x -> x <= target)
|
9
|
+
|> List.map ~f:find_coins_meeting_target_minus_coin
|
10
|
+
|> List.filter_map ~f:(Fn.id)
|
11
|
+
|> List.sort ~cmp:(fun xs ys -> Int.compare (List.length xs) (List.length ys))
|
12
|
+
|> List.hd
|
13
|
+
|
14
|
+
let make_change ~target ~coins = match target with
|
15
|
+
| 0 -> Some []
|
16
|
+
| _ when target < 0 -> None
|
17
|
+
| _ ->
|
18
|
+
let cache = Array.create ~len:(target+1) None in
|
19
|
+
for i = 1 to target do
|
20
|
+
cache.(i) <- find_smallest_coins_list_meeting_target cache coins i
|
21
|
+
done;
|
22
|
+
cache.(target)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
open Core.Std
|
2
|
+
open OUnit2
|
3
|
+
open Change
|
4
|
+
|
5
|
+
let printer = Option.value_map ~default:"None" ~f:(List.to_string ~f:Int.to_string)
|
6
|
+
let ae exp got _test_ctxt = assert_equal ~printer exp got
|
7
|
+
|
8
|
+
let tests = [
|
9
|
+
"single coin change" >::
|
10
|
+
ae (Some [25])
|
11
|
+
(make_change ~target:25 ~coins:[1; 5; 10; 25; 100]);
|
12
|
+
"multiple coin change" >::
|
13
|
+
ae (Some [5; 10])
|
14
|
+
(make_change ~target:15 ~coins:[1; 5; 10; 25; 100]);
|
15
|
+
"change with Lilliputian Coins" >::
|
16
|
+
ae (Some [4; 4; 15])
|
17
|
+
(make_change ~target:23 ~coins:[1; 4; 15; 20; 50]);
|
18
|
+
"change with Lower Elbonia Coins" >::
|
19
|
+
ae (Some [21; 21; 21])
|
20
|
+
(make_change ~target:63 ~coins:[1; 5; 10; 21; 25]);
|
21
|
+
"large target values" >::
|
22
|
+
ae (Some [2; 2; 5; 20; 20; 50; 100; 100; 100; 100; 100; 100; 100; 100; 100])
|
23
|
+
(make_change ~target:999 ~coins:[1; 2; 5; 10; 20; 50; 100]);
|
24
|
+
"possible change without unit coins available" >::
|
25
|
+
ae (Some [2; 2; 2; 5; 10])
|
26
|
+
(make_change ~target:21 ~coins:[2; 5; 10; 20; 50]);
|
27
|
+
"no coins make 0 change" >::
|
28
|
+
ae (Some [])
|
29
|
+
(make_change ~target:0 ~coins:[1; 5; 10; 21; 25]);
|
30
|
+
"error testing for change smaller than the smallest of coins" >::
|
31
|
+
ae None
|
32
|
+
(make_change ~target:3 ~coins:[5; 10]);
|
33
|
+
"error if no combination can add up to target" >::
|
34
|
+
ae None
|
35
|
+
(make_change ~target:94 ~coins:[5; 10]);
|
36
|
+
"cannot find negative change values" >::
|
37
|
+
ae None
|
38
|
+
(make_change ~target:(-5) ~coins:[1; 2; 5]);
|
39
|
+
]
|
40
|
+
|
41
|
+
let () =
|
42
|
+
run_test_tt_main ("change tests" >::: tests)
|
@@ -1,17 +1,15 @@
|
|
1
1
|
open Core.Std
|
2
2
|
|
3
|
-
let sort_sides =
|
4
|
-
|
5
|
-
|
6
|
-
(side 0, side 1, side 2)
|
7
|
-
| _ -> failwith "not at triangle"
|
3
|
+
let sort_sides a b c =
|
4
|
+
let side = List.nth_exn (List.sort ~cmp:Int.compare [a; b; c]) in
|
5
|
+
(side 0, side 1, side 2)
|
8
6
|
|
9
|
-
let is_triangle
|
10
|
-
let (a, b, c) = sort_sides
|
11
|
-
c > 0 && c <= a + b
|
7
|
+
let is_triangle a b c =
|
8
|
+
let (a, b, c) = sort_sides a b c in
|
9
|
+
c > 0 && c <= a + b
|
12
10
|
|
13
|
-
let is_equilateral = is_triangle
|
11
|
+
let is_equilateral a b c = is_triangle a b c && a = b && b = c
|
14
12
|
|
15
|
-
let is_isoceles = is_triangle
|
13
|
+
let is_isoceles a b c = is_triangle a b c && (a = b || b = c || a = c)
|
16
14
|
|
17
|
-
let is_scalene = is_triangle
|
15
|
+
let is_scalene a b c = is_triangle a b c && (a <> b && b <> c)
|
@@ -6,39 +6,39 @@ let ae exp got _test_ctxt = assert_equal exp got ~printer:Bool.to_string
|
|
6
6
|
|
7
7
|
let equilateral_tests = [
|
8
8
|
"true if all sides are equal" >::
|
9
|
-
ae true (is_equilateral
|
9
|
+
ae true (is_equilateral 2 2 2);
|
10
10
|
"false if any side is unequal" >::
|
11
|
-
ae false (is_equilateral
|
11
|
+
ae false (is_equilateral 2 3 2);
|
12
12
|
"false if no sides are equal" >::
|
13
|
-
ae false (is_equilateral
|
13
|
+
ae false (is_equilateral 5 4 6);
|
14
14
|
"All zero sides are illegal, so the triangle is not equilateral" >::
|
15
|
-
ae false (is_equilateral
|
15
|
+
ae false (is_equilateral 0 0 0);
|
16
16
|
]
|
17
17
|
|
18
18
|
let isoceles_tests = [
|
19
19
|
"true if last two sides are equal" >::
|
20
|
-
ae true (is_isoceles
|
20
|
+
ae true (is_isoceles 3 4 4);
|
21
21
|
"true if first two sides are equal" >::
|
22
|
-
ae true (is_isoceles
|
22
|
+
ae true (is_isoceles 4 4 3);
|
23
23
|
"true if first and last sides are equal" >::
|
24
|
-
ae true (is_isoceles
|
24
|
+
ae true (is_isoceles 4 3 4);
|
25
25
|
"equilateral triangles are also isosceles" >::
|
26
|
-
ae true (is_isoceles
|
26
|
+
ae true (is_isoceles 4 4 4);
|
27
27
|
"false if no sides are equal" >::
|
28
|
-
ae false (is_isoceles
|
28
|
+
ae false (is_isoceles 2 3 4);
|
29
29
|
"Sides that violate triangle inequality are not isosceles, even if two are equal" >::
|
30
|
-
ae false (is_isoceles
|
30
|
+
ae false (is_isoceles 1 1 3);
|
31
31
|
]
|
32
32
|
|
33
33
|
let scalene_tests = [
|
34
34
|
"true if no sides are equal" >::
|
35
|
-
ae true (is_scalene
|
35
|
+
ae true (is_scalene 5 4 6);
|
36
36
|
"false if all sides are equal" >::
|
37
|
-
ae false (is_scalene
|
37
|
+
ae false (is_scalene 4 4 4);
|
38
38
|
"false if two sides are equal" >::
|
39
|
-
ae false (is_scalene
|
39
|
+
ae false (is_scalene 4 4 3);
|
40
40
|
"Sides that violate triangle inequality are not scalene, even if they are all different" >::
|
41
|
-
ae false (is_scalene
|
41
|
+
ae false (is_scalene 7 3 2);
|
42
42
|
]
|
43
43
|
|
44
44
|
let () =
|
@@ -48,12 +48,18 @@ let edit_connect_expected = function
|
|
48
48
|
| `String "" -> "None"
|
49
49
|
| x -> failwith "Bad json value in connect " ^ json_to_string x
|
50
50
|
|
51
|
+
let edit_change_expected (value: json) = match value with
|
52
|
+
| `List xs -> "(Some [" ^ (String.concat ~sep:"; " (List.map ~f:json_to_string xs)) ^ "])"
|
53
|
+
| `Int (-1) -> "None"
|
54
|
+
| _ -> failwith "Bad json value in change"
|
55
|
+
|
51
56
|
let edit_expected ~(stringify: json -> string) ~(slug: string) ~(value: json) = match slug with
|
52
57
|
| "hamming" -> optional_int ~none:(-1) value
|
53
58
|
| "all-your-base" -> optional_int_list value
|
54
59
|
| "say" -> optional_int_or_string ~none:(-1) value
|
55
60
|
| "phone-number" -> option_of_null value
|
56
61
|
| "connect" -> edit_connect_expected value
|
62
|
+
| "change" -> edit_change_expected value
|
57
63
|
| _ -> stringify value
|
58
64
|
|
59
65
|
let edit_say (ps: (string * json) list) =
|
@@ -0,0 +1,17 @@
|
|
1
|
+
open Core.Std
|
2
|
+
open OUnit2
|
3
|
+
open Change
|
4
|
+
|
5
|
+
let printer = Option.value_map ~default:"None" ~f:(List.to_string ~f:Int.to_string)
|
6
|
+
let ae exp got _test_ctxt = assert_equal ~printer exp got
|
7
|
+
|
8
|
+
let tests = [
|
9
|
+
(* TEST
|
10
|
+
"$description" >::
|
11
|
+
ae $expected
|
12
|
+
(make_change ~target:$target ~coins:$coins);
|
13
|
+
END TEST *)
|
14
|
+
]
|
15
|
+
|
16
|
+
let () =
|
17
|
+
run_test_tt_main ("change tests" >::: tests)
|
data/tracks/python/config.json
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
import unittest
|
2
|
+
from isogram import is_isogram
|
3
|
+
|
4
|
+
|
5
|
+
# test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
|
6
|
+
|
7
|
+
class TestIsogram(unittest.TestCase):
|
8
|
+
|
9
|
+
def test_empty_string(self):
|
10
|
+
self.assertTrue(is_isogram(""))
|
11
|
+
|
12
|
+
def test_isogram_with_only_lower_case_characters(self):
|
13
|
+
self.assertTrue(is_isogram("isogram"))
|
14
|
+
|
15
|
+
def test_word_with_one_duplicated_character(self):
|
16
|
+
self.assertFalse(is_isogram("eleven"))
|
17
|
+
|
18
|
+
def test_longest_reported_english_isogram(self):
|
19
|
+
self.assertTrue(is_isogram("subdermatoglyphic"))
|
20
|
+
|
21
|
+
def test_word_with_duplicated_character_in_mixed_case(self):
|
22
|
+
self.assertFalse(is_isogram("Alphabet"))
|
23
|
+
|
24
|
+
def test_hypothetical_isogrammic_word_with_hyphen(self):
|
25
|
+
self.assertTrue(is_isogram("thumbscrew-japingly"))
|
26
|
+
|
27
|
+
def test_isogram_with_duplicated_non_letter_character(self):
|
28
|
+
self.assertTrue(is_isogram("Hjelmqvist-Gryb-Zock-Pfund-Wax"))
|
29
|
+
|
30
|
+
def test_made_up_name_that_is_an_isogram(self):
|
31
|
+
self.assertTrue(is_isogram("Emily Jung Schwartzkopf"))
|
32
|
+
|
33
|
+
|
34
|
+
if __name__ == '__main__':
|
35
|
+
unittest.main()
|
data/tracks/typescript/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# xTypeScript [](https://travis-ci.org/exercism/xtypescript)
|
2
2
|
|
3
3
|
Exercism exercises in TypeScript
|
4
4
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.8.
|
4
|
+
version: 2.0.8.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -5712,6 +5712,11 @@ files:
|
|
5712
5712
|
- tracks/ocaml/exercises/bracket-push/bracket_push.mli
|
5713
5713
|
- tracks/ocaml/exercises/bracket-push/example.ml
|
5714
5714
|
- tracks/ocaml/exercises/bracket-push/test.ml
|
5715
|
+
- tracks/ocaml/exercises/change/.merlin
|
5716
|
+
- tracks/ocaml/exercises/change/Makefile
|
5717
|
+
- tracks/ocaml/exercises/change/change.mli
|
5718
|
+
- tracks/ocaml/exercises/change/example.ml
|
5719
|
+
- tracks/ocaml/exercises/change/test.ml
|
5715
5720
|
- tracks/ocaml/exercises/connect/.merlin
|
5716
5721
|
- tracks/ocaml/exercises/connect/Makefile
|
5717
5722
|
- tracks/ocaml/exercises/connect/connect.mli
|
@@ -5887,6 +5892,7 @@ files:
|
|
5887
5892
|
- tracks/ocaml/tools/test-generator/templates/beer-song/template.ml
|
5888
5893
|
- tracks/ocaml/tools/test-generator/templates/bob/template.ml
|
5889
5894
|
- tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml
|
5895
|
+
- tracks/ocaml/tools/test-generator/templates/change/template.ml
|
5890
5896
|
- tracks/ocaml/tools/test-generator/templates/connect/template.ml
|
5891
5897
|
- tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml
|
5892
5898
|
- tracks/ocaml/tools/test-generator/templates/dominoes/template.ml
|
@@ -6545,6 +6551,9 @@ files:
|
|
6545
6551
|
- tracks/python/exercises/house/example.py
|
6546
6552
|
- tracks/python/exercises/house/house.py
|
6547
6553
|
- tracks/python/exercises/house/house_test.py
|
6554
|
+
- tracks/python/exercises/isogram/example.py
|
6555
|
+
- tracks/python/exercises/isogram/isogram.py
|
6556
|
+
- tracks/python/exercises/isogram/isogram_test.py
|
6548
6557
|
- tracks/python/exercises/kindergarten-garden/example.py
|
6549
6558
|
- tracks/python/exercises/kindergarten-garden/kindergarten_garden.py
|
6550
6559
|
- tracks/python/exercises/kindergarten-garden/kindergarten_garden_test.py
|