trackler 2.2.1.71 → 2.2.1.72

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 (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