trackler 2.0.0.1 → 2.0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bump-content +3 -1
- data/bin/verify-metadata +2 -2
- data/common/exercises/alphametics/canonical-data.json +19 -9
- data/common/exercises/food-chain/canonical-data.json +7 -1
- data/common/exercises/grains/canonical-data.json +66 -0
- data/common/exercises/raindrops/description.md +4 -5
- data/common/exercises/triangle/canonical-data.json +81 -54
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +26 -19
- data/tracks/c/exercises/allergies/makefile +15 -0
- data/tracks/c/exercises/allergies/src/allergies.h +21 -0
- data/tracks/c/exercises/allergies/src/example.c +32 -0
- data/tracks/c/exercises/allergies/src/example.h +26 -0
- data/tracks/c/exercises/allergies/test/test_allergies.c +203 -0
- data/tracks/c/exercises/allergies/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/allergies/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/allergies/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/atbash-cipher/makefile +16 -0
- data/tracks/c/exercises/atbash-cipher/src/example.c +71 -0
- data/tracks/c/exercises/atbash-cipher/src/example.h +7 -0
- data/tracks/c/exercises/atbash-cipher/test/test_atbash_cipher.c +113 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/phone-number/makefile +16 -0
- data/tracks/c/exercises/phone-number/src/example.c +66 -0
- data/tracks/c/exercises/phone-number/src/example.h +8 -0
- data/tracks/c/exercises/phone-number/test/test_phone_number.c +108 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity_internals.h +701 -0
- data/tracks/csharp/config.json +8 -0
- data/tracks/csharp/exercises/bowling/BowlingTest.cs +188 -33
- data/tracks/csharp/exercises/bowling/Example.cs +38 -9
- data/tracks/csharp/exercises/rectangles/Example.cs +91 -0
- data/tracks/csharp/exercises/rectangles/RectanglesTest.cs +133 -0
- data/tracks/elisp/docs/INSTALLATION.org +1 -1
- data/tracks/elixir/config.json +8 -66
- data/tracks/elixir/docs/LEARNING.md +1 -1
- data/tracks/elixir/exercises/diamond/diamond_test.exs +12 -12
- data/tracks/elixir/exercises/grep/example.exs +92 -0
- data/tracks/elixir/exercises/grep/grep.exs +6 -0
- data/tracks/elixir/exercises/grep/grep_test.exs +259 -0
- data/tracks/elixir/exercises/markdown/markdown.exs +59 -2
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +4 -4
- data/tracks/elixir/exercises/phone-number/phone_number_test.exs +5 -0
- data/tracks/fsharp/exercises/bowling/BowlingTest.fs +158 -43
- data/tracks/fsharp/exercises/bowling/Example.fs +53 -24
- data/tracks/go/config.json +5 -0
- data/tracks/go/exercises/diamond/diamond_test.go +227 -0
- data/tracks/go/exercises/diamond/example.go +47 -0
- data/tracks/go/exercises/food-chain/example.go +1 -1
- data/tracks/go/exercises/food-chain/food_chain_test.go +30 -6
- data/tracks/go/exercises/nucleotide-count/example.go +21 -8
- data/tracks/go/exercises/nucleotide-count/nucleotide_count_test.go +45 -37
- data/tracks/haskell/exercises/anagram/test/Tests.hs +1 -11
- data/tracks/java/bin/journey-test.sh +165 -128
- data/tracks/java/docs/ABOUT.md +5 -8
- data/tracks/java/exercises/hello-world/build.gradle +0 -6
- data/tracks/java/exercises/hello-world/src/test/java/HelloWorldTest.java +0 -1
- data/tracks/java/exercises/meetup/build.gradle +0 -1
- data/tracks/java/exercises/meetup/src/example/java/Meetup.java +9 -7
- data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +185 -188
- data/tracks/lua/config.json +0 -73
- data/tracks/lua/exercises/bowling/bowling_spec.lua +92 -48
- data/tracks/lua/exercises/bowling/example.lua +4 -1
- data/tracks/objective-c/config.json +9 -30
- data/tracks/objective-c/exercises/pangram/PangramExample.h +7 -0
- data/tracks/objective-c/exercises/pangram/PangramExample.m +21 -0
- data/tracks/objective-c/exercises/pangram/PangramTest.m +51 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/ocaml/README.md +46 -1
- data/tracks/ocaml/SETUP.md +21 -2
- data/tracks/ocaml/config.json +48 -78
- data/tracks/perl5/README.md +15 -8
- data/tracks/perl5/testall.pl +5 -5
- data/tracks/php/config.json +26 -34
- data/tracks/php/docs/ABOUT.md +15 -0
- data/tracks/php/exercises/allergies/allergies_test.php +121 -0
- data/tracks/php/exercises/allergies/example.php +64 -0
- data/tracks/php/exercises/etl/etl_test.php +52 -0
- data/tracks/php/exercises/etl/example.php +12 -0
- data/tracks/php/exercises/nucleotide-count/example.php +25 -0
- data/tracks/php/exercises/nucleotide-count/nucleotide-count_test.php +36 -0
- data/tracks/php/exercises/pig-latin/example.php +25 -29
- data/tracks/php/exercises/pig-latin/pig-latin_test.php +26 -19
- data/tracks/php/exercises/space-age/example.php +65 -0
- data/tracks/php/exercises/space-age/space-age_test.php +70 -0
- data/tracks/php/exercises/triangle/example.php +43 -0
- data/tracks/php/exercises/triangle/triangle_test.php +140 -0
- data/tracks/pony/exercises/anagram/example.pony +6 -6
- data/tracks/pony/exercises/anagram/test.pony +3 -4
- data/tracks/pony/exercises/bob/test.pony +23 -23
- data/tracks/pony/exercises/difference-of-squares/test.pony +11 -11
- data/tracks/pony/exercises/hamming/example.pony +3 -3
- data/tracks/pony/exercises/hamming/test.pony +16 -16
- data/tracks/pony/exercises/hello-world/test.pony +5 -4
- data/tracks/pony/exercises/leap/test.pony +8 -8
- data/tracks/python/config.json +18 -0
- data/tracks/python/exercises/diamond/diamond_test.py +33 -0
- data/tracks/python/exercises/diamond/example.py +15 -0
- data/tracks/python/exercises/linked-list/example.py +47 -0
- data/tracks/python/exercises/linked-list/linked_list.py +13 -0
- data/tracks/python/exercises/linked-list/linked_list_test.py +49 -0
- data/tracks/python/exercises/list-ops/example.py +55 -0
- data/tracks/python/exercises/list-ops/list_ops.py +38 -0
- data/tracks/python/exercises/list-ops/list_ops_test.py +136 -0
- data/tracks/ruby/bin/generate +22 -2
- data/tracks/ruby/config.json +12 -83
- data/tracks/ruby/exercises/allergies/allergies_test.rb +0 -1
- data/tracks/ruby/exercises/atbash-cipher/atbash_cipher_test.rb +0 -1
- data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -2
- data/tracks/ruby/exercises/binary/example.rb +0 -1
- data/tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb +1 -1
- data/tracks/ruby/exercises/bowling/.version +1 -0
- data/tracks/ruby/exercises/bowling/bowling_test.rb +109 -133
- data/tracks/ruby/exercises/bowling/example.rb +7 -7
- data/tracks/ruby/exercises/bowling/example.tt +27 -0
- data/tracks/ruby/exercises/circular-buffer/circular_buffer_test.rb +0 -2
- data/tracks/ruby/exercises/clock/example.rb +0 -2
- data/tracks/ruby/exercises/connect/connect_test.rb +0 -1
- data/tracks/ruby/exercises/custom-set/custom_set_test.rb +0 -1
- data/tracks/ruby/exercises/diamond/diamond_test.rb +0 -1
- data/tracks/ruby/exercises/etl/etl_test.rb +1 -1
- data/tracks/ruby/exercises/house/house_test.rb +0 -1
- data/tracks/ruby/exercises/isogram/isogram_test.rb +2 -2
- data/tracks/ruby/exercises/largest-series-product/example.tt +0 -3
- data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +0 -4
- data/tracks/ruby/exercises/linked-list/linked_list_test.rb +1 -1
- data/tracks/ruby/exercises/meetup/meetup_test.rb +0 -1
- data/tracks/ruby/exercises/nth-prime/example.tt +0 -2
- data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +0 -2
- data/tracks/ruby/exercises/ocr-numbers/ocr_numbers_test.rb +1 -2
- data/tracks/ruby/exercises/protein-translation/protein_translation_test.rb +0 -1
- data/tracks/ruby/exercises/proverb/proverb_test.rb +1 -3
- data/tracks/ruby/exercises/queen-attack/example.rb +3 -1
- data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +34 -8
- data/tracks/ruby/exercises/robot-simulator/robot_simulator_test.rb +1 -1
- data/tracks/ruby/exercises/strain/strain_test.rb +2 -2
- data/tracks/ruby/exercises/tournament/.version +1 -0
- data/tracks/ruby/exercises/tournament/example.rb +54 -0
- data/tracks/ruby/exercises/tournament/example.tt +23 -0
- data/tracks/ruby/exercises/tournament/tournament_test.rb +92 -0
- data/tracks/ruby/exercises/transpose/.version +1 -0
- data/tracks/ruby/exercises/transpose/example.rb +14 -0
- data/tracks/ruby/exercises/transpose/example.tt +22 -0
- data/tracks/ruby/exercises/transpose/transpose_test.rb +303 -0
- data/tracks/ruby/lib/bowling_cases.rb +46 -0
- data/tracks/ruby/lib/isogram_cases.rb +1 -1
- data/tracks/ruby/lib/tournament_cases.rb +45 -0
- data/tracks/ruby/lib/transpose_cases.rb +45 -0
- data/tracks/rust/config.json +2 -0
- data/tracks/rust/exercises/bowling/.gitignore +7 -0
- data/tracks/rust/exercises/bowling/Cargo.toml +3 -0
- data/tracks/rust/exercises/bowling/example.rs +134 -0
- data/tracks/rust/exercises/bowling/tests/bowling.rs +373 -0
- data/tracks/rust/exercises/grains/.gitignore +7 -0
- data/tracks/rust/exercises/grains/Cargo.toml +3 -0
- data/tracks/rust/exercises/grains/example.rs +11 -0
- data/tracks/rust/exercises/grains/src/lib.rs +7 -0
- data/tracks/rust/exercises/grains/tests/grains.rs +63 -0
- data/tracks/rust/problems.md +2 -0
- data/tracks/scala/README.md +38 -0
- data/tracks/scala/config.json +20 -74
- data/tracks/scala/exercises/accumulate/src/test/scala/accumulate_test.scala +4 -0
- data/tracks/scala/exercises/allergies/src/test/scala/allergies_test.scala +11 -0
- data/tracks/scala/exercises/alphametics/build.sbt +6 -0
- data/tracks/scala/exercises/alphametics/example.scala +125 -0
- data/tracks/scala/exercises/alphametics/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/alphametics/src/test/scala/AlphameticsTest.scala +62 -0
- data/tracks/scala/exercises/atbash-cipher/src/test/scala/atbash_test.scala +8 -0
- data/tracks/scala/exercises/bank-account/src/test/scala/BankAccountTest.scala +4 -0
- data/tracks/scala/exercises/binary/src/test/scala/binary_test.scala +13 -0
- data/tracks/scala/exercises/binary-search-tree/src/test/scala/BstTest.scala +11 -0
- data/tracks/scala/exercises/bowling/Example.scala +116 -0
- data/tracks/scala/exercises/bowling/build.sbt +3 -0
- data/tracks/scala/exercises/bowling/src/main/scala/Bowling.scala +11 -0
- data/tracks/scala/exercises/bowling/src/test/scala/BowlingSuite.scala +237 -0
- data/tracks/scala/exercises/clock/src/test/scala/ClockTest.scala +50 -0
- data/tracks/scala/exercises/connect/README.md +17 -0
- data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +7 -0
- data/tracks/scala/exercises/crypto-square/src/test/scala/{CrytpoSquareTest.scala → CryptoSquareTest.scala} +9 -0
- data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +36 -0
- data/tracks/scala/exercises/difference-of-squares/src/test/scala/squares_test.scala +8 -0
- data/tracks/scala/exercises/forth/src/test/scala/ForthTest.scala +22 -0
- data/tracks/scala/exercises/hexadecimal/src/test/scala/HexadecimalTest.scala +8 -0
- data/tracks/scala/exercises/kindergarten-garden/src/test/scala/GardenTest.scala +5 -0
- data/tracks/scala/exercises/largest-series-product/src/test/scala/SeriesTest.scala +2 -0
- data/tracks/scala/exercises/linked-list/src/test/scala/DequeTest.scala +4 -0
- data/tracks/scala/exercises/luhn/src/test/scala/LuhnTest.scala +4 -0
- data/tracks/scala/exercises/matrix/src/test/scala/MatrixTest.scala +2 -0
- data/tracks/scala/exercises/minesweeper/src/test/scala/MinesweeperTest.scala +6 -0
- data/tracks/scala/exercises/nth-prime/src/test/scala/PrimeTest.scala +5 -0
- data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrTest.scala +15 -0
- data/tracks/scala/exercises/octal/src/test/scala/OctalTest.scala +7 -0
- data/tracks/scala/exercises/parallel-letter-frequency/src/test/scala/FrequencyTest.scala +8 -0
- data/tracks/scala/exercises/pascals-triangle/src/test/scala/PascalsTriangleTest.scala +5 -0
- data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +4 -0
- data/tracks/scala/exercises/pythagorean-triplet/src/test/scala/PythagoreanTripletTest.scala +3 -0
- data/tracks/scala/exercises/queen-attack/src/test/scala/QueensTest.scala +5 -0
- data/tracks/scala/exercises/robot-simulator/src/test/scala/RobotTest.scala +16 -8
- data/tracks/scala/exercises/say/src/test/scala/SayTest.scala +34 -17
- data/tracks/scala/exercises/scrabble-score/src/test/scala/scrabble_score_test.scala +6 -0
- data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +18 -9
- data/tracks/scala/exercises/series/src/test/scala/SeriesTest.scala +4 -2
- data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +8 -4
- data/tracks/scala/exercises/simple-cipher/src/test/scala/CipherTest.scala +17 -9
- data/tracks/scala/exercises/sublist/src/test/scala/sublist_test.scala +17 -0
- data/tracks/scala/exercises/trinary/src/test/scala/TrinaryTest.scala +14 -7
- data/tracks/scala/exercises/wordy/src/test/scala/WordProblemTest.scala +28 -14
- data/tracks/scala/project/Build.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/BowlingTestGenerator.scala +57 -0
- data/tracks/sml/config.json +41 -6
- data/tracks/sml/exercises/flatten-array/example.sml +6 -0
- data/tracks/sml/exercises/flatten-array/test_flatten_array.sml +10 -0
- data/tracks/sml/exercises/nth-prime/example.sml +46 -0
- data/tracks/sml/exercises/nth-prime/test_nth_prime.sml +14 -0
- data/tracks/sml/exercises/raindrops/example.sml +9 -0
- data/tracks/sml/exercises/raindrops/raindrops.sml +2 -0
- data/tracks/sml/exercises/raindrops/test_raindrops.sml +95 -0
- data/tracks/swift/config.json +269 -328
- data/tracks/swift/exercises/pangram/PangramExample.swift +17 -0
- data/tracks/swift/exercises/pangram/PangramTest.swift +43 -0
- data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj +16 -0
- metadata +95 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ecd79fc11b28fd57fad197537efd30d929a39a2
|
4
|
+
data.tar.gz: a260adf3ee20c762dc65638fb762284607c54761
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b74c1f2b78cfed39a431f5bdae4fa8822008aa987087985e9c1508d3f39710aaa32460d5e168c252d745ed579d319047734a533e38766b854e12e67a92ac8ddc
|
7
|
+
data.tar.gz: 4d597f2e379ed5010ab9d881051991a20d7afe9b3200e4d8d38d6de3560727b7c096c960aa9762291255e04d45cf6034df034f7e7ff49fb66788ee070d8f215d
|
data/bin/bump-content
CHANGED
data/bin/verify-metadata
CHANGED
@@ -6,8 +6,8 @@ require_relative '../lib/trackler'
|
|
6
6
|
|
7
7
|
omissions = []
|
8
8
|
Trackler.tracks.each do |track|
|
9
|
-
track.problems.each do |
|
10
|
-
unless Trackler.problems[slug].exists?
|
9
|
+
track.problems.each do |problem|
|
10
|
+
unless Trackler.problems[problem.slug].exists?
|
11
11
|
omissions << slug
|
12
12
|
end
|
13
13
|
end
|
@@ -3,15 +3,10 @@
|
|
3
3
|
"description": "Solve the alphametics puzzle",
|
4
4
|
"cases": [
|
5
5
|
{
|
6
|
-
"description": "
|
6
|
+
"description": "puzzle with three letters",
|
7
7
|
"puzzle": "I + BB == ILL",
|
8
8
|
"expected": { "I": 1, "B": 9, "L": 0 }
|
9
9
|
},
|
10
|
-
{
|
11
|
-
"description": "solve long puzzle",
|
12
|
-
"puzzle": "SEND + MORE == MONEY",
|
13
|
-
"expected": { "S": 9, "E": 5, "N": 6, "D": 7, "M": 1, "O": 0, "R": 8, "Y": 2 }
|
14
|
-
},
|
15
10
|
{
|
16
11
|
"description": "solution must have unique value for each letter",
|
17
12
|
"puzzle": "A == B",
|
@@ -23,13 +18,28 @@
|
|
23
18
|
"expected": null
|
24
19
|
},
|
25
20
|
{
|
26
|
-
"description": "
|
21
|
+
"description": "puzzle with four letters",
|
22
|
+
"puzzle": "AS + A == MOM",
|
23
|
+
"expected": { "A": 9, "S": 2, "M": 1, "O": 0 }
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"description": "puzzle with six letters",
|
27
|
+
"puzzle": "NO + NO + TOO == LATE",
|
28
|
+
"expected": { "N": 7, "O": 4, "T": 9, "L": 1, "A": 0, "E": 2}
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"description": "puzzle with seven letters",
|
27
32
|
"puzzle": "HE + SEES + THE == LIGHT",
|
28
33
|
"expected": { "E": 4, "G": 2, "H": 5, "I": 0, "L": 1, "S": 9, "T": 7 }
|
29
34
|
},
|
30
35
|
{
|
31
|
-
"description": "
|
32
|
-
"puzzle": "
|
36
|
+
"description": "puzzle with eight letters",
|
37
|
+
"puzzle": "SEND + MORE == MONEY",
|
38
|
+
"expected": { "S": 9, "E": 5, "N": 6, "D": 7, "M": 1, "O": 0, "R": 8, "Y": 2 }
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"description": "puzzle with ten letters",
|
42
|
+
"puzzle": "AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE",
|
33
43
|
"expected": { "A": 5, "D": 3, "E": 4, "F": 7, "G": 8, "N": 0, "O": 2, "R": 1, "S": 6, "T": 9 }
|
34
44
|
}
|
35
45
|
]
|
@@ -106,7 +106,7 @@
|
|
106
106
|
{
|
107
107
|
"description": "multiple verses",
|
108
108
|
"start verse": 1,
|
109
|
-
"end verse":
|
109
|
+
"end verse": 3,
|
110
110
|
"expected": [
|
111
111
|
"I know an old lady who swallowed a fly.",
|
112
112
|
"I don't know why she swallowed the fly. Perhaps she'll die.",
|
@@ -114,6 +114,12 @@
|
|
114
114
|
"I know an old lady who swallowed a spider.",
|
115
115
|
"It wriggled and jiggled and tickled inside her.",
|
116
116
|
"She swallowed the spider to catch the fly.",
|
117
|
+
"I don't know why she swallowed the fly. Perhaps she'll die.",
|
118
|
+
"",
|
119
|
+
"I know an old lady who swallowed a bird.",
|
120
|
+
"How absurd to swallow a bird!",
|
121
|
+
"She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
|
122
|
+
"She swallowed the spider to catch the fly.",
|
117
123
|
"I don't know why she swallowed the fly. Perhaps she'll die."
|
118
124
|
]
|
119
125
|
},
|
@@ -0,0 +1,66 @@
|
|
1
|
+
{
|
2
|
+
"#": [
|
3
|
+
"The final tests of square test error conditions",
|
4
|
+
"The expection for these tests is -1, indicating an error",
|
5
|
+
"In these cases you should expect an error as is idiomatic for your language"
|
6
|
+
],
|
7
|
+
"square": {
|
8
|
+
"description": "returns the number of grains on the square",
|
9
|
+
"cases": [
|
10
|
+
{
|
11
|
+
"description": "1",
|
12
|
+
"input": 1,
|
13
|
+
"expected": 1
|
14
|
+
},
|
15
|
+
{
|
16
|
+
"description": "2",
|
17
|
+
"input": 2,
|
18
|
+
"expected": 2
|
19
|
+
},
|
20
|
+
{
|
21
|
+
"description": "3",
|
22
|
+
"input": 3,
|
23
|
+
"expected": 4
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"description": "4",
|
27
|
+
"input": 4,
|
28
|
+
"expected": 8
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"description": "16",
|
32
|
+
"input": 16,
|
33
|
+
"expected": 32768
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"description": "32",
|
37
|
+
"input": 32,
|
38
|
+
"expected": 2147483648
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"description": "64",
|
42
|
+
"input": 64,
|
43
|
+
"expected": 9223372036854775808
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"description": "square 0 raises an exception",
|
47
|
+
"input": 0,
|
48
|
+
"expected": -1
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"description": "negative square raises an exception",
|
52
|
+
"input": -1,
|
53
|
+
"expected": -1
|
54
|
+
},
|
55
|
+
{
|
56
|
+
"description": "square greater than 64 raises an exception",
|
57
|
+
"input": 65,
|
58
|
+
"expected": -1
|
59
|
+
}
|
60
|
+
]
|
61
|
+
},
|
62
|
+
"total": {
|
63
|
+
"description": "returns the total number of grains on the board",
|
64
|
+
"expected": 18446744073709551615
|
65
|
+
}
|
66
|
+
}
|
@@ -6,10 +6,9 @@
|
|
6
6
|
|
7
7
|
## Examples
|
8
8
|
|
9
|
-
- 28's factors are 2, 4, **7**, 14.
|
9
|
+
- 28's factors are 1, 2, 4, **7**, 14, 28.
|
10
10
|
- In raindrop-speak, this would be a simple "Plong".
|
11
|
-
- 30's factors are 2, **3**, **5**, 6, 15.
|
11
|
+
- 30's factors are 1, 2, **3**, **5**, 6, 15, 30.
|
12
12
|
- In raindrop-speak, this would be a "PlingPlang".
|
13
|
-
- 34
|
14
|
-
-
|
15
|
-
so it just goes with the straightforward "34".
|
13
|
+
- 34 has four factors: 1, 2, 17, and 34.
|
14
|
+
- In raindrop-speak, this would be "34".
|
@@ -8,88 +8,115 @@
|
|
8
8
|
"They're degenerate triangles with all three vertices collinear.",
|
9
9
|
"(In contrast, we will test (0, 0, 0, Illegal), as it is a point).",
|
10
10
|
|
11
|
-
"The
|
12
|
-
"
|
13
|
-
"For example, enums, variants, or tagged unions all are viable candidates.",
|
11
|
+
"The tests assert properities of the triangle are true or false.",
|
12
|
+
"See: https://github.com/exercism/x-common/issues/379 for disscussion of this approach",
|
14
13
|
|
15
|
-
"
|
16
|
-
"
|
17
|
-
|
18
|
-
"
|
19
|
-
"Otherwise, an implementation that always returns a constant value may falsely pass the tests.",
|
20
|
-
"See https://github.com/exercism/xgo/pull/208"
|
14
|
+
"How you handle invalid triangles is up to you. These tests suggest a triangle",
|
15
|
+
"is returned, but all of its properties are false. But you could also have the creation",
|
16
|
+
"of an invalid triangle return an error or exception. Choose what is idiomatic for",
|
17
|
+
"your language."
|
21
18
|
],
|
22
|
-
"
|
19
|
+
"equilateral": {
|
20
|
+
"description": "returns true if the triangle is equilateral",
|
21
|
+
"cases": [
|
23
22
|
{
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
"description": "true if all sides are equal",
|
24
|
+
"sides": [2, 2, 2],
|
25
|
+
"expected": true
|
27
26
|
},
|
28
27
|
{
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
"description": "false if any side is unequal",
|
29
|
+
"sides": [2, 3, 2],
|
30
|
+
"expected": false
|
32
31
|
},
|
33
32
|
{
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
"description": "false if no sides are equal",
|
34
|
+
"sides": [5, 4, 6],
|
35
|
+
"expected": false
|
37
36
|
},
|
38
37
|
{
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
"description": "All zero sides are illegal, so the triangle is not equilateral",
|
39
|
+
"sides": [0, 0, 0],
|
40
|
+
"expected": false
|
42
41
|
},
|
43
42
|
{
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
"#": "Your track may choose to skip this test and deal only with integers if appropriate",
|
44
|
+
"description": "sides may be floats",
|
45
|
+
"sides": [0.5, 0.5, 0.5],
|
46
|
+
"expected": true
|
47
|
+
}
|
48
|
+
]
|
49
|
+
},
|
50
|
+
"isosceles": {
|
51
|
+
"description": "returns true if the triangle is isosceles",
|
52
|
+
"cases": [
|
53
|
+
{
|
54
|
+
"description": "true if last two sides are equal",
|
55
|
+
"sides": [3, 4, 4],
|
56
|
+
"expected": true
|
47
57
|
},
|
48
58
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
59
|
+
"description": "true if first two sides are equal",
|
60
|
+
"sides": [4, 4, 3],
|
61
|
+
"expected": true
|
52
62
|
},
|
53
63
|
{
|
54
|
-
|
55
|
-
|
56
|
-
|
64
|
+
"description": "true if first and last sides are equal",
|
65
|
+
"sides": [4, 3, 4],
|
66
|
+
"expected": true
|
57
67
|
},
|
58
68
|
{
|
59
|
-
|
60
|
-
|
61
|
-
|
69
|
+
"description": "equilateral triangles are also isosceles",
|
70
|
+
"sides": [4, 4, 4],
|
71
|
+
"expected": true
|
62
72
|
},
|
63
73
|
{
|
64
|
-
|
65
|
-
|
66
|
-
|
74
|
+
"description": "false if no sides are equal",
|
75
|
+
"sides": [2, 3, 4],
|
76
|
+
"expected": false
|
67
77
|
},
|
68
78
|
{
|
69
|
-
|
70
|
-
|
71
|
-
|
79
|
+
"description": "Sides that violate triangle inequality are not isosceles, even if two are equal",
|
80
|
+
"sides": [1, 1, 3],
|
81
|
+
"expected": false
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"#": "Your track may choose to skip this test and deal only with integers if appropriate",
|
85
|
+
"description": "sides may be floats",
|
86
|
+
"sides": [0.5, 0.4, 0.5],
|
87
|
+
"expected": true
|
88
|
+
}
|
89
|
+
]
|
90
|
+
},
|
91
|
+
"scalene": {
|
92
|
+
"description": "returns true if the triangle is scalene",
|
93
|
+
"cases": [
|
94
|
+
{
|
95
|
+
"description": "true if no sides are equal",
|
96
|
+
"sides": [5, 4, 6],
|
97
|
+
"expected": true
|
72
98
|
},
|
73
99
|
{
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
"expected": "scalene"
|
100
|
+
"description": "false if all sides are equal",
|
101
|
+
"sides": [4, 4, 4],
|
102
|
+
"expected": false
|
78
103
|
},
|
79
104
|
{
|
80
|
-
|
81
|
-
|
82
|
-
|
105
|
+
"description": "false if two sides are equal",
|
106
|
+
"sides": [4, 4, 3],
|
107
|
+
"expected": false
|
83
108
|
},
|
84
109
|
{
|
85
|
-
|
86
|
-
|
87
|
-
|
110
|
+
"description": "Sides that violate triangle inequality are not scalene, even if they are all different",
|
111
|
+
"sides": [7, 3, 2],
|
112
|
+
"expected": false
|
88
113
|
},
|
89
114
|
{
|
90
|
-
|
91
|
-
|
92
|
-
|
115
|
+
"#": "Your track may choose to skip this test and deal only with integers if appropriate",
|
116
|
+
"description": "sides may be floats",
|
117
|
+
"sides": [0.5, 0.4, 0.6],
|
118
|
+
"expected": true
|
93
119
|
}
|
94
|
-
|
120
|
+
]
|
121
|
+
}
|
95
122
|
}
|
data/lib/trackler/version.rb
CHANGED
data/tracks/c/config.json
CHANGED
@@ -4,25 +4,6 @@
|
|
4
4
|
"repository": "https://github.com/exercism/xc",
|
5
5
|
"checklist_issue": 8,
|
6
6
|
"active": false,
|
7
|
-
"problems": [
|
8
|
-
"hello-world",
|
9
|
-
"anagram",
|
10
|
-
"leap",
|
11
|
-
"gigasecond",
|
12
|
-
"hamming",
|
13
|
-
"raindrops",
|
14
|
-
"bob",
|
15
|
-
"grains",
|
16
|
-
"largest-series-product",
|
17
|
-
"pangram",
|
18
|
-
"nth-prime",
|
19
|
-
"beer-song",
|
20
|
-
"rna-transcription",
|
21
|
-
"difference-of-squares",
|
22
|
-
"sum-of-multiples",
|
23
|
-
"binary-search",
|
24
|
-
"roman-numerals"
|
25
|
-
],
|
26
7
|
"exercises": [{
|
27
8
|
"slug": "hello-world",
|
28
9
|
"difficulty": 1,
|
@@ -155,6 +136,32 @@
|
|
155
136
|
"control-flow (loops)",
|
156
137
|
"strings"
|
157
138
|
]
|
139
|
+
}, {
|
140
|
+
"slug": "allergies",
|
141
|
+
"difficulty": 4,
|
142
|
+
"topics": [
|
143
|
+
"control-flow (if-statements)",
|
144
|
+
"control-flow (loops)",
|
145
|
+
"structs",
|
146
|
+
"memory management"
|
147
|
+
]
|
148
|
+
}, {
|
149
|
+
"difficulty": 5,
|
150
|
+
"slug": "atbash-cipher",
|
151
|
+
"topics": [
|
152
|
+
"control-flow (loops)",
|
153
|
+
"control-flow (if-else statements)",
|
154
|
+
"strings"
|
155
|
+
]
|
156
|
+
}, {
|
157
|
+
"difficulty": 4,
|
158
|
+
"slug": "phone-number",
|
159
|
+
"topics": [
|
160
|
+
"strings",
|
161
|
+
"memory management",
|
162
|
+
"control-flow (loops)",
|
163
|
+
"control-flow (if-else statements)"
|
164
|
+
]
|
158
165
|
}],
|
159
166
|
"deprecated": [
|
160
167
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
CFLAGS = -std=c99
|
2
|
+
CFLAGS += -Wall
|
3
|
+
CFLAGS += -Wextra
|
4
|
+
CFLAGS += -pedantic
|
5
|
+
CFLAGS += -Werror
|
6
|
+
|
7
|
+
test: tests.out
|
8
|
+
@./tests.out
|
9
|
+
|
10
|
+
clean:
|
11
|
+
rm -f *.o *.out
|
12
|
+
|
13
|
+
tests.out: test/test_allergies.c src/allergies.c src/allergies.h
|
14
|
+
@echo Compiling $@
|
15
|
+
@cc $(CFLAGS) src/allergies.c test/vendor/unity.c test/test_allergies.c -o tests.out
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#ifndef _ALLERGIES_H
|
2
|
+
#define _ALLERGIES_H
|
3
|
+
|
4
|
+
typedef enum {
|
5
|
+
Allergen_Eggs = 0,
|
6
|
+
Allergen_Peanuts,
|
7
|
+
Allergen_Shellfish,
|
8
|
+
Allergen_Strawberries,
|
9
|
+
Allergen_Tomatoes,
|
10
|
+
Allergen_Chocolate,
|
11
|
+
Allergen_Pollen,
|
12
|
+
Allergen_Cats,
|
13
|
+
Allergen_Count
|
14
|
+
} Allergen_t;
|
15
|
+
|
16
|
+
typedef struct {
|
17
|
+
int count;
|
18
|
+
Allergen_t *allergens;
|
19
|
+
} Allergen_List_t;
|
20
|
+
|
21
|
+
#endif
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#include "allergies.h"
|
2
|
+
#include <stdlib.h>
|
3
|
+
|
4
|
+
static const unsigned int scores[] = {
|
5
|
+
1,
|
6
|
+
2,
|
7
|
+
4,
|
8
|
+
8,
|
9
|
+
16,
|
10
|
+
32,
|
11
|
+
64,
|
12
|
+
128
|
13
|
+
};
|
14
|
+
|
15
|
+
bool is_allergic_to(Allergen_t allergen, unsigned int score)
|
16
|
+
{
|
17
|
+
return ((score & scores[allergen]) == scores[allergen]);
|
18
|
+
}
|
19
|
+
|
20
|
+
void get_allergens(unsigned int score, Allergen_List_t * list)
|
21
|
+
{
|
22
|
+
list->allergens = calloc(Allergen_Count, sizeof(Allergen_t));
|
23
|
+
list->count = 0;
|
24
|
+
|
25
|
+
for (Allergen_t allergen = 0; allergen < Allergen_Count; allergen++) {
|
26
|
+
if (is_allergic_to(allergen, score)) {
|
27
|
+
score -= scores[allergen];
|
28
|
+
list->allergens[list->count] = allergen;
|
29
|
+
list->count++;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#ifndef _ALLERGIES_H
|
2
|
+
#define _ALLERGIES_H
|
3
|
+
|
4
|
+
#include <stdbool.h>
|
5
|
+
|
6
|
+
typedef enum {
|
7
|
+
Allergen_Eggs = 0,
|
8
|
+
Allergen_Peanuts,
|
9
|
+
Allergen_Shellfish,
|
10
|
+
Allergen_Strawberries,
|
11
|
+
Allergen_Tomatoes,
|
12
|
+
Allergen_Chocolate,
|
13
|
+
Allergen_Pollen,
|
14
|
+
Allergen_Cats,
|
15
|
+
Allergen_Count
|
16
|
+
} Allergen_t;
|
17
|
+
|
18
|
+
typedef struct {
|
19
|
+
int count;
|
20
|
+
Allergen_t *allergens;
|
21
|
+
} Allergen_List_t;
|
22
|
+
|
23
|
+
bool is_allergic_to(Allergen_t allergen, unsigned int score);
|
24
|
+
void get_allergens(unsigned int score, Allergen_List_t * list);
|
25
|
+
|
26
|
+
#endif
|