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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a1f212f5e5a8fe0bd77c82df4bb702031173e6a
4
- data.tar.gz: f69ad361660445af45147b30a15af3bb30028a46
3
+ metadata.gz: 9cd390706f6428039b6d1b9bd39c84baff013f05
4
+ data.tar.gz: 30b3c130a0c8c06afeaf937fe37c1561bfa55b05
5
5
  SHA512:
6
- metadata.gz: b0c6afffb4a75f583baf4673a4b88c6b8f27ec0d9c91732abdd13823ac97e1663c24b14b891477fddc97e273997a09df02ec50590909400960a0e8a6f9aebc6e
7
- data.tar.gz: ca2bbf86a9563cb67f6577505b5e7a7bce225cbdc6edb380cd7595b9a868e5661384ffbec352580083aa0b67564e329195a8612d74a47084e47b46fe5d6b6f23
6
+ metadata.gz: b529eaeebfb7dd0c9b7daeaebf58d0a882b93d96ce33f0c3948baa9ec3f54377883fde02ccfc7675d7672baeb00abc8c4413ed4cfc2dce45e0d956ade187a398
7
+ data.tar.gz: d4e8fce50a75e576c1518821023e6f23ea70e6856035989eeef22fd16db13e883f6d1492b3db2cf94955072df9b85eab382d96a9191713e55a7a8c4461e2a523
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.8.23"
2
+ VERSION = "2.0.8.24"
3
3
  end
@@ -1,15 +1,15 @@
1
- machine:
2
- environment:
3
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
4
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
5
- dependencies:
6
- pre:
7
- - sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
8
- - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
9
- - sudo apt-get update
10
- - sudo apt-get install dotnet-dev-1.0.1
11
- test:
12
- override:
13
- - ./bin/fetch-configlet
14
- - ./bin/configlet .
15
- - ./build.sh
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
@@ -1,6 +1,6 @@
1
1
  # xDelphi
2
2
 
3
- [![Build Status](https://travis-ci.org/exercism/xdelphi.png?branch=master)](https://travis-ci.org/exercism/xdelphi)
3
+ [![Build Status](https://travis-ci.org/exercism/xdelphi.svg?branch=master)](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, new WordProblemSolver().solve("What is 1 plus 1?"));
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, new WordProblemSolver().solve("What is 53 plus 2?"));
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, new WordProblemSolver().solve("What is -1 plus -10?"));
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, new WordProblemSolver().solve("What is 123 plus 45678?"));
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, new WordProblemSolver().solve("What is 4 minus -12?"));
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, new WordProblemSolver().solve("What is -3 multiplied by 25?"));
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, new WordProblemSolver().solve("What is 33 divided by -3?"));
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, new WordProblemSolver().solve("What is 1 plus 1 plus 1?"));
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, new WordProblemSolver().solve("What is 1 plus 5 minus -2?"));
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, new WordProblemSolver().solve("What is 20 minus 4 minus 13?"));
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, new WordProblemSolver().solve("What is 17 minus 6 plus 3?"));
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, new WordProblemSolver().solve("What is 2 multiplied by -2 multiplied by 3?"));
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, new WordProblemSolver().solve("What is -3 plus 7 multiplied by -2?"));
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, new WordProblemSolver().solve("What is -12 divided by 2 divided by -3?"));
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
- new WordProblemSolver().solve("What is 52 cubed?");
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
- new WordProblemSolver().solve("Who is the President of the United States?");
124
+ solver.solve("Who is the President of the United States?");
117
125
  }
118
126
 
119
127
  }
@@ -1,8 +1,9 @@
1
1
  # xLisp
2
2
 
