trackler 2.2.1.47 → 2.2.1.48
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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/pangram/canonical-data.json +3 -3
- data/tracks/common-lisp/.travis.yml +2 -9
- data/tracks/common-lisp/docs/TESTS.md +43 -9
- data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +2 -2
- data/tracks/elixir/.travis.yml +4 -7
- data/tracks/elixir/README.md +2 -6
- data/tracks/elixir/bin/dialyzer_check.sh +2 -13
- data/tracks/elixir/exercises/allergies/example.exs +3 -2
- data/tracks/elixir/exercises/atbash-cipher/example.exs +5 -5
- data/tracks/elixir/exercises/bank-account/example.exs +11 -11
- data/tracks/elixir/exercises/bob/example.exs +4 -4
- data/tracks/elixir/exercises/forth/example.exs +66 -48
- data/tracks/elixir/exercises/minesweeper/example.exs +31 -18
- data/tracks/elixir/exercises/pangram/example.exs +4 -4
- data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +68 -53
- data/tracks/elixir/exercises/say/example.exs +33 -31
- data/tracks/elixir/exercises/scrabble-score/example.exs +12 -11
- data/tracks/elixir/mix.exs +10 -7
- data/tracks/elixir/mix.lock +4 -1
- data/tracks/erlang/README.md +2 -0
- data/tracks/fsharp/exercises/nth-prime/Example.fs +4 -1
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +1 -1
- data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +12 -32
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +3 -3
- data/tracks/fsharp/exercises/perfect-numbers/Example.fs +9 -6
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +1 -1
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +55 -21
- data/tracks/fsharp/generators/Generators.fs +18 -0
- data/tracks/gnu-apl/config.json +21 -0
- data/tracks/gnu-apl/exercises/hamming/README.md +42 -0
- data/tracks/gnu-apl/exercises/hamming/hamming-example.apl +5 -0
- data/tracks/gnu-apl/exercises/hamming/hamming.tc +75 -0
- data/tracks/gnu-apl/exercises/hello-world/README.md +17 -1
- data/tracks/gnu-apl/exercises/leap/README.md +33 -0
- data/tracks/gnu-apl/exercises/raindrops/README.md +24 -0
- data/tracks/gnu-apl/exercises/raindrops/raindrops-example.apl +8 -0
- data/tracks/gnu-apl/exercises/raindrops/raindrops.tc +60 -0
- data/tracks/gnu-apl/exercises/rna-transcription/README.md +25 -0
- data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription-example.apl +7 -0
- data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription.tc +41 -0
- data/tracks/gnu-apl/test.apl +13 -0
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/exercises/rotational-cipher/README.md +91 -0
- data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/src/RotationalCipher.hs +9 -0
- data/tracks/haskell/exercises/rotational-cipher/package.yaml +20 -0
- data/tracks/haskell/exercises/rotational-cipher/src/RotationalCipher.hs +4 -0
- data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -0
- data/tracks/haskell/exercises/rotational-cipher/test/Tests.hs +77 -0
- data/tracks/java/config.json +23 -14
- data/tracks/java/config/exercise-readme-insert.md +3 -3
- data/tracks/java/config/exercise_readme.go.tmpl +3 -0
- data/tracks/java/exercises/accumulate/README.md +4 -3
- data/tracks/java/exercises/acronym/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/acronym/README.md +4 -3
- data/tracks/java/exercises/all-your-base/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/all-your-base/README.md +4 -3
- data/tracks/java/exercises/allergies/README.md +4 -3
- data/tracks/java/exercises/anagram/README.md +4 -3
- data/tracks/java/exercises/atbash-cipher/README.md +4 -3
- data/tracks/java/exercises/bank-account/README.md +6 -3
- data/tracks/java/exercises/beer-song/README.md +4 -3
- data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java +38 -44
- data/tracks/java/exercises/binary-search-tree/README.md +4 -3
- data/tracks/java/exercises/binary-search-tree/src/main/java/BinarySearchTree.java +35 -0
- data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +46 -40
- data/tracks/java/exercises/binary-search/.meta/hints.md +25 -0
- data/tracks/java/exercises/binary-search/.meta/src/reference/java/BinarySearch.java +3 -7
- data/tracks/java/exercises/binary-search/README.md +33 -3
- data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +11 -11
- data/tracks/java/exercises/binary/README.md +4 -3
- data/tracks/java/exercises/bob/README.md +4 -3
- data/tracks/java/exercises/book-store/README.md +4 -3
- data/tracks/java/exercises/bowling/README.md +4 -3
- data/tracks/java/exercises/bracket-push/README.md +4 -3
- data/tracks/java/exercises/change/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/change/README.md +4 -3
- data/tracks/java/exercises/circular-buffer/README.md +4 -3
- data/tracks/java/exercises/clock/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/clock/README.md +6 -3
- data/tracks/java/exercises/collatz-conjecture/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/collatz-conjecture/README.md +4 -3
- data/tracks/java/exercises/complex-numbers/README.md +4 -3
- data/tracks/java/exercises/crypto-square/README.md +4 -3
- data/tracks/java/exercises/{rna-transcription/.meta/.version → custom-set/.meta/version} +0 -0
- data/tracks/java/exercises/custom-set/README.md +4 -3
- data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +103 -251
- data/tracks/java/exercises/diamond/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/diamond/README.md +4 -3
- data/tracks/java/exercises/difference-of-squares/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/difference-of-squares/README.md +4 -3
- data/tracks/java/exercises/etl/README.md +4 -3
- data/tracks/java/exercises/flatten-array/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/flatten-array/README.md +4 -3
- data/tracks/java/exercises/food-chain/README.md +4 -3
- data/tracks/java/exercises/forth/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/forth/README.md +3 -3
- data/tracks/java/exercises/gigasecond/README.md +4 -3
- data/tracks/java/exercises/grade-school/README.md +4 -3
- data/tracks/java/exercises/hamming/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/hamming/README.md +6 -3
- data/tracks/java/exercises/hello-world/README.md +6 -3
- data/tracks/java/exercises/hexadecimal/README.md +4 -3
- data/tracks/java/exercises/house/README.md +4 -3
- data/tracks/java/exercises/isogram/README.md +6 -3
- data/tracks/java/exercises/kindergarten-garden/README.md +4 -3
- data/tracks/java/exercises/largest-series-product/README.md +4 -3
- data/tracks/java/exercises/linked-list/README.md +4 -3
- data/tracks/java/exercises/list-ops/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/list-ops/README.md +6 -3
- data/tracks/java/exercises/luhn/README.md +4 -3
- data/tracks/java/exercises/matrix/README.md +4 -3
- data/tracks/java/exercises/meetup/README.md +4 -3
- data/tracks/java/exercises/minesweeper/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/minesweeper/README.md +4 -3
- data/tracks/java/exercises/nth-prime/README.md +4 -3
- data/tracks/java/exercises/nucleotide-count/README.md +4 -3
- data/tracks/java/exercises/ocr-numbers/README.md +4 -3
- data/tracks/java/exercises/octal/README.md +4 -3
- data/tracks/java/exercises/palindrome-products/README.md +4 -3
- data/tracks/java/exercises/pangram/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/pangram/README.md +4 -3
- data/tracks/java/exercises/pascals-triangle/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/pascals-triangle/README.md +4 -3
- data/tracks/java/exercises/perfect-numbers/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/perfect-numbers/README.md +4 -3
- data/tracks/java/exercises/phone-number/README.md +4 -3
- data/tracks/java/exercises/pig-latin/README.md +4 -3
- data/tracks/java/exercises/poker/README.md +4 -3
- data/tracks/java/exercises/prime-factors/README.md +4 -3
- data/tracks/java/exercises/pythagorean-triplet/README.md +4 -3
- data/tracks/java/exercises/queen-attack/README.md +4 -3
- data/tracks/java/exercises/raindrops/README.md +4 -3
- data/tracks/java/exercises/rectangles/README.md +4 -3
- data/tracks/java/exercises/rna-transcription/.meta/version +1 -0
- data/tracks/java/exercises/rna-transcription/README.md +4 -3
- data/tracks/java/exercises/robot-name/README.md +4 -3
- data/tracks/java/exercises/robot-simulator/README.md +4 -3
- data/tracks/java/exercises/roman-numerals/README.md +4 -3
- data/tracks/java/exercises/rotational-cipher/README.md +4 -3
- data/tracks/java/exercises/run-length-encoding/README.md +4 -3
- data/tracks/java/exercises/saddle-points/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/saddle-points/README.md +4 -3
- data/tracks/java/exercises/scrabble-score/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/scrabble-score/README.md +4 -3
- data/tracks/java/exercises/secret-handshake/README.md +4 -3
- data/tracks/java/exercises/series/README.md +4 -3
- data/tracks/java/exercises/sieve/README.md +4 -3
- data/tracks/java/exercises/simple-cipher/README.md +6 -3
- data/tracks/java/exercises/simple-linked-list/README.md +4 -3
- data/tracks/java/exercises/space-age/README.md +4 -3
- data/tracks/java/exercises/spiral-matrix/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/spiral-matrix/README.md +4 -3
- data/tracks/java/exercises/strain/README.md +4 -3
- data/tracks/java/exercises/sublist/README.md +4 -3
- data/tracks/java/exercises/sum-of-multiples/README.md +4 -3
- data/tracks/java/exercises/tournament/README.md +4 -3
- data/tracks/java/exercises/transpose/README.md +4 -3
- data/tracks/java/exercises/triangle/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/triangle/README.md +4 -3
- data/tracks/java/exercises/trinary/README.md +4 -3
- data/tracks/java/exercises/twelve-days/README.md +4 -3
- data/tracks/java/exercises/two-fer/README.md +6 -3
- data/tracks/java/exercises/word-count/README.md +4 -3
- data/tracks/java/exercises/word-search/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/word-search/README.md +4 -3
- data/tracks/java/exercises/wordy/README.md +4 -3
- data/tracks/julia/config.json +13 -0
- data/tracks/julia/exercises/phone-number/README.md +36 -0
- data/tracks/julia/exercises/phone-number/example.jl +18 -0
- data/tracks/julia/exercises/phone-number/phone-number.jl +3 -0
- data/tracks/julia/exercises/phone-number/runtests.jl +49 -0
- data/tracks/lua/config.json +505 -494
- data/tracks/lua/config/maintainers.json +16 -16
- data/tracks/lua/exercises/acronym/README.md +0 -1
- data/tracks/lua/exercises/all-your-base/README.md +1 -1
- data/tracks/lua/exercises/allergies/README.md +0 -1
- data/tracks/lua/exercises/alphametics/README.md +2 -2
- data/tracks/lua/exercises/atbash-cipher/README.md +2 -1
- data/tracks/lua/exercises/beer-song/README.md +1 -1
- data/tracks/lua/exercises/binary/README.md +2 -0
- data/tracks/lua/exercises/bowling/README.md +20 -6
- data/tracks/lua/exercises/change/README.md +1 -1
- data/tracks/lua/exercises/circular-buffer/README.md +13 -6
- data/tracks/lua/exercises/crypto-square/README.md +4 -4
- data/tracks/lua/exercises/diamond/README.md +6 -6
- data/tracks/lua/exercises/etl/README.md +2 -0
- data/tracks/lua/exercises/flatten-array/README.md +1 -2
- data/tracks/lua/exercises/food-chain/README.md +1 -1
- data/tracks/lua/exercises/grade-school/README.md +0 -1
- data/tracks/lua/exercises/grains/README.md +0 -1
- data/tracks/lua/exercises/house/README.md +1 -2
- data/tracks/lua/exercises/isogram/README.md +2 -1
- data/tracks/lua/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/lua/exercises/leap/README.md +1 -1
- data/tracks/lua/exercises/linked-list/README.md +10 -10
- data/tracks/lua/exercises/luhn/README.md +7 -7
- data/tracks/lua/exercises/matrix/README.md +6 -4
- data/tracks/lua/exercises/meetup/README.md +1 -2
- data/tracks/lua/exercises/nucleotide-count/README.md +8 -22
- data/tracks/lua/exercises/ocr-numbers/README.md +5 -5
- data/tracks/lua/exercises/octal/README.md +6 -2
- data/tracks/lua/exercises/pangram/README.md +1 -1
- data/tracks/lua/exercises/pascals-triangle/README.md +1 -1
- data/tracks/lua/exercises/perfect-numbers/README.md +2 -2
- data/tracks/lua/exercises/phone-number/README.md +3 -2
- data/tracks/lua/exercises/pov/README.md +2 -2
- data/tracks/lua/exercises/protein-translation/README.md +4 -5
- data/tracks/lua/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/lua/exercises/rail-fence-cipher/README.md +12 -7
- data/tracks/lua/exercises/react/README.md +29 -0
- data/tracks/lua/exercises/react/example.lua +108 -0
- data/tracks/lua/exercises/react/react_spec.lua +160 -0
- data/tracks/lua/exercises/rectangles/README.md +7 -7
- data/tracks/lua/exercises/roman-numerals/README.md +1 -1
- data/tracks/lua/exercises/run-length-encoding/README.md +4 -4
- data/tracks/lua/exercises/scrabble-score/README.md +3 -1
- data/tracks/lua/exercises/secret-handshake/README.md +1 -1
- data/tracks/lua/exercises/space-age/README.md +2 -1
- data/tracks/lua/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/lua/exercises/tournament/README.md +5 -5
- data/tracks/lua/exercises/transpose/README.md +7 -7
- data/tracks/lua/exercises/triangle/README.md +9 -6
- data/tracks/lua/exercises/variable-length-quantity/README.md +6 -7
- data/tracks/lua/exercises/word-count/README.md +1 -2
- data/tracks/lua/exercises/word-search/README.md +1 -1
- data/tracks/perl6/exercises/leap/Example.pm6 +1 -1
- data/tracks/perl6/exercises/leap/Leap.pm6 +1 -1
- data/tracks/perl6/exercises/leap/example.yaml +1 -1
- data/tracks/perl6/exercises/leap/leap.t +3 -3
- data/tracks/php/exercises/transpose/example.php +37 -15
- data/tracks/php/exercises/transpose/transpose_test.php +205 -45
- data/tracks/purescript/config.json +11 -0
- data/tracks/purescript/exercises/collatz-conjecture/README.md +33 -0
- data/tracks/purescript/exercises/collatz-conjecture/bower.json +26 -0
- data/tracks/purescript/exercises/collatz-conjecture/examples/src/CollatzConjecture.purs +15 -0
- data/tracks/purescript/exercises/collatz-conjecture/src/CollatzConjecture.purs +3 -0
- data/tracks/purescript/exercises/collatz-conjecture/test/Main.purs +43 -0
- data/tracks/python/config.json +10 -2
- data/tracks/racket/README.md +38 -33
- data/tracks/racket/config.json +10 -0
- data/tracks/racket/exercises/collatz-conjecture/README.md +58 -0
- data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture-test.rkt +34 -0
- data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture.rkt +6 -0
- data/tracks/racket/exercises/collatz-conjecture/example.rkt +20 -0
- data/tracks/ruby/exercises/allergies/.meta/.version +1 -0
- data/tracks/ruby/exercises/allergies/.meta/generator/allergies_case.rb +33 -0
- data/tracks/ruby/exercises/allergies/.meta/solutions/allergies.rb +4 -0
- data/tracks/ruby/exercises/allergies/allergies_test.rb +42 -9
- data/tracks/typescript/config.json +46 -0
- data/tracks/typescript/exercises/circular-buffer/README.md +74 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.example.ts +51 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.test.ts +103 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.ts +0 -0
- data/tracks/typescript/exercises/circular-buffer/package.json +36 -0
- data/tracks/typescript/exercises/circular-buffer/tsconfig.json +22 -0
- data/tracks/typescript/exercises/circular-buffer/tslint.json +127 -0
- data/tracks/typescript/exercises/circular-buffer/yarn.lock +2305 -0
- data/tracks/typescript/exercises/largest-series-product/README.md +51 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.example.ts +52 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.test.ts +68 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.ts +0 -0
- data/tracks/typescript/exercises/largest-series-product/package.json +36 -0
- data/tracks/typescript/exercises/largest-series-product/tsconfig.json +22 -0
- data/tracks/typescript/exercises/largest-series-product/tslint.json +127 -0
- data/tracks/typescript/exercises/largest-series-product/yarn.lock +2305 -0
- data/tracks/typescript/exercises/robot-simulator/README.md +58 -0
- data/tracks/typescript/exercises/robot-simulator/package.json +36 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.example.ts +74 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.test.ts +150 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.ts +0 -0
- data/tracks/typescript/exercises/robot-simulator/tsconfig.json +22 -0
- data/tracks/typescript/exercises/robot-simulator/tslint.json +127 -0
- data/tracks/typescript/exercises/robot-simulator/yarn.lock +2305 -0
- metadata +85 -23
|
@@ -250,6 +250,17 @@
|
|
|
250
250
|
"topics": [
|
|
251
251
|
"arrays"
|
|
252
252
|
]
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"uuid": "d99298e6-0703-6080-8a2d-16e803173b64667909f",
|
|
256
|
+
"slug": "collatz-conjecture",
|
|
257
|
+
"core": false,
|
|
258
|
+
"unlocked_by": null,
|
|
259
|
+
"difficulty": 1,
|
|
260
|
+
"topics": [
|
|
261
|
+
"arithmetics",
|
|
262
|
+
"maybe"
|
|
263
|
+
]
|
|
253
264
|
}
|
|
254
265
|
],
|
|
255
266
|
"foregone": [
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Collatz Conjecture
|
|
2
|
+
|
|
3
|
+
The Collatz Conjecture or 3x+1 problem can be summarized as follows:
|
|
4
|
+
|
|
5
|
+
Take any positive integer n. If n is even, divide n by 2 to get n / 2. If n is
|
|
6
|
+
odd, multiply n by 3 and add 1 to get 3n + 1. Repeat the process indefinitely.
|
|
7
|
+
The conjecture states that no matter which number you start with, you will
|
|
8
|
+
always reach 1 eventually.
|
|
9
|
+
|
|
10
|
+
Given a number n, return the number of steps required to reach 1.
|
|
11
|
+
|
|
12
|
+
## Examples
|
|
13
|
+
|
|
14
|
+
Starting with n = 12, the steps would be as follows:
|
|
15
|
+
|
|
16
|
+
0. 12
|
|
17
|
+
1. 6
|
|
18
|
+
2. 3
|
|
19
|
+
3. 10
|
|
20
|
+
4. 5
|
|
21
|
+
5. 16
|
|
22
|
+
6. 8
|
|
23
|
+
7. 4
|
|
24
|
+
8. 2
|
|
25
|
+
9. 1
|
|
26
|
+
|
|
27
|
+
Resulting in 9 steps. So for input n = 12, the return value would be 9.
|
|
28
|
+
## Source
|
|
29
|
+
|
|
30
|
+
An unsolved problem in mathematics named after mathematician Lothar Collatz [https://en.wikipedia.org/wiki/3x_%2B_1_problem](https://en.wikipedia.org/wiki/3x_%2B_1_problem)
|
|
31
|
+
|
|
32
|
+
## Submitting Incomplete Solutions
|
|
33
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "collatz-conjecture",
|
|
3
|
+
"ignore": [
|
|
4
|
+
"**/.*",
|
|
5
|
+
"node_modules",
|
|
6
|
+
"bower_components",
|
|
7
|
+
"output"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"purescript-console": "^3.0.0",
|
|
11
|
+
"purescript-datetime": "^3.4.0",
|
|
12
|
+
"purescript-either": "^3.1.0",
|
|
13
|
+
"purescript-enums": "^3.2.1",
|
|
14
|
+
"purescript-integers": "^3.1.0",
|
|
15
|
+
"purescript-lists": "^4.10.0",
|
|
16
|
+
"purescript-maps": "^3.5.2",
|
|
17
|
+
"purescript-prelude": "^3.1.0",
|
|
18
|
+
"purescript-sets": "^3.0.0",
|
|
19
|
+
"purescript-strings": "^3.3.1",
|
|
20
|
+
"purescript-unicode": "^3.0.1"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"purescript-psci-support": "^3.0.0",
|
|
24
|
+
"purescript-test-unit": "^13.0.0"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module CollatzConjecture
|
|
2
|
+
( collatz
|
|
3
|
+
) where
|
|
4
|
+
|
|
5
|
+
import Prelude
|
|
6
|
+
import Data.Int (even)
|
|
7
|
+
import Data.Maybe (Maybe(..))
|
|
8
|
+
|
|
9
|
+
collatzHelper :: Int -> Int -> Int
|
|
10
|
+
collatzHelper acc x | x == 1 = acc
|
|
11
|
+
| even x = collatzHelper (acc + 1) (x / 2)
|
|
12
|
+
| otherwise = collatzHelper (acc + 1) (x * 3 + 1)
|
|
13
|
+
|
|
14
|
+
collatz :: Int -> Maybe Int
|
|
15
|
+
collatz x = if x <= 0 then Nothing else Just $ collatzHelper 0 x
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Test.Main where
|
|
2
|
+
|
|
3
|
+
import Prelude
|
|
4
|
+
|
|
5
|
+
import CollatzConjecture (collatz)
|
|
6
|
+
import Control.Monad.Aff.AVar (AVAR)
|
|
7
|
+
import Control.Monad.Eff (Eff)
|
|
8
|
+
import Control.Monad.Eff.Console (CONSOLE)
|
|
9
|
+
import Data.Maybe (Maybe(..))
|
|
10
|
+
import Test.Unit (TestSuite, suite, test)
|
|
11
|
+
import Test.Unit.Assert as Assert
|
|
12
|
+
import Test.Unit.Console (TESTOUTPUT)
|
|
13
|
+
import Test.Unit.Main (runTest)
|
|
14
|
+
|
|
15
|
+
main :: forall eff
|
|
16
|
+
. Eff ( avar :: AVAR
|
|
17
|
+
, console :: CONSOLE
|
|
18
|
+
, testOutput :: TESTOUTPUT
|
|
19
|
+
| eff
|
|
20
|
+
)
|
|
21
|
+
Unit
|
|
22
|
+
main = runTest suites
|
|
23
|
+
|
|
24
|
+
suites :: forall e. TestSuite e
|
|
25
|
+
suites = do
|
|
26
|
+
suite "CollatzConjecture.collatz" do
|
|
27
|
+
test "zero steps for one" do
|
|
28
|
+
Assert.equal (Just 0) (collatz 1)
|
|
29
|
+
|
|
30
|
+
test "divide if even" do
|
|
31
|
+
Assert.equal (Just 4) (collatz 16)
|
|
32
|
+
|
|
33
|
+
test "even and odd steps" do
|
|
34
|
+
Assert.equal (Just 9) (collatz 12)
|
|
35
|
+
|
|
36
|
+
test "Large number of even and odd steps" do
|
|
37
|
+
Assert.equal (Just 152) (collatz 1000000)
|
|
38
|
+
|
|
39
|
+
test "zero is an error" do
|
|
40
|
+
Assert.equal Nothing (collatz 0)
|
|
41
|
+
|
|
42
|
+
test "negative value is an error" do
|
|
43
|
+
Assert.equal Nothing (collatz (-15))
|
data/tracks/python/config.json
CHANGED
|
@@ -326,7 +326,10 @@
|
|
|
326
326
|
"unlocked_by": null,
|
|
327
327
|
"difficulty": 1,
|
|
328
328
|
"topics": [
|
|
329
|
-
|
|
329
|
+
"recursion",
|
|
330
|
+
"lists",
|
|
331
|
+
"algorithms",
|
|
332
|
+
"transforming"
|
|
330
333
|
]
|
|
331
334
|
},
|
|
332
335
|
{
|
|
@@ -374,7 +377,12 @@
|
|
|
374
377
|
"unlocked_by": null,
|
|
375
378
|
"difficulty": 1,
|
|
376
379
|
"topics": [
|
|
377
|
-
|
|
380
|
+
"mathematics",
|
|
381
|
+
"algorithms",
|
|
382
|
+
"loops",
|
|
383
|
+
"conditionals",
|
|
384
|
+
"pattern_matching",
|
|
385
|
+
"security"
|
|
378
386
|
]
|
|
379
387
|
},
|
|
380
388
|
{
|
data/tracks/racket/README.md
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
# Exercism Racket Track
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://travis-ci.org/exercism/racket)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Exercism exercises in Racket.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Contributing
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Please read about how to [get involved in a track](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks). Also, be sure to read the Exercism [Code of Conduct](https://github.com/exercism/exercism.io/blob/master/CODE_OF_CONDUCT.md).
|
|
10
|
+
|
|
11
|
+
We welcome both improvements to the existing exercises and the addition of new exercises. If you are creating a new exercise from scratch please see [adding new exercises](https://github.com/exercism/docs/blob/master/you-can-help/make-up-new-exercises.md). If you are porting an exercise that exists in other exercism language tracks, see [porting an exercise](https://github.com/exercism/docs/blob/master/you-can-help/implement-an-exercise-from-specification.md).
|
|
12
|
+
|
|
13
|
+
Please note that this track's exercises must conform to the Exercism-wide standards described in the [documentation](https://github.com/exercism/docs/tree/master/language-tracks/exercises). If you're unsure about how to make a change, then go ahead and open an issue on Github.
|
|
14
|
+
|
|
15
|
+
Each exercise should have an example solution, a description file, a test suite and a stub file for the solution declaring the module and exports.
|
|
10
16
|
|
|
11
17
|
### Naming Conventions
|
|
12
18
|
|
|
13
|
-
The example solution should be named `example.rkt`. The
|
|
19
|
+
The example solution should be named `example.rkt`. The description file: `README.md`. The test suite: `<exercise-name>-test.rkt`, and the stub: `<exercise-name>.rkt`.
|
|
14
20
|
|
|
15
|
-
For example, if you were to work on the `binary` exercise, you would
|
|
21
|
+
For example, if you were to work on the `binary` exercise, you would create and commit the following four files:
|
|
16
22
|
|
|
17
23
|
```bash
|
|
18
|
-
$
|
|
24
|
+
$ racket/exercises/binary/
|
|
19
25
|
.
|
|
20
26
|
├── binary.rkt
|
|
21
27
|
├── binary-test.rkt
|
|
28
|
+
├── README.md
|
|
22
29
|
└── example.rkt
|
|
23
30
|
```
|
|
24
31
|
|
|
@@ -28,7 +35,29 @@ The Racket code in this repo is meant to conform with the conventions set forth
|
|
|
28
35
|
### Dependencies
|
|
29
36
|
Try to avoid external dependencies.
|
|
30
37
|
|
|
31
|
-
###
|
|
38
|
+
### Creating the description file
|
|
39
|
+
|
|
40
|
+
`README.md` may be [generated](https://github.com/exercism/docs/blob/master/maintaining-a-track/regenerating-exercise-readmes.md) from exercism data. The generator will use the `description.md` from the exercise directory in the [problem-specifications repository](https://github.com/exercism/problem-specifications/tree/master/exercises). To generate `README.md` for your execise only use the following command from your racket track directory:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
bin/configlet generate . --only <exercise-name>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Adding the exercise to config.json
|
|
47
|
+
Be sure to add the exercise to an appropriate place in the `config.json` file. The position in the file determines the order exercises are fetched by users. Generate a unique UUID for the exercise with ```configlet uuid```. Finally check `config.json` with:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
bin/configlet lint .
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Opening an Issue
|
|
54
|
+
|
|
55
|
+
If you plan to make significant or breaking changes, please open an issue so we can discuss it first. If this is a discussion that is relevant to more than just the Racket track, please open an issue in [exercism/discussions](https://github.com/exercism/discussions/issues).
|
|
56
|
+
|
|
57
|
+
## Submitting a Pull Request
|
|
58
|
+
|
|
59
|
+
Pull requests should be focused on a single exercise, issue, or conceptually cohesive change. Please refer to Exercism's [pull request guidelines](https://github.com/exercism/docs/blob/master/contributing/pull-request-guidelines.md).
|
|
60
|
+
|
|
32
61
|
Prior to submitting a pull request, ensure that your test requires the stub file, and not the example file - like so:
|
|
33
62
|
|
|
34
63
|
```Racket
|
|
@@ -49,31 +78,7 @@ Prior to submitting a pull request, ensure that your test requires the stub file
|
|
|
49
78
|
|
|
50
79
|
(run-tests suite))
|
|
51
80
|
```
|
|
52
|
-
The exercise should also be added as a value for the `problems` key in [config.json](https://github.com/exercism/racket/blob/master/config.json); otherwise, the pull request will not pass the Travis CI build. Use [Order of exercises](https://github.com/exercism/racket/wiki/Order-of-exercises) in our wiki to find a good place for the new exercise in the curriculum.
|
|
53
|
-
|
|
54
|
-
You can perform additional checks by running the following in your terminal:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
bin/check_exercises.sh
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
and:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
bin/configlet lint .
|
|
64
|
-
```
|
|
65
|
-
Your pull request won't pass the Travis CI build if either of those fail.
|
|
66
|
-
|
|
67
|
-
If you're new to Git, take a look at [this short guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md#git-basics).
|
|
68
|
-
|
|
69
|
-
## READMEs
|
|
70
|
-
Please do not add a README or README.md file to the problem directory. The READMEs are constructed using shared metadata, which lives in the [exercism/x-common](https://github.com/exercism/x-common) repository.
|
|
71
|
-
|
|
72
|
-
## Contributing Guide
|
|
73
|
-
|
|
74
|
-
Please see the [contributing guide](https://github.com/exercism/x-api/blob/master/CONTRIBUTING.md#the-exercise-data)
|
|
75
|
-
|
|
76
81
|
|
|
77
82
|
## Racket icon
|
|
78
83
|
The Racket logo was created by [Matthew Butterick](https://en.wikipedia.org/wiki/Matthew_Butterick) and released under the Creative Commons Attribution-Share Alike 3.0 Unported license.
|
|
79
|
-
We have adapted it, changing the colour scheme
|
|
84
|
+
We have adapted it, changing the colour scheme for use on Exercism.
|
data/tracks/racket/config.json
CHANGED
|
@@ -73,6 +73,16 @@
|
|
|
73
73
|
|
|
74
74
|
]
|
|
75
75
|
},
|
|
76
|
+
{
|
|
77
|
+
"uuid": "28102e69-dad0-4f3c-8cdf-5a18a73178a4",
|
|
78
|
+
"slug": "collatz-conjecture",
|
|
79
|
+
"core": false,
|
|
80
|
+
"unlocked_by": null,
|
|
81
|
+
"difficulty": 1,
|
|
82
|
+
"topics": [
|
|
83
|
+
|
|
84
|
+
]
|
|
85
|
+
},
|
|
76
86
|
{
|
|
77
87
|
"uuid": "f0a6e55d-6702-4043-bdcf-2ed99bf60645",
|
|
78
88
|
"slug": "hamming",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Collatz Conjecture
|
|
2
|
+
|
|
3
|
+
The Collatz Conjecture or 3x+1 problem can be summarized as follows:
|
|
4
|
+
|
|
5
|
+
Take any positive integer n. If n is even, divide n by 2 to get n / 2. If n is
|
|
6
|
+
odd, multiply n by 3 and add 1 to get 3n + 1. Repeat the process indefinitely.
|
|
7
|
+
The conjecture states that no matter which number you start with, you will
|
|
8
|
+
always reach 1 eventually.
|
|
9
|
+
|
|
10
|
+
Given a number n, return the number of steps required to reach 1.
|
|
11
|
+
|
|
12
|
+
## Examples
|
|
13
|
+
|
|
14
|
+
Starting with n = 12, the steps would be as follows:
|
|
15
|
+
|
|
16
|
+
0. 12
|
|
17
|
+
1. 6
|
|
18
|
+
2. 3
|
|
19
|
+
3. 10
|
|
20
|
+
4. 5
|
|
21
|
+
5. 16
|
|
22
|
+
6. 8
|
|
23
|
+
7. 4
|
|
24
|
+
8. 2
|
|
25
|
+
9. 1
|
|
26
|
+
|
|
27
|
+
Resulting in 9 steps. So for input n = 12, the return value would be 9.
|
|
28
|
+
|
|
29
|
+
* * * *
|
|
30
|
+
|
|
31
|
+
For installation and learning resources, refer to the
|
|
32
|
+
[exercism Racket page](http://exercism.io/languages/racket).
|
|
33
|
+
|
|
34
|
+
You can run the provided tests through DrRacket, or via the command line.
|
|
35
|
+
|
|
36
|
+
To run the test through DrRacket, simply open the test file and click the 'Run' button in the upper right.
|
|
37
|
+
|
|
38
|
+
To run the test from the command line, simply run the test from the exercise directory. For example, if the test suite is called `hello-world-test.rkt`, you can run the following command:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
raco test hello-world-test.rkt
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
which will display the following:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
raco test: (submod "hello-world-test.rkt" test)
|
|
48
|
+
2 success(es) 0 failure(s) 0 error(s) 2 test(s) run
|
|
49
|
+
0
|
|
50
|
+
2 tests passed
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Source
|
|
54
|
+
|
|
55
|
+
An unsolved problem in mathematics named after mathematician Lothar Collatz [https://en.wikipedia.org/wiki/3x_%2B_1_problem](https://en.wikipedia.org/wiki/3x_%2B_1_problem)
|
|
56
|
+
|
|
57
|
+
## Submitting Incomplete Solutions
|
|
58
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#lang racket/base
|
|
2
|
+
|
|
3
|
+
(require "collatz-conjecture.rkt")
|
|
4
|
+
|
|
5
|
+
(module+ test
|
|
6
|
+
(require rackunit rackunit/text-ui)
|
|
7
|
+
|
|
8
|
+
(define suite
|
|
9
|
+
(test-suite
|
|
10
|
+
"collatz-conjecture tests"
|
|
11
|
+
|
|
12
|
+
(test-eqv? "zero steps for one"
|
|
13
|
+
(collatz 1)
|
|
14
|
+
0)
|
|
15
|
+
(test-eqv? "divide if even"
|
|
16
|
+
(collatz 16)
|
|
17
|
+
4)
|
|
18
|
+
(test-eqv? "even and odd steps"
|
|
19
|
+
(collatz 12)
|
|
20
|
+
9)
|
|
21
|
+
(test-eqv? "Large number of even and odd steps"
|
|
22
|
+
(collatz 1000000)
|
|
23
|
+
152)
|
|
24
|
+
(test-exn "zero is an error"
|
|
25
|
+
exn:fail?
|
|
26
|
+
(lambda () (collatz 0)))
|
|
27
|
+
(test-exn "negative value is an error"
|
|
28
|
+
exn:fail?
|
|
29
|
+
(lambda () (collatz -15)))
|
|
30
|
+
(test-exn "non exact value is an error"
|
|
31
|
+
exn:fail?
|
|
32
|
+
(lambda () (collatz 3.4)))))
|
|
33
|
+
|
|
34
|
+
(run-tests suite))
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#lang racket
|
|
2
|
+
|
|
3
|
+
(provide collatz)
|
|
4
|
+
|
|
5
|
+
(define (collatz-length n [acc 0])
|
|
6
|
+
(if (= n 1)
|
|
7
|
+
acc
|
|
8
|
+
(collatz-length (if (even? n)
|
|
9
|
+
(/ n 2)
|
|
10
|
+
(add1 (* 3 n)))
|
|
11
|
+
(add1 acc))))
|
|
12
|
+
|
|
13
|
+
(define (collatz n)
|
|
14
|
+
(if (nand (exact-integer? n)
|
|
15
|
+
(positive? n))
|
|
16
|
+
(error "number must be a positive integer")
|
|
17
|
+
(collatz-length n)))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'generator/exercise_case'
|
|
2
|
+
|
|
3
|
+
class AllergiesCase < Generator::ExerciseCase
|
|
4
|
+
def workload
|
|
5
|
+
assertions = list_expected? ? list_assertion : individual_assertions
|
|
6
|
+
allergies_declaration = "allergies = Allergies.new(#{score})"
|
|
7
|
+
indent_lines(assertions.unshift(allergies_declaration), 4)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def list_expected?
|
|
11
|
+
property == 'list'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def list_assertion
|
|
15
|
+
["assert_equal %w(#{expected.join(' ')}), allergies.list"]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def individual_assertions
|
|
19
|
+
expected.map do |assertion|
|
|
20
|
+
substance = assertion['substance']
|
|
21
|
+
result = assertion['result']
|
|
22
|
+
"#{result ? assert(substance) : refute(substance)}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def refute(allergen)
|
|
27
|
+
"refute allergies.allergic_to?('#{allergen}')"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def assert(allergen)
|
|
31
|
+
"assert allergies.allergic_to?('#{allergen}')"
|
|
32
|
+
end
|
|
33
|
+
end
|