trackler 2.2.1.76 → 2.2.1.77

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/beer-song/canonical-data.json +33 -17
  4. data/problem-specifications/exercises/binary-search/canonical-data.json +41 -21
  5. data/problem-specifications/exercises/book-store/canonical-data.json +58 -30
  6. data/problem-specifications/exercises/two-fer/metadata.yml +1 -1
  7. data/tracks/bash/config.json +35 -13
  8. data/tracks/bash/exercises/acronym/README.md +27 -0
  9. data/tracks/bash/exercises/acronym/acronym.sh +18 -0
  10. data/tracks/bash/exercises/acronym/acronym_tests.sh +43 -0
  11. data/tracks/bash/exercises/acronym/example.sh +18 -0
  12. data/tracks/bash/exercises/armstrong-numbers/README.md +20 -0
  13. data/tracks/bash/exercises/armstrong-numbers/armstrong_numbers_test.sh +58 -0
  14. data/tracks/bash/exercises/armstrong-numbers/example.sh +19 -0
  15. data/tracks/clojure/config.json +8 -0
  16. data/tracks/clojure/exercises/two-fer/README.md +19 -0
  17. data/tracks/clojure/exercises/two-fer/project.clj +4 -0
  18. data/tracks/clojure/exercises/two-fer/src/example.clj +5 -0
  19. data/tracks/clojure/exercises/two-fer/src/two_fer.clj +5 -0
  20. data/tracks/clojure/exercises/two-fer/test/two_fer_test.clj +12 -0
  21. data/tracks/common-lisp/docs/INSTALLATION.md +26 -0
  22. data/tracks/go/exercises/kindergarten-garden/kindergarten_garden_test.go +1 -1
  23. data/tracks/go/exercises/reverse-string/reverse_string_test.go +8 -0
  24. data/tracks/java/config.json +34 -11
  25. data/tracks/java/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java +20 -0
  26. data/tracks/java/exercises/armstrong-numbers/.meta/version +1 -0
  27. data/tracks/java/exercises/armstrong-numbers/README.md +30 -0
  28. data/tracks/java/exercises/armstrong-numbers/build.gradle +18 -0
  29. data/tracks/java/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java +9 -0
  30. data/tracks/java/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java +80 -0
  31. data/tracks/java/exercises/proverb/.meta/src/reference/java/Proverb.java +19 -0
  32. data/tracks/java/exercises/proverb/README.md +29 -0
  33. data/tracks/java/exercises/proverb/build.gradle +18 -0
  34. data/tracks/java/exercises/proverb/src/main/java/Proverb.java +11 -0
  35. data/tracks/java/exercises/proverb/src/test/java/ProverbTest.java +80 -0
  36. data/tracks/java/exercises/settings.gradle +2 -0
  37. data/tracks/perl6/config.json +1 -1
  38. data/tracks/python/exercises/alphametics/example.py +168 -90
  39. data/tracks/swift/config.json +16 -0
  40. data/tracks/swift/exercises/list-ops/Package.swift +5 -0
  41. data/tracks/swift/exercises/list-ops/README.md +16 -0
  42. data/tracks/swift/exercises/list-ops/Sources/ListOps.swift +1 -0
  43. data/tracks/swift/exercises/list-ops/Sources/ListOpsExample.swift +81 -0
  44. data/tracks/swift/exercises/list-ops/Tests/LinuxMain.swift +6 -0
  45. data/tracks/swift/exercises/list-ops/Tests/ListOpsTests/ListOpsTests.swift +110 -0
  46. metadata +31 -2
@@ -184,6 +184,22 @@
184
184
  "unlocked_by": null,
185
185
  "uuid": "066d2666-deeb-4d99-8314-36d72fbf9afd"
186
186
  },