3
+ [![Build Status](https://travis-ci.org/exercism/xlisp.svg)](https://travis-ci.org/exercism/xlisp)
4
+
3
5
  Exercism exercises in Lisp
4
6
 
5
- [![Build Status](https://travis-ci.org/exercism/xlisp.png)](https://travis-ci.org/exercism/xlisp)
6
7
 
7
8
  ## Contributing To the Common Lisp Track
8
9
 
@@ -141,6 +141,11 @@
141
141
  "difficulty": 6,
142
142
  "topics": ["Randomness", "Mutable state"]
143
143
  },
144
+ {
145
+ "slug": "change",
146
+ "difficulty": 6,
147
+ "topics": ["Dynamic Programming"]
148
+ },
144
149
  {
145
150
  "slug": "list-ops",
146
151
  "difficulty": 6,
@@ -0,0 +1,5 @@
1
+ PKG findlib
2
+ PKG core
3
+ PKG ounit
4
+ S *
5
+ B *
@@ -0,0 +1,11 @@
1
+ test: test.native
2
+ @./test.native
3
+
4
+ test.native: *.ml *.mli
5
+ @corebuild -r -quiet -pkg oUnit test.native
6
+
7
+ clean:
8
+ rm -rf _build
9
+ rm -f test.native
10
+
11
+ .PHONY: clean
@@ -0,0 +1,2 @@
1
+ (* If it is impossible to make the target with the given coins, then return None *)
2
+ val make_change : target: int -> coins: int list -> int list option
@@ -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 = function
4
- | [_; _; _] as sides ->
5
- let side = List.nth_exn (List.sort sides ~cmp:Int.compare) in
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 f sides =
10
- let (a, b, c) = sort_sides sides in
11
- c > 0 && c <= a + b && f a b c
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 (fun a b c -> a = b && b = c)
11
+ let is_equilateral a b c = is_triangle a b c && a = b && b = c
14
12
 
15
- let is_isoceles = is_triangle (fun a b c -> a = b || b = c)
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 (fun a b c -> a <> b && b <> c)
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 [2; 2; 2]);
9
+ ae true (is_equilateral 2 2 2);
10
10
  "false if any side is unequal" >::
11
- ae false (is_equilateral [2; 3; 2]);
11
+ ae false (is_equilateral 2 3 2);
12
12
  "false if no sides are equal" >::
13
- ae false (is_equilateral [5; 4; 6]);
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 [0; 0; 0]);
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 [3; 4; 4]);
20
+ ae true (is_isoceles 3 4 4);
21
21
  "true if first two sides are equal" >::
22
- ae true (is_isoceles [4; 4; 3]);
22
+ ae true (is_isoceles 4 4 3);
23
23
  "true if first and last sides are equal" >::
24
- ae true (is_isoceles [4; 3; 4]);
24
+ ae true (is_isoceles 4 3 4);
25
25
  "equilateral triangles are also isosceles" >::
26
- ae true (is_isoceles [4; 4; 4]);
26
+ ae true (is_isoceles 4 4 4);
27
27
  "false if no sides are equal" >::
28
- ae false (is_isoceles [2; 3; 4]);
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 [1; 1; 3]);
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 [5; 4; 6]);
35
+ ae true (is_scalene 5 4 6);
36
36
  "false if all sides are equal" >::
37
- ae false (is_scalene [4; 4; 4]);
37
+ ae false (is_scalene 4 4 4);
38
38
  "false if two sides are equal" >::
39
- ae false (is_scalene [4; 4; 3]);
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 [7; 3; 2]);
41
+ ae false (is_scalene 7 3 2);
42
42
  ]
43
43
 
44
44
  let () =
@@ -1,5 +1,5 @@
1
- val is_equilateral : (int list) -> bool
1
+ val is_equilateral : int -> int -> int -> bool
2
2
 
3
- val is_isoceles : (int list) -> bool
3
+ val is_isoceles : int -> int -> int -> bool
4
4
 
5
- val is_scalene : (int list) -> bool
5
+ val is_scalene : int -> int -> int -> bool
@@ -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)
@@ -33,6 +33,12 @@
33
33
  "text formatting"
34
34
  ]
35
35
  },
36
+ {
37
+ "slug": "isogram",
38
+ "difficulty": 1,
39
+ "topics": [
40
+ ]
41
+ },
36
42
  {
37
43
  "slug": "pangram",
38
44
  "difficulty": 1,
@@ -0,0 +1,3 @@
1
+ def is_isogram(string):
2
+ characters_lower = [c.lower() for c in string if c.isalpha()]
3
+ return len(set(characters_lower)) == len(characters_lower)
@@ -0,0 +1,2 @@
1
+ def is_isogram():
2
+ pass
@@ -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()
@@ -1,4 +1,4 @@
1
- # xTypeScript [![Build Status](https://travis-ci.org/exercism/xtypescript.png?branch=master)](https://travis-ci.org/exercism/xtypescript)
1
+ # xTypeScript [![Build Status](https://travis-ci.org/exercism/xtypescript.svg?branch=master)](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.23
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-18 00:00:00.000000000 Z
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