trackler 2.2.1.71 → 2.2.1.72

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/book-store/canonical-data.json +9 -2
  4. data/problem-specifications/exercises/word-count/canonical-data.json +9 -0
  5. data/tracks/bash/CONTRIBUTING.md +199 -0
  6. data/tracks/bash/config.json +24 -11
  7. data/tracks/bash/exercises/triangle/README.md +38 -0
  8. data/tracks/bash/exercises/triangle/example.sh +56 -0
  9. data/tracks/bash/exercises/triangle/triangle_test.sh +126 -0
  10. data/tracks/bash/img/canonical-data-example.png +0 -0
  11. data/tracks/bash/img/create-pr.png +0 -0
  12. data/tracks/bash/img/fork-repository.png +0 -0
  13. data/tracks/c/exercises/acronym/makefile +1 -1
  14. data/tracks/c/exercises/all-your-base/makefile +1 -1
  15. data/tracks/c/exercises/allergies/makefile +1 -1
  16. data/tracks/c/exercises/anagram/makefile +1 -1
  17. data/tracks/c/exercises/atbash-cipher/makefile +1 -1
  18. data/tracks/c/exercises/beer-song/makefile +1 -1
  19. data/tracks/c/exercises/binary-search/makefile +1 -1
  20. data/tracks/c/exercises/binary/makefile +1 -1
  21. data/tracks/c/exercises/bob/makefile +1 -1
  22. data/tracks/c/exercises/clock/makefile +1 -1
  23. data/tracks/c/exercises/collatz-conjecture/makefile +1 -1
  24. data/tracks/c/exercises/difference-of-squares/makefile +1 -1
  25. data/tracks/c/exercises/gigasecond/makefile +1 -1
  26. data/tracks/c/exercises/grains/makefile +1 -1
  27. data/tracks/c/exercises/hamming/makefile +1 -1
  28. data/tracks/c/exercises/hamming/test/test_hamming.c +2 -2
  29. data/tracks/c/exercises/hello-world/makefile +1 -1
  30. data/tracks/c/exercises/isogram/makefile +1 -1
  31. data/tracks/c/exercises/largest-series-product/makefile +1 -1
  32. data/tracks/c/exercises/leap/makefile +1 -1
  33. data/tracks/c/exercises/meetup/makefile +1 -1
  34. data/tracks/c/exercises/nth-prime/makefile +1 -1
  35. data/tracks/c/exercises/nucleotide-count/makefile +1 -1
  36. data/tracks/c/exercises/palindrome-products/makefile +1 -1
  37. data/tracks/c/exercises/pangram/makefile +1 -1
  38. data/tracks/c/exercises/pascals-triangle/makefile +1 -1
  39. data/tracks/c/exercises/perfect-numbers/makefile +1 -1
  40. data/tracks/c/exercises/phone-number/makefile +1 -1
  41. data/tracks/c/exercises/queen-attack/makefile +1 -1
  42. data/tracks/c/exercises/raindrops/makefile +1 -1
  43. data/tracks/c/exercises/react/makefile +1 -1
  44. data/tracks/c/exercises/rna-transcription/makefile +1 -1
  45. data/tracks/c/exercises/robot-simulator/makefile +1 -1
  46. data/tracks/c/exercises/roman-numerals/makefile +1 -1
  47. data/tracks/c/exercises/scrabble-score/makefile +1 -1
  48. data/tracks/c/exercises/series/makefile +1 -1
  49. data/tracks/c/exercises/sieve/makefile +1 -1
  50. data/tracks/c/exercises/space-age/makefile +1 -1
  51. data/tracks/c/exercises/sublist/makefile +1 -1
  52. data/tracks/c/exercises/sum-of-multiples/makefile +1 -1
  53. data/tracks/c/exercises/triangle/makefile +1 -1
  54. data/tracks/c/exercises/word-count/makefile +1 -1
  55. data/tracks/delphi/exercises/allergies/README.md +1 -1
  56. data/tracks/delphi/exercises/bank-account/README.md +1 -1
  57. data/tracks/delphi/exercises/beer-song/README.md +1 -1
  58. data/tracks/delphi/exercises/binary-search/README.md +1 -1
  59. data/tracks/delphi/exercises/bob/README.md +1 -1
  60. data/tracks/delphi/exercises/book-store/README.md +1 -1
  61. data/tracks/delphi/exercises/book-store/uBookStoreExample.pas +34 -14
  62. data/tracks/delphi/exercises/book-store/uBookStoreTests.pas +36 -1
  63. data/tracks/delphi/exercises/bowling/README.md +1 -1
  64. data/tracks/delphi/exercises/circular-buffer/README.md +1 -1
  65. data/tracks/delphi/exercises/clock/README.md +1 -1
  66. data/tracks/delphi/exercises/collatz-conjecture/README.md +1 -1
  67. data/tracks/delphi/exercises/etl/README.md +1 -1
  68. data/tracks/delphi/exercises/grains/README.md +1 -1
  69. data/tracks/delphi/exercises/hamming/README.md +1 -1
  70. data/tracks/delphi/exercises/hello-world/README.md +1 -1
  71. data/tracks/delphi/exercises/leap/README.md +1 -1
  72. data/tracks/delphi/exercises/minesweeper/README.md +1 -1
  73. data/tracks/delphi/exercises/nucleotide-count/README.md +1 -1
  74. data/tracks/delphi/exercises/perfect-numbers/README.md +1 -1
  75. data/tracks/delphi/exercises/phone-number/README.md +1 -1
  76. data/tracks/delphi/exercises/pig-latin/README.md +1 -1
  77. data/tracks/delphi/exercises/poker/README.md +1 -1
  78. data/tracks/delphi/exercises/raindrops/README.md +1 -1
  79. data/tracks/delphi/exercises/reverse-string/README.md +1 -1
  80. data/tracks/delphi/exercises/rna-transcription/README.md +1 -1
  81. data/tracks/delphi/exercises/roman-numerals/README.md +1 -1
  82. data/tracks/delphi/exercises/saddle-points/README.md +1 -1
  83. data/tracks/delphi/exercises/triangle/README.md +1 -1
  84. data/tracks/delphi/exercises/two-fer/README.md +1 -1
  85. data/tracks/delphi/exercises/wordy/README.md +1 -1
  86. data/tracks/ecmascript/.travis.yml +1 -1
  87. data/tracks/ecmascript/Makefile +4 -5
  88. data/tracks/ecmascript/README.md +2 -1
  89. data/tracks/ecmascript/config.json +12 -0
  90. data/tracks/ecmascript/exercises/change/package.json +5 -3
  91. data/tracks/ecmascript/exercises/protein-translation/package.json +2 -2
  92. data/tracks/ecmascript/exercises/react/README.md +41 -0
  93. data/tracks/ecmascript/exercises/react/example.js +101 -0
  94. data/tracks/ecmascript/exercises/react/package.json +71 -0
  95. data/tracks/ecmascript/exercises/react/react.spec.js +211 -0
  96. data/tracks/ecmascript/exercises/rectangles/package.json +1 -2
  97. data/tracks/ecmascript/exercises/rotational-cipher/package.json +1 -2
  98. data/tracks/ecmascript/exercises/spiral-matrix/package.json +1 -2
  99. data/tracks/ecmascript/exercises/transpose/package.json +2 -2
  100. data/tracks/erlang/docs/ABOUT.md +1 -1
  101. data/tracks/go/exercises/binary-search/.meta/gen.go +55 -0
  102. data/tracks/go/exercises/binary-search/binary_search_test.go +26 -167
  103. data/tracks/go/exercises/binary-search/cases_test.go +73 -0
  104. data/tracks/go/exercises/binary-search/example.go +8 -30
  105. data/tracks/go/exercises/nth-prime/.meta/gen.go +76 -0
  106. data/tracks/go/exercises/nth-prime/cases_test.go +43 -0
  107. data/tracks/go/exercises/nth-prime/nth_prime_test.go +4 -18
  108. data/tracks/go/exercises/prime-factors/.meta/gen.go +54 -0
  109. data/tracks/go/exercises/prime-factors/cases_test.go +48 -0
  110. data/tracks/go/exercises/prime-factors/prime_factors_test.go +4 -19
  111. data/tracks/groovy/config.json +13 -1
  112. data/tracks/groovy/exercises/linked-list/DoubleLinkedList.groovy +19 -0
  113. data/tracks/groovy/exercises/linked-list/DoubleLinkedListSpec.groovy +79 -0
  114. data/tracks/groovy/exercises/linked-list/Example.groovy +57 -0
  115. data/tracks/groovy/exercises/linked-list/README.md +49 -0
  116. data/tracks/java/bin/run-journey-test-from-ci.sh +1 -1
  117. data/tracks/java/config.json +10 -0
  118. data/tracks/java/config/maintainers.json +8 -1
  119. data/tracks/java/docs/MAINTAINING.md +3 -3
  120. data/tracks/java/exercises/accumulate/.meta/src/reference/java/Accumulate.java +2 -2
  121. data/tracks/java/exercises/binary/.meta/src/reference/java/Binary.java +3 -3
  122. data/tracks/java/exercises/circular-buffer/.meta/src/reference/java/BufferIOException.java +1 -1
  123. data/tracks/java/exercises/circular-buffer/.meta/src/reference/java/CircularBuffer.java +6 -6
  124. data/tracks/java/exercises/circular-buffer/src/main/java/BufferIOException.java +1 -1
  125. data/tracks/java/exercises/clock/.meta/src/reference/java/Clock.java +3 -3
  126. data/tracks/java/exercises/crypto-square/.meta/src/reference/java/Crypto.java +7 -7
  127. data/tracks/java/exercises/etl/.meta/src/reference/java/Etl.java +2 -2
  128. data/tracks/java/exercises/etl/src/main/java/Etl.java +2 -2
  129. data/tracks/java/exercises/kindergarten-garden/.meta/src/reference/java/KindergartenGarden.java +4 -4
  130. data/tracks/java/exercises/kindergarten-garden/.meta/src/reference/java/Plant.java +2 -2
  131. data/tracks/java/exercises/kindergarten-garden/src/main/java/Plant.java +2 -2
  132. data/tracks/java/exercises/nth-prime/.meta/src/reference/java/PrimeCalculator.java +2 -2
  133. data/tracks/java/exercises/reverse-string/.meta/src/reference/java/ReverseString.java +7 -0
  134. data/tracks/java/exercises/reverse-string/.meta/version +1 -0
  135. data/tracks/java/exercises/reverse-string/README.md +25 -0
  136. data/tracks/java/exercises/reverse-string/build.gradle +17 -0
  137. data/tracks/java/exercises/reverse-string/src/main/java/ReverseString.java +7 -0
  138. data/tracks/java/exercises/reverse-string/src/test/java/ReverseStringTest.java +37 -0
  139. data/tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java +4 -4
  140. data/tracks/java/exercises/settings.gradle +1 -0
  141. data/tracks/kotlin/docs/RESOURCES.md +1 -1
  142. data/tracks/kotlin/exercises/accumulate/build.gradle +1 -1
  143. data/tracks/kotlin/exercises/acronym/build.gradle +1 -1
  144. data/tracks/kotlin/exercises/all-your-base/build.gradle +1 -1
  145. data/tracks/kotlin/exercises/allergies/build.gradle +1 -1
  146. data/tracks/kotlin/exercises/anagram/build.gradle +1 -1
  147. data/tracks/kotlin/exercises/atbash-cipher/build.gradle +1 -1
  148. data/tracks/kotlin/exercises/bank-account/build.gradle +1 -1
  149. data/tracks/kotlin/exercises/beer-song/build.gradle +1 -1
  150. data/tracks/kotlin/exercises/binary-search/build.gradle +1 -1
  151. data/tracks/kotlin/exercises/binary/build.gradle +1 -1
  152. data/tracks/kotlin/exercises/bob/build.gradle +1 -1
  153. data/tracks/kotlin/exercises/bracket-push/build.gradle +1 -1
  154. data/tracks/kotlin/exercises/change/build.gradle +1 -1
  155. data/tracks/kotlin/exercises/clock/build.gradle +1 -1
  156. data/tracks/kotlin/exercises/collatz-conjecture/build.gradle +1 -1
  157. data/tracks/kotlin/exercises/complex-numbers/build.gradle +1 -1
  158. data/tracks/kotlin/exercises/diamond/build.gradle +1 -1
  159. data/tracks/kotlin/exercises/difference-of-squares/build.gradle +1 -1
  160. data/tracks/kotlin/exercises/etl/build.gradle +1 -1
  161. data/tracks/kotlin/exercises/flatten-array/build.gradle +1 -1
  162. data/tracks/kotlin/exercises/forth/build.gradle +1 -1
  163. data/tracks/kotlin/exercises/gigasecond/build.gradle +1 -1
  164. data/tracks/kotlin/exercises/grade-school/build.gradle +1 -1
  165. data/tracks/kotlin/exercises/grains/build.gradle +1 -1
  166. data/tracks/kotlin/exercises/hamming/build.gradle +1 -1
  167. data/tracks/kotlin/exercises/hello-world/build.gradle +1 -1
  168. data/tracks/kotlin/exercises/hexadecimal/build.gradle +1 -1
  169. data/tracks/kotlin/exercises/isogram/build.gradle +1 -1
  170. data/tracks/kotlin/exercises/largest-series-product/build.gradle +1 -1
  171. data/tracks/kotlin/exercises/leap/build.gradle +1 -1
  172. data/tracks/kotlin/exercises/linked-list/build.gradle +1 -1
  173. data/tracks/kotlin/exercises/list-ops/build.gradle +1 -1
  174. data/tracks/kotlin/exercises/luhn/build.gradle +1 -1
  175. data/tracks/kotlin/exercises/meetup/build.gradle +1 -1
  176. data/tracks/kotlin/exercises/minesweeper/build.gradle +1 -1
  177. data/tracks/kotlin/exercises/nth-prime/build.gradle +1 -1
  178. data/tracks/kotlin/exercises/nucleotide-count/build.gradle +1 -1
  179. data/tracks/kotlin/exercises/pangram/build.gradle +1 -1
  180. data/tracks/kotlin/exercises/pascals-triangle/build.gradle +1 -1
  181. data/tracks/kotlin/exercises/perfect-numbers/build.gradle +1 -1
  182. data/tracks/kotlin/exercises/phone-number/build.gradle +1 -1
  183. data/tracks/kotlin/exercises/pig-latin/build.gradle +1 -1
  184. data/tracks/kotlin/exercises/prime-factors/build.gradle +1 -1
  185. data/tracks/kotlin/exercises/raindrops/build.gradle +1 -1
  186. data/tracks/kotlin/exercises/react/build.gradle +1 -1
  187. data/tracks/kotlin/exercises/rna-transcription/build.gradle +1 -1
  188. data/tracks/kotlin/exercises/robot-name/build.gradle +1 -1
  189. data/tracks/kotlin/exercises/robot-simulator/build.gradle +1 -1
  190. data/tracks/kotlin/exercises/roman-numerals/build.gradle +1 -1
  191. data/tracks/kotlin/exercises/rotational-cipher/build.gradle +1 -1
  192. data/tracks/kotlin/exercises/saddle-points/build.gradle +1 -1
  193. data/tracks/kotlin/exercises/say/build.gradle +1 -1
  194. data/tracks/kotlin/exercises/scrabble-score/build.gradle +1 -1
  195. data/tracks/kotlin/exercises/secret-handshake/build.gradle +1 -1
  196. data/tracks/kotlin/exercises/series/build.gradle +1 -1
  197. data/tracks/kotlin/exercises/sieve/build.gradle +1 -1
  198. data/tracks/kotlin/exercises/simple-cipher/README.md +4 -6
  199. data/tracks/kotlin/exercises/simple-cipher/build.gradle +1 -1
  200. data/tracks/kotlin/exercises/space-age/build.gradle +1 -1
  201. data/tracks/kotlin/exercises/spiral-matrix/build.gradle +1 -1
  202. data/tracks/kotlin/exercises/strain/build.gradle +1 -1
  203. data/tracks/kotlin/exercises/sublist/build.gradle +1 -1
  204. data/tracks/kotlin/exercises/sum-of-multiples/build.gradle +1 -1
  205. data/tracks/kotlin/exercises/triangle/build.gradle +1 -1
  206. data/tracks/kotlin/exercises/two-fer/build.gradle +1 -1
  207. data/tracks/kotlin/exercises/word-count/build.gradle +1 -1
  208. data/tracks/lua/.gitignore +1 -0
  209. data/tracks/lua/config.json +12 -0
  210. data/tracks/lua/exercises/isbn-verifier/README.md +52 -0
  211. data/tracks/lua/exercises/isbn-verifier/example.lua +16 -0
  212. data/tracks/lua/exercises/isbn-verifier/isbn-verifier_spec.lua +55 -0
  213. data/tracks/ocaml/.travis-ci.sh +1 -1
  214. data/tracks/ocaml/.travis.yml +1 -1
  215. data/tracks/ocaml/README.md +1 -1
  216. data/tracks/perl6/config.json +10 -0
  217. data/tracks/perl6/exercises/acronym/Acronym.pm6 +4 -0
  218. data/tracks/perl6/exercises/acronym/Example.pm6 +5 -0
  219. data/tracks/perl6/exercises/acronym/README.md +33 -0
  220. data/tracks/perl6/exercises/acronym/acronym.t +96 -0
  221. data/tracks/perl6/exercises/acronym/example.yaml +19 -0
  222. data/tracks/perl6/exercises/word-count/Example.pm6 +1 -1
  223. data/tracks/perl6/exercises/word-count/WordCount.pm6 +1 -1
  224. data/tracks/perl6/exercises/word-count/example.yaml +2 -2
  225. data/tracks/perl6/exercises/word-count/word-count.t +11 -2
  226. data/tracks/pony/docs/RESOURCES.md +1 -1
  227. data/tracks/purescript/docs/INSTALLATION.md +1 -3
  228. data/tracks/python/config.json +1 -1
  229. data/tracks/r/exercises/word-count/test_word-count.R +5 -0
  230. data/tracks/ruby/README.md +73 -10
  231. data/tracks/rust/config.json +34 -0
  232. data/tracks/rust/exercises/book-store/Cargo.toml +1 -1
  233. data/tracks/rust/exercises/book-store/tests/book-store.rs +7 -0
  234. data/tracks/rust/exercises/diffie-hellman/.gitignore +9 -0
  235. data/tracks/rust/exercises/diffie-hellman/Cargo-example.toml +6 -0
  236. data/tracks/rust/exercises/diffie-hellman/Cargo.toml +5 -0
  237. data/tracks/rust/exercises/diffie-hellman/README.md +77 -0
  238. data/tracks/rust/exercises/diffie-hellman/example.rs +15 -0
  239. data/tracks/rust/exercises/diffie-hellman/src/lib.rs +11 -0
  240. data/tracks/rust/exercises/diffie-hellman/tests/diffie-hellman.rs +60 -0
  241. data/tracks/rust/exercises/macros/.gitignore +3 -0
  242. data/tracks/rust/exercises/macros/.meta/description.md +29 -0
  243. data/tracks/rust/exercises/macros/.meta/metadata.yml +3 -0
  244. data/tracks/rust/exercises/macros/Cargo.toml +6 -0
  245. data/tracks/rust/exercises/macros/README.md +70 -0
  246. data/tracks/rust/exercises/macros/example.rs +16 -0
  247. data/tracks/rust/exercises/macros/src/lib.rs +6 -0
  248. data/tracks/rust/exercises/macros/tests/macros.rs +62 -0
  249. data/tracks/rust/exercises/simple-linked-list/.gitignore +7 -0
  250. data/tracks/rust/exercises/simple-linked-list/.meta/hints.md +34 -0
  251. data/tracks/rust/exercises/simple-linked-list/Cargo.toml +5 -0
  252. data/tracks/rust/exercises/simple-linked-list/README.md +96 -0
  253. data/tracks/rust/exercises/simple-linked-list/example.rs +87 -0
  254. data/tracks/rust/exercises/simple-linked-list/src/lib.rs +46 -0
  255. data/tracks/rust/exercises/simple-linked-list/tests/simple-linked-list.rs +91 -0
  256. data/tracks/swift/.travis.yml +1 -1
  257. data/tracks/swift/config.json +24 -0
  258. data/tracks/swift/exercises/isbn-verifier/Package.swift +5 -0
  259. data/tracks/swift/exercises/isbn-verifier/README.md +39 -0
  260. data/tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifier.swift +1 -0
  261. data/tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift +35 -0
  262. data/tracks/swift/exercises/isbn-verifier/Tests/IsbnVerifierTests/IsbnVerifierTests.swift +75 -0
  263. data/tracks/swift/exercises/isbn-verifier/Tests/LinuxMain.swift +6 -0
  264. data/tracks/swift/exercises/two-fer/Package.swift +5 -0
  265. data/tracks/swift/exercises/two-fer/README.md +54 -0
  266. data/tracks/swift/exercises/two-fer/Sources/TwoFer.swift +1 -0
  267. data/tracks/swift/exercises/two-fer/Sources/TwoFerExample.swift +6 -0
  268. data/tracks/swift/exercises/two-fer/Tests/LinuxMain.swift +6 -0
  269. data/tracks/swift/exercises/two-fer/Tests/TwoFerTests/TwoFerTests.swift +25 -0
  270. metadata +71 -2