187
+ {
188
+ "uuid": "cf91efe6-0c6f-4c6f-b3da-e828dff03ad9",
189
+ "slug": "list-ops",
190
+ "core": false,
191
+ "unlocked_by": null,
192
+ "difficulty": 2,
193
+ "topics": [
194
+ "variables",
195
+ "lists",
196
+ "loops",
197
+ "filtering",
198
+ "searching",
199
+ "conditionals",
200
+ "functional_programming"
201
+ ]
202
+ },
187
203
  {
188
204
  "core": false,
189
205
  "difficulty": 3,
@@ -0,0 +1,5 @@
1
+ import PackageDescription
2
+
3
+ let package = Package(
4
+ name: "ListOps"
5
+ )
@@ -0,0 +1,16 @@
1
+ # List Ops
2
+
3
+ Implement basic list operations.
4
+
5
+ In functional languages list operations like `length`, `map`, and
6
+ `reduce` are very common. Implement a series of basic list operations,
7
+ without using existing functions.
8
+
9
+ ## Setup
10
+
11
+ Go through the project setup instructions for Xcode using Swift:
12
+
13
+ http://exercism.io/languages/swift
14
+
15
+ ## Submitting Incomplete Solutions
16
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1 @@
1
+ //Solution goes in Sources
@@ -0,0 +1,81 @@
1
+ struct ListOps {
2
+
3
+ static func append<T: Equatable>(_ array1: [T], _ array2: [T]) -> [T] {
4
+ var result = array1
5
+ for value in array2 {
6
+ result.append(value)
7
+ }
8
+
9
+ return result
10
+ }
11
+
12
+ static func concat<T: Equatable>(_ arrays: [T]...) -> [T] {
13
+ var result = [T]()
14
+
15
+ for array in arrays {
16
+ result = append(result, array)
17
+ }
18
+
19
+ return result
20
+ }
21
+
22
+ static func filter<T: Equatable>(_ array: [T], predicate: (T) -> Bool) -> [T] {
23
+ var filtered = [T]()
24
+ for value in array {
25
+ if predicate(value) {
26
+ filtered.append(value)
27
+ }
28
+ }
29
+
30
+ return filtered
31
+ }
32
+
33
+ static func length<T>(_ array: [T]) -> Int {
34
+ var length = 0
35
+
36
+ for _ in array {
37
+ length += 1
38
+ }
39
+
40
+ return length
41
+ }
42
+
43
+ static func map<T: Equatable>(_ array: [T], transform: (T) -> T) -> [T] {
44
+ var result = [T]()
45
+
46
+ for value in array {
47
+ result.append(transform(value))
48
+ }
49
+
50
+ return result
51
+ }
52
+
53
+ static func foldLeft<T: Equatable>(_ array: [T], accumulated: T, combine: (T, T) -> T) -> T {
54
+ if length(array) == 0 {
55
+ return accumulated
56
+ } else {
57
+ return foldLeft(Array(array.dropFirst()), accumulated: combine(accumulated, array[0]), combine: combine)
58
+ }
59
+ }
60
+
61
+ static func foldRight<T: Equatable>(_ array: [T], accumulated: T, combine: (T, T) -> T) -> T {
62
+ if length(array) == 0 {
63
+ return accumulated
64
+ } else {
65
+ return combine(array[0], foldRight(Array(array.dropFirst()), accumulated: accumulated, combine: combine))
66
+ }
67
+ }
68
+
69
+ static func reverse<T: Equatable>(_ array: [T]) -> [T] {
70
+ var result = [T]()
71
+ var index = length(array) - 1
72
+
73
+ while index >= 0 {
74
+ result.append(array[index])
75
+ index -= 1
76
+ }
77
+
78
+ return result
79
+ }
80
+
81
+ }
@@ -0,0 +1,6 @@
1
+ import XCTest
2
+ @testable import ListOpsTests
3
+
4
+ XCTMain([
5
+ testCase(ListOpsTests.allTests),
6
+ ])
@@ -0,0 +1,110 @@
1
+ import XCTest
2
+ @testable import ListOps
3
+
4
+ class ListOpsTests: XCTestCase {
5
+
6
+ func testAppendEmptyLists() {
7
+ XCTAssertEqual(ListOps.append([Int](), []), [])
8
+ }
9
+
10
+ func testAppendEmptyListToList() {
11
+ XCTAssertEqual(ListOps.append([], [1, 2, 3, 4]), [1, 2, 3, 4])
12
+ }
13
+
14
+ func testAppendNonemptyLists() {
15
+ XCTAssertEqual(ListOps.append([1, 2], [2, 3, 4, 5]), [1, 2, 2, 3, 4, 5])
16
+ }
17
+
18
+ func testConcatEmptyList() {
19
+ XCTAssertEqual(ListOps.concat([Int]()), [])
20
+ }
21
+
22
+ func testConcatListOfLists() {
23
+ XCTAssertEqual(ListOps.concat([1, 2], [3], [], [4, 5, 6]), [1, 2, 3, 4, 5, 6])
24
+ }
25
+
26
+ func testFilterEmptyList() {
27
+ XCTAssertEqual(ListOps.filter([]) { $0 % 2 == 1 }, [])
28
+ }
29
+
30
+ func testFilterNonemptyList() {
31
+ XCTAssertEqual(ListOps.filter([1, 2, 3, 4, 5]) { $0 % 2 == 1 }, [1, 3, 5])
32
+ }
33
+
34
+ func testLengthEmptyList() {
35
+ XCTAssertEqual(ListOps.length([]), 0)
36
+ }
37
+
38
+ func testLengthNonemptyList() {
39
+ XCTAssertEqual(ListOps.length([1, 2, 3, 4]), 4)
40
+ }
41
+
42
+ func testMapEmptyList() {
43
+ XCTAssertEqual(ListOps.map([]) { $0 + 1 }, [])
44
+ }
45
+
46
+ func testMapNonemptyList() {
47
+ XCTAssertEqual(ListOps.map([1, 3, 5, 7]) { $0 + 1 }, [2, 4, 6, 8])
48
+ }
49
+
50
+ func testFoldLeftEmptyList() {
51
+ XCTAssertEqual(ListOps.foldLeft([], accumulated: 2, combine: +), 2)
52
+ }
53
+
54
+ func testFoldLeftNonemptyListAddition() {
55
+ XCTAssertEqual(ListOps.foldLeft([1, 2, 3, 4], accumulated: 5, combine: +), 15)
56
+ }
57
+
58
+ func testFoldLeftNonemptyListDivision() {
59
+ XCTAssertEqual(ListOps.foldLeft([2, 5], accumulated: 5, combine: /), 0)
60
+ }
61
+
62
+ func testFoldRightEmptyList() {
63
+ XCTAssertEqual(ListOps.foldRight([], accumulated: 2, combine: *), 2)
64
+ }
65
+
66
+ func testFoldRightNonemptyListAddition() {
67
+ XCTAssertEqual(ListOps.foldRight([1, 2, 3, 4], accumulated: 5, combine: +), 15)
68
+ }
69
+
70
+ func testFoldRightNonemptyListDivision() {
71
+ XCTAssertEqual(ListOps.foldRight([2, 5], accumulated: 5, combine: /), 2)
72
+ }
73
+
74
+ func testFoldRightAddString() {
75
+ XCTAssertEqual(ListOps.foldRight(["e", "x", "e", "r", "c", "i", "s", "m"], accumulated: "!", combine: +), "exercism!")
76
+ }
77
+
78
+ func testReverseEmptyList() {
79
+ XCTAssertEqual(ListOps.reverse([Int]()), [])
80
+ }
81
+
82
+ func testReverseNonemptyList() {
83
+ XCTAssertEqual(ListOps.reverse([1, 3, 5, 7]), [7, 5, 3, 1])
84
+ }
85
+
86
+ static var allTests: [(String, (ListOpsTests) -> () throws -> Void)] {
87
+ return [
88
+ ("testAppendEmptyLists", testAppendEmptyLists),
89
+ ("testAppendEmptyListToList", testAppendEmptyListToList),
90
+ ("testAppendNonemptyLists", testAppendNonemptyLists),
91
+ ("testConcatEmptyList", testConcatEmptyList),
92
+ ("testConcatListOfLists", testConcatListOfLists),
93
+ ("testFilterEmptyList", testFilterEmptyList),
94
+ ("testFilterNonemptyList", testFilterNonemptyList),
95
+ ("testLengthEmptyList", testLengthEmptyList),
96
+ ("testLengthNonemptyList", testLengthNonemptyList),
97
+ ("testMapEmptyList", testMapEmptyList),
98
+ ("testMapNonemptyList", testMapNonemptyList),
99
+ ("testFoldLeftEmptyList", testFoldLeftEmptyList),
100
+ ("testFoldLeftNonemptyListAddition", testFoldLeftNonemptyListAddition),
101
+ ("testFoldLeftNonemptyListDivision", testFoldLeftNonemptyListDivision),
102
+ ("testFoldRightEmptyList", testFoldRightEmptyList),
103
+ ("testFoldRightNonemptyListAddition", testFoldRightNonemptyListAddition),
104
+ ("testFoldRightNonemptyListDivision", testFoldRightNonemptyListDivision),
105
+ ("testFoldRightAddString", testFoldRightAddString),
106
+ ("testReverseEmptyList", testReverseEmptyList),
107
+ ("testReverseNonemptyList", testReverseNonemptyList),
108
+ ]
109
+ }
110
+ }
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.2.1.76
4
+ version: 2.2.1.77
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-12-19 00:00:00.000000000 Z
11
+ date: 2017-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -600,9 +600,16 @@ files:
600
600
  - tracks/bash/docs/RESOURCES.md
601
601
  - tracks/bash/docs/SNIPPET.txt
602
602
  - tracks/bash/docs/TESTS.md
603
+ - tracks/bash/exercises/acronym/README.md
604
+ - tracks/bash/exercises/acronym/acronym.sh
605
+ - tracks/bash/exercises/acronym/acronym_tests.sh
606
+ - tracks/bash/exercises/acronym/example.sh
603
607
  - tracks/bash/exercises/anagram/README.md
604
608
  - tracks/bash/exercises/anagram/anagram_tests.sh
605
609
  - tracks/bash/exercises/anagram/example.sh
610
+ - tracks/bash/exercises/armstrong-numbers/README.md
611
+ - tracks/bash/exercises/armstrong-numbers/armstrong_numbers_test.sh
612
+ - tracks/bash/exercises/armstrong-numbers/example.sh
606
613
  - tracks/bash/exercises/atbash-cipher/README.md
607
614
  - tracks/bash/exercises/atbash-cipher/atbash_cipher_tests.sh
608
615
  - tracks/bash/exercises/atbash-cipher/example.sh
@@ -1664,6 +1671,11 @@ files:
1664
1671
  - tracks/clojure/exercises/trinary/project.clj
1665
1672
  - tracks/clojure/exercises/trinary/src/example.clj
1666
1673
  - tracks/clojure/exercises/trinary/test/trinary_test.clj
1674
+ - tracks/clojure/exercises/two-fer/README.md
1675
+ - tracks/clojure/exercises/two-fer/project.clj
1676
+ - tracks/clojure/exercises/two-fer/src/example.clj
1677
+ - tracks/clojure/exercises/two-fer/src/two_fer.clj
1678
+ - tracks/clojure/exercises/two-fer/test/two_fer_test.clj
1667
1679
  - tracks/clojure/exercises/word-count/README.md
1668
1680
  - tracks/clojure/exercises/word-count/project.clj
1669
1681
  - tracks/clojure/exercises/word-count/src/example.clj
@@ -7109,6 +7121,12 @@ files:
7109
7121
  - tracks/java/exercises/anagram/build.gradle
7110
7122
  - tracks/java/exercises/anagram/src/main/java/.keep
7111
7123
  - tracks/java/exercises/anagram/src/test/java/AnagramTest.java
7124
+ - tracks/java/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java
7125
+ - tracks/java/exercises/armstrong-numbers/.meta/version
7126
+ - tracks/java/exercises/armstrong-numbers/README.md
7127
+ - tracks/java/exercises/armstrong-numbers/build.gradle
7128
+ - tracks/java/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java
7129
+ - tracks/java/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java
7112
7130
  - tracks/java/exercises/atbash-cipher/.meta/src/reference/java/Atbash.java
7113
7131
  - tracks/java/exercises/atbash-cipher/README.md
7114
7132
  - tracks/java/exercises/atbash-cipher/build.gradle
@@ -7427,6 +7445,11 @@ files:
7427
7445
  - tracks/java/exercises/protein-translation/build.gradle
7428
7446
  - tracks/java/exercises/protein-translation/src/main/java/ProteinTranslator.java
7429
7447
  - tracks/java/exercises/protein-translation/src/test/java/ProteinTranslatorTest.java
7448
+ - tracks/java/exercises/proverb/.meta/src/reference/java/Proverb.java
7449
+ - tracks/java/exercises/proverb/README.md
7450
+ - tracks/java/exercises/proverb/build.gradle
7451
+ - tracks/java/exercises/proverb/src/main/java/Proverb.java
7452
+ - tracks/java/exercises/proverb/src/test/java/ProverbTest.java
7430
7453
  - tracks/java/exercises/pythagorean-triplet/.meta/src/reference/java/PythagoreanTriplet.java
7431
7454
  - tracks/java/exercises/pythagorean-triplet/README.md
7432
7455
  - tracks/java/exercises/pythagorean-triplet/build.gradle
@@ -13538,6 +13561,12 @@ files:
13538
13561
  - tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
13539
13562
  - tracks/swift/exercises/linked-list/Tests/LinkedListTests/LinkedListTests.swift
13540
13563
  - tracks/swift/exercises/linked-list/Tests/LinuxMain.swift
13564
+ - tracks/swift/exercises/list-ops/Package.swift
13565
+ - tracks/swift/exercises/list-ops/README.md
13566
+ - tracks/swift/exercises/list-ops/Sources/ListOps.swift
13567
+ - tracks/swift/exercises/list-ops/Sources/ListOpsExample.swift
13568
+ - tracks/swift/exercises/list-ops/Tests/LinuxMain.swift
13569
+ - tracks/swift/exercises/list-ops/Tests/ListOpsTests/ListOpsTests.swift
13541
13570
  - tracks/swift/exercises/luhn/.gitignore
13542
13571
  - tracks/swift/exercises/luhn/Package.swift
13543
13572
  - tracks/swift/exercises/luhn/README.md