trackler 2.0.6.22 → 2.0.6.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/book-store/canonical-data.json +61 -80
  3. data/common/exercises/etl/canonical-data.json +69 -0
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/go/config.json +10 -4
  6. data/tracks/java/config.json +13 -1
  7. data/tracks/java/exercises/diamond/build.gradle +17 -0
  8. data/tracks/java/exercises/diamond/src/example/java/DiamondPrinter.java +41 -0
  9. data/tracks/java/exercises/diamond/src/main/java/DiamondPrinter.java +5 -0
  10. data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +111 -0
  11. data/tracks/java/exercises/grade-school/src/example/java/School.java +20 -19
  12. data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +53 -20
  13. data/tracks/java/exercises/secret-handshake/build.gradle +17 -0
  14. data/tracks/java/exercises/secret-handshake/src/example/java/HandshakeCalculator.java +29 -0
  15. data/tracks/java/exercises/secret-handshake/src/example/java/Signal.java +1 -0
  16. data/tracks/java/exercises/secret-handshake/src/main/java/HandshakeCalculator.java +5 -0
  17. data/tracks/java/exercises/secret-handshake/src/main/java/Signal.java +5 -0
  18. data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +106 -0
  19. data/tracks/java/exercises/settings.gradle +2 -0
  20. data/tracks/julia/config.json +42 -0
  21. data/tracks/julia/exercises/bob/bob.jl +3 -0
  22. data/tracks/julia/exercises/bob/example.jl +30 -0
  23. data/tracks/julia/exercises/bob/runtests.jl +70 -0
  24. data/tracks/julia/exercises/difference-of-squares/difference-of-squares.jl +14 -0
  25. data/tracks/julia/exercises/difference-of-squares/example.jl +9 -0
  26. data/tracks/julia/exercises/difference-of-squares/runtests.jl +22 -0
  27. data/tracks/julia/exercises/hamming/example.jl +5 -0
  28. data/tracks/julia/exercises/hamming/hamming.jl +3 -0
  29. data/tracks/julia/exercises/hamming/runtests.jl +42 -0
  30. data/tracks/julia/exercises/hello-world/example.jl +3 -0
  31. data/tracks/julia/exercises/hello-world/hello-world.jl +3 -0
  32. data/tracks/julia/exercises/hello-world/runtests.jl +12 -0
  33. data/tracks/julia/exercises/word-count/example.jl +9 -0
  34. data/tracks/julia/exercises/word-count/runtests.jl +47 -0
  35. data/tracks/julia/exercises/word-count/word-count.jl +3 -0
  36. data/tracks/objective-c/config.json +10 -0
  37. data/tracks/objective-c/exercises/flatten-array/FlattenArrayExample.h +6 -0
  38. data/tracks/objective-c/exercises/flatten-array/FlattenArrayExample.m +48 -0
  39. data/tracks/objective-c/exercises/flatten-array/FlattenArrayTest.m +110 -0
  40. data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +33 -0
  41. data/tracks/ocaml/config.json +5 -0
  42. data/tracks/ocaml/exercises/pangram/.merlin +3 -0
  43. data/tracks/ocaml/exercises/pangram/Makefile +11 -0
  44. data/tracks/ocaml/exercises/pangram/example.ml +9 -0
  45. data/tracks/ocaml/exercises/pangram/pangram.mli +1 -0
  46. data/tracks/ocaml/exercises/pangram/test.ml +29 -0
  47. data/tracks/ocaml/tools/test-generator/templates/pangram/template.ml +15 -0
  48. data/tracks/pascal/config.json +8 -0
  49. data/tracks/pascal/docs/INSTALLATION.md +3 -3
  50. data/tracks/pascal/docs/img/07delphiclicklibrarypathbuttonLogo.png +0 -0
  51. data/tracks/pascal/exercises/grains/GrainsTests.dpr +60 -0
  52. data/tracks/pascal/exercises/grains/uGrainsExample.pas +33 -0
  53. data/tracks/pascal/exercises/grains/uGrainsTests.pas +149 -0
  54. data/tracks/perl6/SETUP.md +8 -2
  55. metadata +41 -2
