trackler 2.0.8.23 → 2.0.8.24

Sign up to get free protection for your applications and to get access to all the features.
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