@@ -0,0 +1,91 @@
1
+ extern crate simple_linked_list;
2
+
3
+ use simple_linked_list::SimpleLinkedList;
4
+
5
+ #[test]
6
+ fn test_new_list_is_empty() {
7
+ let list: SimpleLinkedList<u32> = SimpleLinkedList::new();
8
+ assert_eq!(list.len(), 0, "list's length must be 0");
9
+ }
10
+
11
+ #[test]
12
+ #[ignore]
13
+ fn test_push_increments_length() {
14
+ let mut list: SimpleLinkedList<u32> = SimpleLinkedList::new();
15
+ list.push(1);
16
+ assert_eq!(list.len(), 1, "list's length must be 1");
17
+ list.push(2);
18
+ assert_eq!(list.len(), 2, "list's length must be 2");
19
+ }
20
+
21
+ #[test]
22
+ #[ignore]
23
+ fn test_pop_decrements_length() {
24
+ let mut list: SimpleLinkedList<u32> = SimpleLinkedList::new();
25
+ list.push(1);
26
+ list.push(2);
27
+ list.pop();
28
+ assert_eq!(list.len(), 1, "list's length must be 1");
29
+ list.pop();
30
+ assert_eq!(list.len(), 0, "list's length must be 0");
31
+ }
32
+
33
+ #[test]
34
+ #[ignore]
35
+ fn test_pop_returns_last_added_element() {
36
+ let mut list: SimpleLinkedList<u32> = SimpleLinkedList::new();
37
+ list.push(1);
38
+ list.push(2);
39
+ assert_eq!(list.pop(), Some(2), "Element must be 2");
40
+ assert_eq!(list.pop(), Some(1), "Element must be 1");
41
+ assert_eq!(list.pop(), None, "No element should be contained in list");
42
+ }
43
+
44
+ #[test]
45
+ #[ignore]
46
+ fn test_peek_returns_head_element() {
47
+ let mut list: SimpleLinkedList<u32> = SimpleLinkedList::new();
48
+ assert_eq!(list.peek(), None, "No element should be contained in list");
49
+ list.push(2);
50
+ assert_eq!(list.peek(), Some(&2), "Element must be 2");
51
+ assert_eq!(list.peek(), Some(&2), "Element must be still 2");
52
+ }
53
+
54
+ #[test]
55
+ #[ignore]
56
+ fn test_from_slice() {
57
+ let array = ["1", "2", "3", "4"];
58
+ let mut list = SimpleLinkedList::from(array.as_ref());
59
+ assert_eq!(list.pop(), Some("4"));
60
+ assert_eq!(list.pop(), Some("3"));
61
+ assert_eq!(list.pop(), Some("2"));
62
+ assert_eq!(list.pop(), Some("1"));
63
+ }
64
+
65
+ #[test]
66
+ #[ignore]
67
+ fn test_reverse() {
68
+ let mut list: SimpleLinkedList<u32> = SimpleLinkedList::new();
69
+ list.push(1);
70
+ list.push(2);
71
+ list.push(3);
72
+ let mut rev_list = list.rev();
73
+ assert_eq!(rev_list.pop(), Some(1));
74
+ assert_eq!(rev_list.pop(), Some(2));
75
+ assert_eq!(rev_list.pop(), Some(3));
76
+ assert_eq!(rev_list.pop(), None);
77
+ }
78
+
79
+
80
+ #[test]
81
+ #[ignore]
82
+ fn test_into_vector() {
83
+ let mut v = Vec::new();
84
+ let mut s = SimpleLinkedList::new();
85
+ for i in vec![1, 2, 3] {
86
+ v.push(i);
87
+ s.push(i);
88
+ }
89
+ let s_as_vec: Vec<i32> = s.into();
90
+ assert_eq!(v, s_as_vec);
91
+ }
@@ -18,7 +18,7 @@ matrix:
18
18
  - script:
19
19
  - bin/fetch-configlet
20
20
  - bin/configlet lint .
21
- - docker run -v `pwd`:/swift norionomura/swift:4020170908a bash -c "cd /swift && ./xswift-test-spm"
21
+ - docker run -v `pwd`:/swift swift:4.0.2 bash -c "cd /swift && ./xswift-test-spm"
22
22
  env: JOB=Linux40
23
23
  sudo: required
24
24
  services: docker
@@ -12,6 +12,17 @@
12
12
  "unlocked_by": null,
13
13
  "uuid": "63906530-1e13-491a-ab17-aee66d619fd8"
14
14
  },
15
+ {
16
+ "core": false,
17
+ "difficulty": 1,
18
+ "slug": "two-fer",
19
+ "topics": [
20
+ "optional_values",
21
+ "text_formatting"
22
+ ],
23
+ "unlocked_by": null,
24
+ "uuid": "ed859c29-fae0-4a32-9074-ac3c3cf324c2"
25
+ },
15
26
  {
16
27
  "core": false,
17
28
  "difficulty": 1,
@@ -358,6 +369,19 @@
358
369
  "unlocked_by": null,
359
370
  "uuid": "6d70fd81-76a4-4e44-a64a-9a070e07e83d"
360
371
  },
372
+ {
373
+ "core": false,
374
+ "difficulty": 3,
375
+ "slug": "isbn-verifier",
376
+ "topics": [
377
+ "conditionals",
378
+ "loops",
379
+ "pattern_matching",
380
+ "strings"
381
+ ],
382
+ "unlocked_by": null,
383
+ "uuid": "5854447a-ff9f-4321-bd5c-430555b91fc6"
384
+ },
361
385
  {
362
386
  "core": false,
363
387
  "difficulty": 4,
@@ -0,0 +1,5 @@
1
+ import PackageDescription
2
+
3
+ let package = Package(
4
+ name: "IsbnVerifier"
5
+ )
@@ -0,0 +1,39 @@
1
+ # ISBN Verifier
2
+
3
+ Check if a given ISBN-10 is valid.
4
+
5
+ ## Functionality
6
+
7
+ Given an unknown string the program should check if the provided string is a valid ISBN-10.
8
+ Putting this into place requires some thinking about preprocessing/parsing of the string prior to calculating the check digit for the ISBN.
9
+
10
+ The program should allow for ISBN-10 without the separating dashes to be verified as well.
11
+
12
+ ## ISBN
13
+
14
+ Let's take a random ISBN-10 number, say `3-598-21508-8` for this.
15
+ The first digit block indicates the group where the ISBN belongs. Groups can consist of shared languages, geographic regions or countries. The leading '3' signals this ISBN is from a german speaking country.
16
+ The following number block is to identify the publisher. Since this is a three digit publisher number there is a 5 digit title number for this book.
17
+ The last digit in the ISBN is the check digit which is used to detect read errors.
18
+
19
+ The first 9 digits in the ISBN have to be between 0 and 9.
20
+ The check digit can additionally be an 'X' to allow 10 to be a valid check digit as well.
21
+
22
+ A valid ISBN-10 is calculated with this formula `(x1 * 10 + x2 * 9 + x3 * 8 + x4 * 7 + x5 * 6 + x6 * 5 + x7 * 4 + x8 * 3 + x9 * 2 + x10 * 1) mod 11 == 0`
23
+ So for our example ISBN this means:
24
+ (3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 = 0
25
+
26
+ Which proves that the ISBN is valid.
27
+
28
+ ## Setup
29
+
30
+ Go through the project setup instructions for Xcode using Swift:
31
+
32
+ http://exercism.io/languages/swift
33
+
34
+ ## Source
35
+
36
+ Converting a string into a number and some basic processing utilizing a relatable real world example. [https://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation](https://en.wikipedia.org/wiki/International_Standard_Book_Number)
37
+
38
+ ## Submitting Incomplete Solutions
39
+ 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,35 @@
1
+ struct IsbnVerifier {
2
+
3
+ static func isValid(_ string: String) -> Bool {
4
+ // This will be considerably less awkward after Swift 3 support is dropped
5
+ let cleanedString = string.characters.split(separator: "-").map(String.init).joined()
6
+
7
+ guard cleanedString.characters.count == 10 else {
8
+ return false
9
+ }
10
+
11
+ var digits = [Int]()
12
+
13
+ for character in cleanedString.characters.dropLast() {
14
+ if let digit = Int(String(character)) {
15
+ digits.append(digit)
16
+ } else {
17
+ return false
18
+ }
19
+ }
20
+
21
+ if cleanedString.characters.last == "X" {
22
+ digits.append(10)
23
+ } else if let last = cleanedString.characters.last, let digit = Int(String(last)) {
24
+ digits.append(digit)
25
+ } else {
26
+ return false
27
+ }
28
+
29
+ let sum = digits.enumerated().reduce(0) {
30
+ return $0 + (10 - $1.offset) * $1.element
31
+ }
32
+
33
+ return sum % 11 == 0
34
+ }
35
+ }
@@ -0,0 +1,75 @@
1
+ import XCTest
2
+ @testable import IsbnVerifier
3
+
4
+ class IsbnVerifierTests: XCTestCase {
5
+
6
+ func testValidIsbnNumber() {
7
+ XCTAssertTrue(IsbnVerifier.isValid("3-598-21508-8"))
8
+ }
9
+
10
+ func testInvalidIsbnCheckDigit() {
11
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-21508-9"))
12
+ }
13
+
14
+ func testValidIsbnNumberWithACheckDigitOf10() {
15
+ XCTAssertTrue(IsbnVerifier.isValid("3-598-21507-X"))
16
+ }
17
+
18
+ func testCheckDigitIsACharacterOtherThanX() {
19
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-21507-A"))
20
+ }
21
+
22
+ func testInvalidCharacterInIsbn() {
23
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-2K507-0"))
24
+ }
25
+
26
+ func testXIsOnlyValidAsACheckDigit() {
27
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-2X507-9"))
28
+ }
29
+
30
+ func testValidIsbnWithoutSeparatingDashes() {
31
+ XCTAssertTrue(IsbnVerifier.isValid("3598215088"))
32
+ }
33
+
34
+ func testIsbnWithoutSeparatingDashesAndXAsCheckDigit() {
35
+ XCTAssertTrue(IsbnVerifier.isValid("359821507X"))
36
+ }
37
+
38
+ func testIsbnWithoutCheckDigitAndDashes() {
39
+ XCTAssertFalse(IsbnVerifier.isValid("359821507"))
40
+ }
41
+
42
+ func testTooLongIsbnAndNoDashes() {
43
+ XCTAssertFalse(IsbnVerifier.isValid("3598215078X"))
44
+ }
45
+
46
+ func testIsbnWithoutCheckDigit() {
47
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-21507"))
48
+ }
49
+
50
+ func testTooLongIsbn() {
51
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-21507-XX"))
52
+ }
53
+
54
+ func testCheckDigitOfXShouldNotBeUsedFor0() {
55
+ XCTAssertFalse(IsbnVerifier.isValid("3-598-21515-X"))
56
+ }
57
+
58
+ static var allTests: [(String, (IsbnVerifierTests) -> () throws -> Void)] {
59
+ return [
60
+ ("testValidIsbnNumber", testValidIsbnNumber),
61
+ ("testInvalidIsbnCheckDigit", testInvalidIsbnCheckDigit),
62
+ ("testValidIsbnNumberWithACheckDigitOf10", testValidIsbnNumberWithACheckDigitOf10),
63
+ ("testCheckDigitIsACharacterOtherThanX", testCheckDigitIsACharacterOtherThanX),
64
+ ("testInvalidCharacterInIsbn", testInvalidCharacterInIsbn),
65
+ ("testXIsOnlyValidAsACheckDigit", testXIsOnlyValidAsACheckDigit),
66
+ ("testValidIsbnWithoutSeparatingDashes", testValidIsbnWithoutSeparatingDashes),
67
+ ("testIsbnWithoutSeparatingDashesAndXAsCheckDigit", testIsbnWithoutSeparatingDashesAndXAsCheckDigit),
68
+ ("testIsbnWithoutCheckDigitAndDashes", testIsbnWithoutCheckDigitAndDashes),
69
+ ("testTooLongIsbnAndNoDashes", testTooLongIsbnAndNoDashes),
70
+ ("testIsbnWithoutCheckDigit", testIsbnWithoutCheckDigit),
71
+ ("testTooLongIsbn", testTooLongIsbn),
72
+ ("testCheckDigitOfXShouldNotBeUsedFor0", testCheckDigitOfXShouldNotBeUsedFor0)
73
+ ]
74
+ }
75
+ }
@@ -0,0 +1,6 @@
1
+ import XCTest
2
+ @testable import IsbnVerifierTests
3
+
4
+ XCTMain([
5
+ testCase(IsbnVerifierTests.allTests),
6
+ ])
@@ -0,0 +1,5 @@
1
+ import PackageDescription
2
+
3
+ let package = Package(
4
+ name: "TwoFer"
5
+ )
@@ -0,0 +1,54 @@
1
+ # Two Fer
2
+
3
+ `Two-fer` or `2-fer` is short for two for one. One for you and one for me.
4
+
5
+ ```text
6
+ "One for X, one for me."
7
+ ```
8
+
9
+ When X is a name or "you".
10
+
11
+ If the given name is "Alice", the result should be "One for Alice, one for me."
12
+ If no name is given, the result should be "One for you, one for me."
13
+
14
+ ## Test-Driven Development
15
+
16
+ As programmers mature, they eventually want to test their code.
17
+
18
+ Here at Exercism we simulate [Test-Driven
19
+ Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
20
+ you write your tests before writing any functionality. The simulation comes in
21
+ the form of a pre-written test suite, which will signal that you have solved
22
+ the problem.
23
+
24
+ It will also provide you with a safety net to explore other solutions without
25
+ breaking the functionality.
26
+
27
+ ### A typical TDD workflow on Exercism:
28
+
29
+ 1. Run the test file and pick one test that's failing.
30
+ 2. Write some code to fix the test you picked.
31
+ 3. Re-run the tests to confirm the test is now passing.
32
+ 4. Repeat from step 1.
33
+ 5. Submit your solution (`exercism submit /path/to/file`)
34
+
35
+ ## Instructions
36
+
37
+ Submissions are encouraged to be general, within reason. Having said that, it's
38
+ also important not to over-engineer a solution.
39
+
40
+ It's important to remember that the goal is to make code as expressive and
41
+ readable as we can.
42
+
43
+ ## Setup
44
+
45
+ Go through the project setup instructions for Xcode using Swift:
46
+
47
+ http://exercism.io/languages/swift
48
+
49
+ ## Source
50
+
51
+ This is an exercise to introduce users to basic programming constructs, just after hello World. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
52
+
53
+ ## Submitting Incomplete Solutions
54
+ 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,6 @@
1
+ struct TwoFer {
2
+
3
+ static func twoFer(name: String = "you") -> String {
4
+ return "One for \(name), one for me."
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ import XCTest
2
+ @testable import TwoFerTests
3
+
4
+ XCTMain([
5
+ testCase(TwoFerTests.allTests),
6
+ ])
@@ -0,0 +1,25 @@
1
+ import XCTest
2
+ @testable import TwoFer
3
+
4
+ class TwoFerTests: XCTestCase {
5
+
6
+ func testNoNameGiven() {
7
+ XCTAssertEqual(TwoFer.twoFer(), "One for you, one for me.")
8
+ }
9
+
10
+ func testANameGiven() {
11
+ XCTAssertEqual(TwoFer.twoFer(name: "Alice"), "One for Alice, one for me.")
12
+ }
13
+
14
+ func testAnotherNameGiven() {
15
+ XCTAssertEqual(TwoFer.twoFer(name: "Bob"), "One for Bob, one for me.")
16
+ }
17
+
18
+ static var allTests: [(String, (TwoFerTests) -> () throws -> Void)] {
19
+ return [
20
+ ("testNoNameGiven", testNoNameGiven),
21
+ ("testANameGiven", testANameGiven),
22
+ ("testAnotherNameGiven", testAnotherNameGiven),
23
+ ]
24
+ }
25
+ }
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.71
4
+ version: 2.2.1.72
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-11-23 00:00:00.000000000 Z
11
+ date: 2017-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -582,6 +582,7 @@ files:
582
582
  - tracks/bash/.git
583
583
  - tracks/bash/.gitignore
584
584
  - tracks/bash/.travis.yml
585
+ - tracks/bash/CONTRIBUTING.md
585
586
  - tracks/bash/LICENSE
586
587
  - tracks/bash/README.md
587
588
  - tracks/bash/bin/fetch-configlet
@@ -638,6 +639,9 @@ files:
638
639
  - tracks/bash/exercises/rna-transcription/README.md
639
640
  - tracks/bash/exercises/rna-transcription/example.sh
640
641
  - tracks/bash/exercises/rna-transcription/rna_transcription_test.sh
642
+ - tracks/bash/exercises/triangle/README.md
643
+ - tracks/bash/exercises/triangle/example.sh
644
+ - tracks/bash/exercises/triangle/triangle_test.sh
641
645
  - tracks/bash/exercises/two-fer/README.md
642
646
  - tracks/bash/exercises/two-fer/example.sh
643
647
  - tracks/bash/exercises/two-fer/two_fer_test.sh
@@ -645,6 +649,9 @@ files:
645
649
  - tracks/bash/exercises/word-count/example.awk
646
650
  - tracks/bash/exercises/word-count/example.sh
647
651
  - tracks/bash/exercises/word-count/word_count_test.sh
652
+ - tracks/bash/img/canonical-data-example.png
653
+ - tracks/bash/img/create-pr.png
654
+ - tracks/bash/img/fork-repository.png
648
655
  - tracks/bash/img/icon.png
649
656
  - tracks/c/.git
650
657
  - tracks/c/.github/stale.yml
@@ -3609,6 +3616,10 @@ files:
3609
3616
  - tracks/ecmascript/exercises/raindrops/example.js
3610
3617
  - tracks/ecmascript/exercises/raindrops/package.json
3611
3618
  - tracks/ecmascript/exercises/raindrops/raindrops.spec.js
3619
+ - tracks/ecmascript/exercises/react/README.md
3620
+ - tracks/ecmascript/exercises/react/example.js
3621
+ - tracks/ecmascript/exercises/react/package.json
3622
+ - tracks/ecmascript/exercises/react/react.spec.js
3612
3623
  - tracks/ecmascript/exercises/rectangles/README.md
3613
3624
  - tracks/ecmascript/exercises/rectangles/example.js
3614
3625
  - tracks/ecmascript/exercises/rectangles/package.json
@@ -5698,8 +5709,10 @@ files:
5698
5709
  - tracks/go/exercises/binary-search-tree/README.md
5699
5710
  - tracks/go/exercises/binary-search-tree/binary_search_tree_test.go
5700
5711
  - tracks/go/exercises/binary-search-tree/example.go
5712
+ - tracks/go/exercises/binary-search/.meta/gen.go
5701
5713
  - tracks/go/exercises/binary-search/README.md
5702
5714
  - tracks/go/exercises/binary-search/binary_search_test.go
5715
+ - tracks/go/exercises/binary-search/cases_test.go
5703
5716
  - tracks/go/exercises/binary-search/example.go
5704
5717
  - tracks/go/exercises/binary/README.md
5705
5718
  - tracks/go/exercises/binary/binary_test.go
@@ -5876,7 +5889,9 @@ files:
5876
5889
  - tracks/go/exercises/minesweeper/board.go
5877
5890
  - tracks/go/exercises/minesweeper/example.go
5878
5891
  - tracks/go/exercises/minesweeper/minesweeper_test.go
5892
+ - tracks/go/exercises/nth-prime/.meta/gen.go
5879
5893
  - tracks/go/exercises/nth-prime/README.md
5894
+ - tracks/go/exercises/nth-prime/cases_test.go
5880
5895
  - tracks/go/exercises/nth-prime/example.go
5881
5896
  - tracks/go/exercises/nth-prime/nth_prime_test.go
5882
5897
  - tracks/go/exercises/nucleotide-count/README.md
@@ -5933,7 +5948,9 @@ files:
5933
5948
  - tracks/go/exercises/pov/README.md
5934
5949
  - tracks/go/exercises/pov/example.go
5935
5950
  - tracks/go/exercises/pov/pov_test.go
5951
+ - tracks/go/exercises/prime-factors/.meta/gen.go
5936
5952
  - tracks/go/exercises/prime-factors/README.md
5953
+ - tracks/go/exercises/prime-factors/cases_test.go
5937
5954
  - tracks/go/exercises/prime-factors/example.go
5938
5955
  - tracks/go/exercises/prime-factors/prime_factors_test.go
5939
5956
  - tracks/go/exercises/protein-translation/README.md
@@ -6147,6 +6164,10 @@ files:
6147
6164
  - tracks/groovy/exercises/leap/Leap.groovy
6148
6165
  - tracks/groovy/exercises/leap/LeapSpec.groovy
6149
6166
  - tracks/groovy/exercises/leap/README.md
6167
+ - tracks/groovy/exercises/linked-list/DoubleLinkedList.groovy
6168
+ - tracks/groovy/exercises/linked-list/DoubleLinkedListSpec.groovy
6169
+ - tracks/groovy/exercises/linked-list/Example.groovy
6170
+ - tracks/groovy/exercises/linked-list/README.md
6150
6171
  - tracks/groovy/exercises/nth-prime/Example.groovy
6151
6172
  - tracks/groovy/exercises/nth-prime/NthPrime.groovy
6152
6173
  - tracks/groovy/exercises/nth-prime/NthPrimeSpec.groovy
@@ -7349,6 +7370,12 @@ files:
7349
7370
  - tracks/java/exercises/rectangles/build.gradle
7350
7371
  - tracks/java/exercises/rectangles/src/main/java/.keep
7351
7372
  - tracks/java/exercises/rectangles/src/test/java/RectangleCounterTest.java
7373
+ - tracks/java/exercises/reverse-string/.meta/src/reference/java/ReverseString.java
7374
+ - tracks/java/exercises/reverse-string/.meta/version
7375
+ - tracks/java/exercises/reverse-string/README.md
7376
+ - tracks/java/exercises/reverse-string/build.gradle
7377
+ - tracks/java/exercises/reverse-string/src/main/java/ReverseString.java
7378
+ - tracks/java/exercises/reverse-string/src/test/java/ReverseStringTest.java
7352
7379
  - tracks/java/exercises/rna-transcription/.meta/src/reference/java/RnaTranscription.java
7353
7380
  - tracks/java/exercises/rna-transcription/.meta/version
7354
7381
  - tracks/java/exercises/rna-transcription/README.md
@@ -8787,6 +8814,9 @@ files:
8787
8814
  - tracks/lua/exercises/house/README.md
8788
8815
  - tracks/lua/exercises/house/example.lua
8789
8816
  - tracks/lua/exercises/house/house_spec.lua
8817
+ - tracks/lua/exercises/isbn-verifier/README.md
8818
+ - tracks/lua/exercises/isbn-verifier/example.lua
8819
+ - tracks/lua/exercises/isbn-verifier/isbn-verifier_spec.lua
8790
8820
  - tracks/lua/exercises/isogram/README.md
8791
8821
  - tracks/lua/exercises/isogram/example.lua
8792
8822
  - tracks/lua/exercises/isogram/isogram_spec.lua
@@ -9860,6 +9890,11 @@ files:
9860
9890
  - tracks/perl6/exercises/accumulate/README.md
9861
9891
  - tracks/perl6/exercises/accumulate/accumulate.t
9862
9892
  - tracks/perl6/exercises/accumulate/example.yaml
9893
+ - tracks/perl6/exercises/acronym/Acronym.pm6
9894
+ - tracks/perl6/exercises/acronym/Example.pm6
9895
+ - tracks/perl6/exercises/acronym/README.md
9896
+ - tracks/perl6/exercises/acronym/acronym.t
9897
+ - tracks/perl6/exercises/acronym/example.yaml
9863
9898
  - tracks/perl6/exercises/all-your-base/AllYourBase.pm6
9864
9899
  - tracks/perl6/exercises/all-your-base/Example.pm6
9865
9900
  - tracks/perl6/exercises/all-your-base/README.md
@@ -11916,6 +11951,13 @@ files:
11916
11951
  - tracks/rust/exercises/difference-of-squares/example.rs
11917
11952
  - tracks/rust/exercises/difference-of-squares/src/lib.rs
11918
11953
  - tracks/rust/exercises/difference-of-squares/tests/difference-of-square.rs
11954
+ - tracks/rust/exercises/diffie-hellman/.gitignore
11955
+ - tracks/rust/exercises/diffie-hellman/Cargo-example.toml
11956
+ - tracks/rust/exercises/diffie-hellman/Cargo.toml
11957
+ - tracks/rust/exercises/diffie-hellman/README.md
11958
+ - tracks/rust/exercises/diffie-hellman/example.rs
11959
+ - tracks/rust/exercises/diffie-hellman/src/lib.rs
11960
+ - tracks/rust/exercises/diffie-hellman/tests/diffie-hellman.rs
11919
11961
  - tracks/rust/exercises/dominoes/.gitignore
11920
11962
  - tracks/rust/exercises/dominoes/Cargo.lock
11921
11963
  - tracks/rust/exercises/dominoes/Cargo.toml
@@ -12027,6 +12069,14 @@ files:
12027
12069
  - tracks/rust/exercises/luhn/example.rs
12028
12070
  - tracks/rust/exercises/luhn/src/lib.rs
12029
12071
  - tracks/rust/exercises/luhn/tests/luhn.rs
12072
+ - tracks/rust/exercises/macros/.gitignore
12073
+ - tracks/rust/exercises/macros/.meta/description.md
12074
+ - tracks/rust/exercises/macros/.meta/metadata.yml
12075
+ - tracks/rust/exercises/macros/Cargo.toml
12076
+ - tracks/rust/exercises/macros/README.md
12077
+ - tracks/rust/exercises/macros/example.rs
12078
+ - tracks/rust/exercises/macros/src/lib.rs
12079
+ - tracks/rust/exercises/macros/tests/macros.rs
12030
12080
  - tracks/rust/exercises/minesweeper/.gitignore
12031
12081
  - tracks/rust/exercises/minesweeper/Cargo.lock
12032
12082
  - tracks/rust/exercises/minesweeper/Cargo.toml
@@ -12240,6 +12290,13 @@ files:
12240
12290
  - tracks/rust/exercises/sieve/example.rs
12241
12291
  - tracks/rust/exercises/sieve/src/lib.rs
12242
12292
  - tracks/rust/exercises/sieve/tests/sieve.rs
12293
+ - tracks/rust/exercises/simple-linked-list/.gitignore
12294
+ - tracks/rust/exercises/simple-linked-list/.meta/hints.md
12295
+ - tracks/rust/exercises/simple-linked-list/Cargo.toml
12296
+ - tracks/rust/exercises/simple-linked-list/README.md
12297
+ - tracks/rust/exercises/simple-linked-list/example.rs
12298
+ - tracks/rust/exercises/simple-linked-list/src/lib.rs
12299
+ - tracks/rust/exercises/simple-linked-list/tests/simple-linked-list.rs
12243
12300
  - tracks/rust/exercises/space-age/.gitignore
12244
12301
  - tracks/rust/exercises/space-age/Cargo.lock
12245
12302
  - tracks/rust/exercises/space-age/Cargo.toml
@@ -13326,6 +13383,12 @@ files:
13326
13383
  - tracks/swift/exercises/house/Sources/HouseExample.swift
13327
13384
  - tracks/swift/exercises/house/Tests/HouseTests/HouseTests.swift
13328
13385
  - tracks/swift/exercises/house/Tests/LinuxMain.swift
13386
+ - tracks/swift/exercises/isbn-verifier/Package.swift
13387
+ - tracks/swift/exercises/isbn-verifier/README.md
13388
+ - tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifier.swift
13389
+ - tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
13390
+ - tracks/swift/exercises/isbn-verifier/Tests/IsbnVerifierTests/IsbnVerifierTests.swift
13391
+ - tracks/swift/exercises/isbn-verifier/Tests/LinuxMain.swift
13329
13392
  - tracks/swift/exercises/isogram/.gitignore
13330
13393
  - tracks/swift/exercises/isogram/Package.swift
13331
13394
  - tracks/swift/exercises/isogram/README.md
@@ -13653,6 +13716,12 @@ files:
13653
13716
  - tracks/swift/exercises/twelve-days/Sources/TwelveDaysExample.swift
13654
13717
  - tracks/swift/exercises/twelve-days/Tests/LinuxMain.swift
13655
13718
  - tracks/swift/exercises/twelve-days/Tests/TwelveDaysTests/TwelveDaysTests.swift
13719
+ - tracks/swift/exercises/two-fer/Package.swift
13720
+ - tracks/swift/exercises/two-fer/README.md
13721
+ - tracks/swift/exercises/two-fer/Sources/TwoFer.swift
13722
+ - tracks/swift/exercises/two-fer/Sources/TwoFerExample.swift
13723
+ - tracks/swift/exercises/two-fer/Tests/LinuxMain.swift
13724
+ - tracks/swift/exercises/two-fer/Tests/TwoFerTests/TwoFerTests.swift
13656
13725
  - tracks/swift/exercises/word-count/.gitignore
13657
13726
  - tracks/swift/exercises/word-count/Package.swift
13658
13727
  - tracks/swift/exercises/word-count/README.md