@@ -1,38 +1,39 @@
1
- import java.util.ArrayList;
2
- import java.util.HashMap;
3
- import java.util.List;
4
- import java.util.Map;
5
- import java.util.Set;
6
- import java.util.TreeSet;
1
+ import java.util.*;
7
2
 
8
3
  public class School {
9
4
 
10
- private final Map<Integer, Set<String>> database = new HashMap<Integer, Set<String>>();
5
+ private final Map<Integer, List<String>> database = new HashMap<>();
11
6
 
12
- public Map<Integer, Set<String>> db() {
13
- // Leaks internal storage to caller
14
- return database;
7
+ public int numberOfStudents() {
8
+ int result = 0;
9
+ for (List<String> studentsInGrade: database.values()) {
10
+ result += studentsInGrade.size();
11
+ }
12
+ return result;
15
13
  }
16
14
 
17
15
  public void add(String student, int grade) {
18
- Set<String> students = grade(grade);
16
+ List<String> students = fetchGradeFromDatabase(grade);
19
17
  students.add(student);
20
18
  }
21
19
 
22
- public Set<String> grade(int grade) {
23
- // Leaks internal storage to caller
20
+ public List<String> grade(int grade) {
21
+ return new ArrayList<>(fetchGradeFromDatabase(grade));
22
+ }
23
+
24
+ private List<String> fetchGradeFromDatabase(int grade) {
24
25
  if (!database.containsKey(grade)) {
25
- database.put(grade, new TreeSet<String>());
26
+ database.put(grade, new LinkedList<>());
26
27
  }
27
28
  return database.get(grade);
28
29
  }
29
30
 
30
- public Map<Integer, List<String>> sort() {
31
- Map<Integer, List<String>> sortedStudents = new HashMap<Integer, List<String>>();
31
+ public Map<Integer, List<String>> studentsByGradeAlphabetical() {
32
+ Map<Integer, List<String>> sortedStudents = new HashMap<>();
32
33
  for (Integer grade : database.keySet()) {
33
- // Relies on using a TreeSet internally
34
- List<String> sortedGrade = new ArrayList<String>(database.get(grade));
35
- sortedStudents.put(grade, sortedGrade);
34
+ List<String> studentsInGrade = database.get(grade);
35
+ Collections.sort(studentsInGrade);
36
+ sortedStudents.put(grade, studentsInGrade);
36
37
  }
37
38
  return sortedStudents;
38
39
  }
@@ -1,28 +1,32 @@
1
1
  import org.junit.Ignore;
2
2
  import org.junit.Test;
3
3
 
4
+ import java.lang.Integer;
5
+ import java.util.*;
6
+ import java.util.ArrayList;
4
7
  import java.util.Arrays;
5
8
  import java.util.HashMap;
6
9
  import java.util.List;
7
10
  import java.util.Map;
8
11
 
9
12
  import static org.hamcrest.CoreMatchers.*;
10
- import static org.junit.Assert.*;
13
+ import static org.junit.Assert.assertThat;
14
+ import static org.junit.Assert.assertTrue;
15
+ import static org.junit.Assert.assertEquals;
11
16
 
12
17
  public class SchoolTest {
13
18
  private final School school = new School();
14
19
 
15
-
16
20
  @Test
17
21
  public void startsWithNoStudents() {
18
- assertTrue(school.db().isEmpty());
22
+ assertThat(school.numberOfStudents(), is(0));
19
23
  }
20
24
 
21
25
  @Ignore
22
26
  @Test
23
27
  public void addsStudents() {
24
28
  school.add("Aimee", 2);
25
- assertThat(school.db().get(2), hasItem("Aimee"));
29
+ assertThat(school.grade(2), hasItem("Aimee"));
26
30
  }
27
31
 
28
32
  @Ignore
@@ -33,8 +37,8 @@ public class SchoolTest {
33
37
  school.add("Blair", grade);
34
38
  school.add("Paul", grade);
35
39
 
36
- assertThat(school.db().get(grade).size(), is(3));
37
- assertThat(school.db().get(grade), allOf(hasItem("James"), hasItem("Blair"), hasItem("Paul")));
40
+ assertThat(school.grade(grade).size(), is(3));
41
+ assertThat(school.grade(grade), allOf(hasItem("James"), hasItem("Blair"), hasItem("Paul")));
38
42
  }
39
43
 
40
44
  @Ignore
@@ -43,27 +47,30 @@ public class SchoolTest {
43
47
  school.add("Chelsea", 3);
44
48
  school.add("Logan", 7);
45
49
 
46
- assertThat(school.db().size(), is(2));
47
- assertThat(school.db().get(3).size(), is(1));
48
- assertThat(school.db().get(3), hasItem("Chelsea"));
49
- assertThat(school.db().get(7).size(), is(1));
50
- assertThat(school.db().get(7), hasItem("Logan"));
50
+ assertThat(school.numberOfStudents(), is(2));
51
+ assertThat(school.grade(3).size(), is(1));
52
+ assertThat(school.grade(3), hasItem("Chelsea"));
53
+ assertThat(school.grade(7).size(), is(1));
54
+ assertThat(school.grade(7), hasItem("Logan"));
51
55
  }
52
56
 
53
57
  @Ignore
54
58
  @Test
55
- public void getsStudentsInAGrade() {
56
- school.add("Franklin", 5);
57
- school.add("Bradley", 5);
58
- school.add("Jeff", 1);
59
- assertThat(school.grade(5).size(), is(2));
60
- assertThat(school.grade(5), allOf(hasItem("Franklin"), hasItem("Bradley")));
59
+ public void getsStudentsInEmptyGrade() {
60
+ assertTrue(school.grade(1).isEmpty());
61
61
  }
62
62
 
63
63
  @Ignore
64
64
  @Test
65
- public void getsStudentsInEmptyGrade() {
66
- assertTrue(school.grade(1).isEmpty());
65
+ public void gradeReturnsStudentsInTheOrderTheyWereInserted() {
66
+ int grade = 4;
67
+ school.add("Bartimaeus", grade);
68
+ school.add("Nathaniel", grade);
69
+ school.add("Faquarl", grade);
70
+ List<String> studentsInGrade = school.grade(grade);
71
+ assertThat(studentsInGrade.get(0), is("Bartimaeus"));
72
+ assertThat(studentsInGrade.get(1), is("Nathaniel"));
73
+ assertThat(studentsInGrade.get(2), is("Faquarl"));
67
74
  }
68
75
 
69
76
  @Ignore
@@ -77,6 +84,32 @@ public class SchoolTest {
77
84
  sortedStudents.put(6, Arrays.asList("Kareem"));
78
85
  sortedStudents.put(4, Arrays.asList("Christopher", "Jennifer"));
79
86
  sortedStudents.put(3, Arrays.asList("Kyle"));
80
- assertEquals(school.sort(), sortedStudents);
87
+ assertEquals(school.studentsByGradeAlphabetical(), sortedStudents);
88
+ }
89
+
90
+ @Ignore
91
+ @Test
92
+ public void modifyingFetchedGradeShouldNotModifyInternalDatabase() {
93
+ String shouldNotBeAdded = "Should not be added to school";
94
+ int grade = 1;
95
+
96
+ List<String> students = school.grade(grade);
97
+ students.add(shouldNotBeAdded);
98
+
99
+ assertThat(school.grade(grade), not(hasItem(shouldNotBeAdded)));
100
+ }
101
+
102
+ @Ignore
103
+ @Test
104
+ public void modifyingSortedStudentsShouldNotModifyInternalDatabase() {
105
+ int grade = 2;
106
+ String studentWhichShouldNotBeAdded = "Should not be added";
107
+ List<String> listWhichShouldNotBeAdded = new ArrayList<>();
108
+ listWhichShouldNotBeAdded.add(studentWhichShouldNotBeAdded);
109
+
110
+ Map<Integer, List<String>> sortedStudents = school.studentsByGradeAlphabetical();
111
+ sortedStudents.put(grade,listWhichShouldNotBeAdded);
112
+
113
+ assertThat(school.studentsByGradeAlphabetical().get(grade), not(hasItem(studentWhichShouldNotBeAdded)));
81
114
  }
82
115
  }
@@ -0,0 +1,17 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+ test {
13
+ testLogging {
14
+ exceptionFormat = 'full'
15
+ events = ["passed", "failed", "skipped"]
16
+ }
17
+ }
@@ -0,0 +1,29 @@
1
+ import java.util.ArrayList;
2
+ import java.util.Collections;
3
+ import java.util.List;
4
+
5
+ final class HandshakeCalculator {
6
+
7
+ private static final int REVERSE_SIGNALS_BIT_POSITION = 4;
8
+
9
+ List<Signal> calculateHandshake(final int number) {
10
+ final List<Signal> result = new ArrayList<>();
11
+
12
+ for (final Signal signal : Signal.values()) {
13
+ if (isBitSet(signal.ordinal(), number)) {
14
+ result.add(signal);
15
+ }
16
+ }
17
+
18
+ if (isBitSet(REVERSE_SIGNALS_BIT_POSITION, number)) {
19
+ Collections.reverse(result);
20
+ }
21
+
22
+ return result;
23
+ }
24
+
25
+ private boolean isBitSet(final int position, final int number) {
26
+ return ((number >> position) & 1) == 1;
27
+ }
28
+
29
+ }
@@ -0,0 +1 @@
1
+ tracks/java/exercises/secret-handshake/src/example/java/../../main/java/Signal.java
@@ -0,0 +1,5 @@
1
+ final class HandshakeCalculator {
2
+
3
+
4
+
5
+ }
@@ -0,0 +1,5 @@
1
+ enum Signal {
2
+
3
+ WINK, DOUBLE_BLINK, CLOSE_YOUR_EYES, JUMP
4
+
5
+ }
@@ -0,0 +1,106 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static java.util.Arrays.asList;
5
+ import static java.util.Collections.emptyList;
6
+ import static java.util.Collections.singletonList;
7
+ import static org.junit.Assert.assertEquals;
8
+
9
+ public final class HandshakeCalculatorTest {
10
+
11
+ @Test
12
+ public void testThatInput1YieldsAWink() {
13
+ assertEquals(
14
+ singletonList(Signal.WINK),
15
+ new HandshakeCalculator().calculateHandshake(1));
16
+ }
17
+
18
+ @Ignore
19
+ @Test
20
+ public void testThatInput2YieldsADoubleBlink() {
21
+ assertEquals(
22
+ singletonList(Signal.DOUBLE_BLINK),
23
+ new HandshakeCalculator().calculateHandshake(2));
24
+ }
25
+
26
+ @Ignore
27
+ @Test
28
+ public void testThatInput4YieldsACloseYourEyes() {
29
+ assertEquals(
30
+ singletonList(Signal.CLOSE_YOUR_EYES),
31
+ new HandshakeCalculator().calculateHandshake(4));
32
+ }
33
+
34
+ @Ignore
35
+ @Test
36
+ public void testThatInput8YieldsAJump() {
37
+ assertEquals(
38
+ singletonList(Signal.JUMP),
39
+ new HandshakeCalculator().calculateHandshake(8));
40
+ }
41
+
42
+ @Ignore
43
+ @Test
44
+ public void testAnInputThatYieldsTwoActions() {
45
+ assertEquals(
46
+ asList(Signal.WINK, Signal.DOUBLE_BLINK),
47
+ new HandshakeCalculator().calculateHandshake(3));
48
+ }
49
+
50
+ @Ignore
51
+ @Test
52
+ public void testAnInputThatYieldsTwoReversedActions() {
53
+ assertEquals(
54
+ asList(Signal.DOUBLE_BLINK, Signal.WINK),
55
+ new HandshakeCalculator().calculateHandshake(19));
56
+ }
57
+
58
+ @Ignore
59
+ @Test
60
+ public void testReversingASingleActionYieldsTheSameAction() {
61
+ assertEquals(
62
+ singletonList(Signal.JUMP),
63
+ new HandshakeCalculator().calculateHandshake(24));
64
+ }
65
+
66
+ @Ignore
67
+ @Test
68
+ public void testReversingNoActionsYieldsNoActions() {
69
+ assertEquals(
70
+ emptyList(),
71
+ new HandshakeCalculator().calculateHandshake(16));
72
+ }
73
+
74
+ @Ignore
75
+ @Test
76
+ public void testInputThatYieldsAllActions() {
77
+ assertEquals(
78
+ asList(Signal.WINK, Signal.DOUBLE_BLINK, Signal.CLOSE_YOUR_EYES, Signal.JUMP),
79
+ new HandshakeCalculator().calculateHandshake(15));
80
+ }
81
+
82
+ @Ignore
83
+ @Test
84
+ public void testInputThatYieldsAllActionsReversed() {
85
+ assertEquals(
86
+ asList(Signal.JUMP, Signal.CLOSE_YOUR_EYES, Signal.DOUBLE_BLINK, Signal.WINK),
87
+ new HandshakeCalculator().calculateHandshake(31));
88
+ }
89
+
90
+ @Ignore
91
+ @Test
92
+ public void testThatInput0YieldsNoActions() {
93
+ assertEquals(
94
+ emptyList(),
95
+ new HandshakeCalculator().calculateHandshake(0));
96
+ }
97
+
98
+ @Ignore
99
+ @Test
100
+ public void testThatInputWithLower5BitsNotSetYieldsNoActions() {
101
+ assertEquals(
102
+ emptyList(),
103
+ new HandshakeCalculator().calculateHandshake(32));
104
+ }
105
+
106
+ }
@@ -12,6 +12,7 @@ include 'bob'
12
12
  include 'bracket-push'
13
13
  include 'crypto-square'
14
14
  include 'custom-set'
15
+ include 'diamond'
15
16
  include 'difference-of-squares'
16
17
  include 'etl'
17
18
  include 'gigasecond'
@@ -43,6 +44,7 @@ include 'robot-name'
43
44
  include 'robot-simulator'
44
45
  include 'roman-numerals'
45
46
  include 'scrabble-score'
47
+ include 'secret-handshake'
46
48
  include 'series'
47
49
  include 'sieve'
48
50
  include 'simple-cipher'
@@ -5,6 +5,39 @@
5
5
  "active": false,
6
6
  "test_pattern": "TODO",
7
7
  "exercises": [
8
+ {
9
+ "slug": "hello-world",
10
+ "difficulty": 1,
11
+ "topics": [
12
+ "strings",
13
+ "string interpolation"
14
+ ]
15
+ },
16
+ {
17
+ "slug": "hamming",
18
+ "difficulty": 1,
19
+ "topics": [
20
+ "generators",
21
+ "strings",
22
+ "exceptions"
23
+ ]
24
+ },
25
+ {
26
+ "slug": "difference-of-squares",
27
+ "difficulty": 1,
28
+ "topics": [
29
+ "generators"
30
+ ]
31
+ },
32
+ {
33
+ "slug": "word-count",
34
+ "difficulty": 1,
35
+ "topics": [
36
+ "control-flow (loops)",
37
+ "arrays",
38
+ "strings"
39
+ ]
40
+ },
8
41
  {
9
42
  "slug": "rna-transcription",
10
43
  "difficulty": 1,
@@ -34,6 +67,15 @@
34
67
  "sorting",
35
68
  "filtering"
36
69
  ]
70
+ },
71
+ {
72
+ "slug": "bob",
73
+ "difficulty": 2,
74
+ "topics": [
75
+ "strings",
76
+ "unicode",
77
+ "control-flow (if-else statements)"
78
+ ]
37
79
  }
38
80
  ],
39
81
  "deprecated": [
@@ -0,0 +1,3 @@
1
+ function bob(stimulus::AbstractString)
2
+
3
+ end
@@ -0,0 +1,30 @@
1
+ function bob(stimulus::AbstractString)
2
+ stimulus = strip(stimulus)
3
+
4
+ if issilence(stimulus)
5
+ return "Fine. Be that way!"
6
+ elseif isshouting(stimulus)
7
+ return "Whoa, chill out!"
8
+ elseif isquestion(stimulus)
9
+ return "Sure."
10
+ else
11
+ return "Whatever."
12
+ end
13
+ end
14
+
15
+ issilence(stimulus::AbstractString) = isempty(stimulus)
16
+ isquestion(stimulus::AbstractString) = endswith(stimulus, '?')
17
+
18
+ function isshouting(stimulus::AbstractString)
19
+ isupper(stimulus) && return true
20
+ !any(isalpha, stimulus) && return false
21
+
22
+ for c in stimulus
23
+ # ignore all non-letter chars
24
+ if isalpha(c) && !isupper(c)
25
+ return false
26
+ end
27
+ end
28
+
29
+ return true
30
+ end