trackler 2.2.1.109 → 2.2.1.110
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +2 -0
- data/tracks/clojure/exercises/armstrong-numbers/test/armstrong_numbers_test.clj +1 -1
- data/tracks/elixir/.formatter.exs +3 -0
- data/tracks/elixir/exercises/accumulate/accumulate_test.exs +8 -8
- data/tracks/elixir/exercises/acronym/acronym_test.exs +2 -2
- data/tracks/elixir/exercises/acronym/example.exs +3 -4
- data/tracks/elixir/exercises/all-your-base/all-your-base-test.exs +2 -2
- data/tracks/elixir/exercises/all-your-base/example.exs +14 -7
- data/tracks/elixir/exercises/allergies/allergies.exs +2 -4
- data/tracks/elixir/exercises/allergies/allergies_test.exs +17 -11
- data/tracks/elixir/exercises/anagram/anagram.exs +1 -2
- data/tracks/elixir/exercises/anagram/anagram_test.exs +13 -13
- data/tracks/elixir/exercises/anagram/example.exs +2 -1
- data/tracks/elixir/exercises/atbash-cipher/atbash_cipher.exs +2 -2
- data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +2 -2
- data/tracks/elixir/exercises/bank-account/bank_account_test.exs +10 -5
- data/tracks/elixir/exercises/beer-song/beer_song.exs +2 -2
- data/tracks/elixir/exercises/beer-song/beer_song_test.exs +225 -225
- data/tracks/elixir/exercises/beer-song/example.exs +5 -3
- data/tracks/elixir/exercises/binary-search-tree/binary_search_tree_test.exs +2 -2
- data/tracks/elixir/exercises/binary-search-tree/example.exs +1 -1
- data/tracks/elixir/exercises/binary-search/binary_search.exs +0 -1
- data/tracks/elixir/exercises/binary-search/binary_search_test.exs +2 -2
- data/tracks/elixir/exercises/binary-search/example.exs +3 -1
- data/tracks/elixir/exercises/binary/binary.exs +1 -1
- data/tracks/elixir/exercises/binary/binary_test.exs +2 -2
- data/tracks/elixir/exercises/binary/example.exs +2 -2
- data/tracks/elixir/exercises/bob/bob.exs +1 -2
- data/tracks/elixir/exercises/bob/bob_test.exs +2 -2
- data/tracks/elixir/exercises/bowling/bowling.exs +2 -3
- data/tracks/elixir/exercises/bowling/bowling_test.exs +54 -275
- data/tracks/elixir/exercises/bowling/example.exs +24 -10
- data/tracks/elixir/exercises/bracket-push/bracket_push.exs +1 -2
- data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +5 -3
- data/tracks/elixir/exercises/bracket-push/example.exs +8 -3
- data/tracks/elixir/exercises/change/change.exs +1 -2
- data/tracks/elixir/exercises/change/change_test.exs +2 -2
- data/tracks/elixir/exercises/change/example.exs +5 -1
- data/tracks/elixir/exercises/clock/clock_test.exs +8 -8
- data/tracks/elixir/exercises/clock/example.exs +5 -3
- data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture.exs +0 -1
- data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture_test.exs +3 -3
- data/tracks/elixir/exercises/collatz-conjecture/example.exs +1 -1
- data/tracks/elixir/exercises/connect/connect.exs +1 -2
- data/tracks/elixir/exercises/connect/connect_test.exs +40 -30
- data/tracks/elixir/exercises/connect/example.exs +12 -10
- data/tracks/elixir/exercises/crypto-square/crypto_square.exs +1 -2
- data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +2 -2
- data/tracks/elixir/exercises/crypto-square/example.exs +6 -5
- data/tracks/elixir/exercises/custom-set/custom_set.exs +1 -1
- data/tracks/elixir/exercises/custom-set/custom_set_test.exs +2 -2
- data/tracks/elixir/exercises/custom-set/example.exs +5 -4
- data/tracks/elixir/exercises/diamond/diamond.exs +1 -2
- data/tracks/elixir/exercises/diamond/diamond_test.exs +20 -18
- data/tracks/elixir/exercises/diamond/example.exs +10 -10
- data/tracks/elixir/exercises/difference-of-squares/difference_of_squares.exs +1 -5
- data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +5 -6
- data/tracks/elixir/exercises/difference-of-squares/example.exs +3 -4
- data/tracks/elixir/exercises/diffie-hellman/diffie_hellman.exs +7 -3
- data/tracks/elixir/exercises/diffie-hellman/diffie_hellman_test.exs +43 -23
- data/tracks/elixir/exercises/diffie-hellman/example.exs +10 -6
- data/tracks/elixir/exercises/dominoes/dominoes.exs +0 -1
- data/tracks/elixir/exercises/dominoes/dominoes_test.exs +16 -6
- data/tracks/elixir/exercises/dominoes/example.exs +9 -5
- data/tracks/elixir/exercises/dot-dsl/dot.exs +0 -1
- data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +107 -58
- data/tracks/elixir/exercises/dot-dsl/example.exs +18 -10
- data/tracks/elixir/exercises/etl/etl.exs +0 -1
- data/tracks/elixir/exercises/etl/etl_test.exs +34 -13
- data/tracks/elixir/exercises/etl/example.exs +6 -6
- data/tracks/elixir/exercises/flatten-array/flatten_array.exs +0 -1
- data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +8 -8
- data/tracks/elixir/exercises/forth/example.exs +5 -5
- data/tracks/elixir/exercises/forth/forth.exs +6 -9
- data/tracks/elixir/exercises/forth/forth_test.exs +107 -64
- data/tracks/elixir/exercises/gigasecond/example.exs +1 -1
- data/tracks/elixir/exercises/gigasecond/gigasecond.exs +2 -2
- data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +2 -2
- data/tracks/elixir/exercises/grade-school/example.exs +3 -3
- data/tracks/elixir/exercises/grade-school/grade_school_test.exs +26 -22
- data/tracks/elixir/exercises/grade-school/school.exs +3 -6
- data/tracks/elixir/exercises/grains/example.exs +10 -3
- data/tracks/elixir/exercises/grains/grains.exs +0 -2
- data/tracks/elixir/exercises/grains/grains_test.exs +16 -14
- data/tracks/elixir/exercises/grep/example.exs +22 -18
- data/tracks/elixir/exercises/grep/grep.exs +1 -2
- data/tracks/elixir/exercises/grep/grep_test.exs +108 -112
- data/tracks/elixir/exercises/hamming/example.exs +3 -2
- data/tracks/elixir/exercises/hamming/hamming_test.exs +7 -4
- data/tracks/elixir/exercises/hello-world/example.exs +1 -1
- data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
- data/tracks/elixir/exercises/hello-world/hello_world_test.exs +2 -2
- data/tracks/elixir/exercises/hexadecimal/example.exs +8 -7
- data/tracks/elixir/exercises/hexadecimal/hexadecimal.exs +0 -1
- data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +3 -3
- data/tracks/elixir/exercises/isbn-verifier/example.exs +1 -1
- data/tracks/elixir/exercises/isbn-verifier/isbn_verifier.exs +1 -2
- data/tracks/elixir/exercises/isbn-verifier/isbn_verifier_test.exs +2 -2
- data/tracks/elixir/exercises/isogram/example.exs +5 -5
- data/tracks/elixir/exercises/isogram/isogram.exs +1 -3
- data/tracks/elixir/exercises/isogram/isogram_test.exs +2 -3
- data/tracks/elixir/exercises/kindergarten-garden/example.exs +15 -3
- data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +17 -4
- data/tracks/elixir/exercises/largest-series-product/example.exs +10 -9
- data/tracks/elixir/exercises/largest-series-product/largest_series_product.exs +1 -3
- data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +6 -4
- data/tracks/elixir/exercises/leap/example.exs +2 -2
- data/tracks/elixir/exercises/leap/leap.exs +0 -1
- data/tracks/elixir/exercises/leap/leap_test.exs +2 -2
- data/tracks/elixir/exercises/list-ops/example.exs +10 -9
- data/tracks/elixir/exercises/list-ops/list_ops.exs +1 -8
- data/tracks/elixir/exercises/list-ops/list_ops_test.exs +22 -25
- data/tracks/elixir/exercises/luhn/example.exs +16 -17
- data/tracks/elixir/exercises/luhn/luhn.exs +0 -2
- data/tracks/elixir/exercises/luhn/luhn_test.exs +2 -2
- data/tracks/elixir/exercises/markdown/example.exs +40 -14
- data/tracks/elixir/exercises/markdown/markdown.exs +8 -4
- data/tracks/elixir/exercises/markdown/markdown_test.exs +6 -3
- data/tracks/elixir/exercises/matrix/example.exs +6 -6
- data/tracks/elixir/exercises/matrix/matrix.exs +0 -1
- data/tracks/elixir/exercises/matrix/matrix_test.exs +11 -11
- data/tracks/elixir/exercises/meetup/example.exs +20 -13
- data/tracks/elixir/exercises/meetup/meetup.exs +8 -4
- data/tracks/elixir/exercises/meetup/meetup_test.exs +2 -2
- data/tracks/elixir/exercises/minesweeper/minesweeper.exs +1 -3
- data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +7 -21
- data/tracks/elixir/exercises/nth-prime/example.exs +7 -7
- data/tracks/elixir/exercises/nth-prime/nth_prime.exs +0 -1
- data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +3 -3
- data/tracks/elixir/exercises/nucleotide-count/example.exs +4 -3
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count.exs +0 -3
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +2 -2
- data/tracks/elixir/exercises/ocr-numbers/example.exs +3 -3
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers.exs +1 -2
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers_test.exs +54 -70
- data/tracks/elixir/exercises/palindrome-products/example.exs +3 -6
- data/tracks/elixir/exercises/palindrome-products/palindrome_products.exs +0 -1
- data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +8 -8
- data/tracks/elixir/exercises/pangram/pangram.exs +1 -1
- data/tracks/elixir/exercises/pangram/pangram_test.exs +5 -3
- data/tracks/elixir/exercises/parallel-letter-frequency/example.exs +7 -5
- data/tracks/elixir/exercises/parallel-letter-frequency/frequency.exs +1 -2
- data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +3 -4
- data/tracks/elixir/exercises/pascals-triangle/example.exs +2 -1
- data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +26 -8
- data/tracks/elixir/exercises/perfect-numbers/example.exs +8 -6
- data/tracks/elixir/exercises/perfect-numbers/perfect_numbers.exs +1 -2
- data/tracks/elixir/exercises/perfect-numbers/perfect_numbers_test.exs +18 -17
- data/tracks/elixir/exercises/phone-number/example.exs +19 -11
- data/tracks/elixir/exercises/phone-number/phone_number.exs +3 -3
- data/tracks/elixir/exercises/phone-number/phone_number_test.exs +2 -2
- data/tracks/elixir/exercises/pig-latin/pig_latin.exs +0 -1
- data/tracks/elixir/exercises/pig-latin/pig_latin_test.exs +3 -3
- data/tracks/elixir/exercises/poker/example.exs +104 -41
- data/tracks/elixir/exercises/poker/poker.exs +0 -1
- data/tracks/elixir/exercises/poker/poker_test.exs +7 -5
- data/tracks/elixir/exercises/prime-factors/example.exs +4 -8
- data/tracks/elixir/exercises/prime-factors/prime_factors.exs +0 -1
- data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +5 -5
- data/tracks/elixir/exercises/protein-translation/example.exs +14 -12
- data/tracks/elixir/exercises/protein-translation/protein_translation.exs +2 -3
- data/tracks/elixir/exercises/protein-translation/protein_translation_test.exs +26 -26
- data/tracks/elixir/exercises/pythagorean-triplet/example.exs +5 -4
- data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet.exs +0 -5
- data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +3 -3
- data/tracks/elixir/exercises/queen-attack/example.exs +9 -7
- data/tracks/elixir/exercises/queen-attack/queen_attack.exs +1 -4
- data/tracks/elixir/exercises/rail-fence-cipher/example.exs +18 -15
- data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher.exs +2 -4
- data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +2 -2
- data/tracks/elixir/exercises/raindrops/example.exs +3 -2
- data/tracks/elixir/exercises/raindrops/raindrops.exs +1 -2
- data/tracks/elixir/exercises/raindrops/raindrops_test.exs +2 -2
- data/tracks/elixir/exercises/rna-transcription/example.exs +1 -1
- data/tracks/elixir/exercises/rna-transcription/rna_transcription.exs +0 -1
- data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +2 -2
- data/tracks/elixir/exercises/robot-simulator/example.exs +33 -19
- data/tracks/elixir/exercises/robot-simulator/robot_simulator.exs +3 -5
- data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +26 -25
- data/tracks/elixir/exercises/roman-numerals/example.exs +14 -13
- data/tracks/elixir/exercises/roman-numerals/roman.exs +1 -1
- data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +2 -2
- data/tracks/elixir/exercises/rotational-cipher/example.exs +12 -8
- data/tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs +0 -1
- data/tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs +6 -4
- data/tracks/elixir/exercises/run-length-encoding/example.exs +20 -8
- data/tracks/elixir/exercises/run-length-encoding/rle.exs +2 -4
- data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -4
- data/tracks/elixir/exercises/saddle-points/example.exs +4 -3
- data/tracks/elixir/exercises/saddle-points/saddle_points.exs +0 -3
- data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +2 -2
- data/tracks/elixir/exercises/say/say.exs +1 -1
- data/tracks/elixir/exercises/say/say_test.exs +5 -3
- data/tracks/elixir/exercises/scale-generator/example.exs +20 -9
- data/tracks/elixir/exercises/scale-generator/scale_generator.exs +2 -2
- data/tracks/elixir/exercises/scale-generator/scale_generator_test.exs +16 -17
- data/tracks/elixir/exercises/scrabble-score/scrabble.exs +1 -2
- data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +2 -2
- data/tracks/elixir/exercises/secret-handshake/example.exs +4 -4
- data/tracks/elixir/exercises/secret-handshake/secret_handshake.exs +0 -1
- data/tracks/elixir/exercises/secret-handshake/secret_handshake_test.exs +3 -3
- data/tracks/elixir/exercises/series/example.exs +2 -2
- data/tracks/elixir/exercises/series/series.exs +0 -1
- data/tracks/elixir/exercises/series/series_test.exs +3 -4
- data/tracks/elixir/exercises/sieve/example.exs +4 -5
- data/tracks/elixir/exercises/sieve/sieve.exs +0 -3
- data/tracks/elixir/exercises/sieve/sieve_test.exs +173 -21
- data/tracks/elixir/exercises/simple-cipher/example.exs +8 -8
- data/tracks/elixir/exercises/simple-cipher/simple_cipher.exs +0 -1
- data/tracks/elixir/exercises/simple-cipher/simple_cipher_test.exs +3 -4
- data/tracks/elixir/exercises/simple-linked-list/example.exs +3 -1
- data/tracks/elixir/exercises/simple-linked-list/linked_list_test.exs +5 -2
- data/tracks/elixir/exercises/space-age/example.exs +5 -6
- data/tracks/elixir/exercises/space-age/space_age.exs +9 -3
- data/tracks/elixir/exercises/space-age/space_age_test.exs +2 -2
- data/tracks/elixir/exercises/spiral-matrix/example.exs +10 -5
- data/tracks/elixir/exercises/spiral-matrix/spiral.exs +0 -1
- data/tracks/elixir/exercises/spiral-matrix/spiral_test.exs +21 -21
- data/tracks/elixir/exercises/strain/example.exs +5 -4
- data/tracks/elixir/exercises/strain/strain.exs +2 -2
- data/tracks/elixir/exercises/strain/strain_test.exs +12 -7
- data/tracks/elixir/exercises/sublist/example.exs +11 -7
- data/tracks/elixir/exercises/sublist/sublist.exs +0 -1
- data/tracks/elixir/exercises/sublist/sublist_test.exs +16 -18
- data/tracks/elixir/exercises/sum-of-multiples/example.exs +3 -4
- data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples.exs +0 -1
- data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +4 -4
- data/tracks/elixir/exercises/test_helper.exs +4 -4
- data/tracks/elixir/exercises/tournament/example.exs +20 -13
- data/tracks/elixir/exercises/tournament/tournament.exs +0 -1
- data/tracks/elixir/exercises/tournament/tournament_test.exs +37 -30
- data/tracks/elixir/exercises/transpose/example.exs +4 -4
- data/tracks/elixir/exercises/transpose/transpose.exs +1 -1
- data/tracks/elixir/exercises/transpose/transpose_test.exs +89 -156
- data/tracks/elixir/exercises/triangle/example.exs +7 -7
- data/tracks/elixir/exercises/triangle/triangle.exs +1 -2
- data/tracks/elixir/exercises/triangle/triangle_test.exs +17 -17
- data/tracks/elixir/exercises/twelve-days/example.exs +10 -6
- data/tracks/elixir/exercises/twelve-days/twelve_days.exs +1 -2
- data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +55 -45
- data/tracks/elixir/exercises/word-count/example.exs +5 -5
- data/tracks/elixir/exercises/word-count/word_count.exs +1 -2
- data/tracks/elixir/exercises/word-count/word_count_test.exs +5 -5
- data/tracks/elixir/exercises/wordy/example.exs +13 -14
- data/tracks/elixir/exercises/wordy/wordy.exs +1 -4
- data/tracks/elixir/exercises/wordy/wordy_test.exs +2 -2
- data/tracks/elixir/exercises/zipper/example.exs +48 -37
- data/tracks/elixir/exercises/zipper/zipper.exs +20 -14
- data/tracks/elixir/exercises/zipper/zipper_test.exs +19 -20
- data/tracks/go/.travis.yml +1 -1
- data/tracks/go/exercises/paasio/paasio_test.go +76 -0
- data/tracks/ocaml/exercises/acronym/test.ml +3 -5
- data/tracks/ocaml/exercises/all-your-base/test.ml +2 -2
- data/tracks/ocaml/exercises/anagram/test.ml +1 -9
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
- data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
- data/tracks/ocaml/exercises/bob/test.ml +1 -1
- data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
- data/tracks/ocaml/exercises/connect/test.ml +1 -1
- data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
- data/tracks/ocaml/exercises/leap/test.ml +2 -2
- data/tracks/ocaml/exercises/luhn/test.ml +2 -2
- data/tracks/ocaml/exercises/pangram/test.ml +1 -1
- data/tracks/ocaml/exercises/phone-number/test.ml +7 -3
- data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
- data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
- data/tracks/ocaml/exercises/react/example.ml +1 -1
- data/tracks/ocaml/exercises/roman-numerals/test.ml +3 -1
- data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
- data/tracks/ocaml/exercises/space-age/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/test.ml +1 -1
- data/tracks/swift/circle.yml +21 -2
- metadata +3 -2
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("scrabble.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule ScrabbleScoreTest do
|
9
9
|
use ExUnit.Case
|
@@ -20,8 +20,8 @@ defmodule SecretHandshake do
|
|
20
20
|
@spec commands(code :: integer) :: list(String.t())
|
21
21
|
def commands(code) do
|
22
22
|
@codes
|
23
|
-
|> Enum.with_index
|
24
|
-
|> Enum.map(fn {command, i} -> {
|
23
|
+
|> Enum.with_index()
|
24
|
+
|> Enum.map(fn {command, i} -> {command, 2 <<< (i - 1)} end)
|
25
25
|
|> decode_commands(code, [])
|
26
26
|
end
|
27
27
|
|
@@ -31,7 +31,8 @@ defmodule SecretHandshake do
|
|
31
31
|
_ -> Enum.reverse(results)
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
|
+
defp decode_commands([{command, flag} | flags], code, results) do
|
35
36
|
case flag_set(code, flag) do
|
36
37
|
true -> decode_commands(flags, code, [command | results])
|
37
38
|
_ -> decode_commands(flags, code, results)
|
@@ -40,4 +41,3 @@ defmodule SecretHandshake do
|
|
40
41
|
|
41
42
|
defp flag_set(flags, flag_to_check), do: (flags &&& flag_to_check) == flag_to_check
|
42
43
|
end
|
43
|
-
|
@@ -2,14 +2,14 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("secret_handshake.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(trace: true, exclude: :pending)
|
7
7
|
|
8
8
|
defmodule SecretHandshakeTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
11
|
describe "Create a handshake for a number" do
|
12
|
-
|
12
|
+
# @tag :pending
|
13
13
|
test "wink for 1" do
|
14
14
|
assert SecretHandshake.commands(1) == ["wink"]
|
15
15
|
end
|
@@ -6,8 +6,8 @@ defmodule StringSeries do
|
|
6
6
|
"""
|
7
7
|
@spec slices(s :: String.t(), size :: integer) :: list(String.t())
|
8
8
|
def slices(_s, size) when size < 1, do: []
|
9
|
+
|
9
10
|
def slices(s, size) do
|
10
|
-
s |> String.graphemes |> Enum.chunk(size, 1) |> Enum.map(&Enum.join/1)
|
11
|
+
s |> String.graphemes() |> Enum.chunk(size, 1) |> Enum.map(&Enum.join/1)
|
11
12
|
end
|
12
13
|
end
|
13
|
-
|
@@ -2,13 +2,13 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("series.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule StringSeriesTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
|
-
|
11
|
+
# @tag :pending
|
12
12
|
test "slices of size 1" do
|
13
13
|
assert StringSeries.slices("01234", 1) == ["0", "1", "2", "3", "4"]
|
14
14
|
end
|
@@ -50,4 +50,3 @@ defmodule StringSeriesTest do
|
|
50
50
|
assert StringSeries.slices("01234", 0) == []
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
@@ -1,17 +1,16 @@
|
|
1
1
|
defmodule Sieve do
|
2
|
-
|
3
2
|
@doc """
|
4
3
|
Generates a list of primes up to a given limit.
|
5
4
|
"""
|
6
5
|
@spec primes_to(non_neg_integer) :: [non_neg_integer]
|
7
6
|
def primes_to(limit) do
|
8
|
-
Enum.to_list(2..limit) |> do_primes([]) |> Enum.reverse
|
7
|
+
Enum.to_list(2..limit) |> do_primes([]) |> Enum.reverse()
|
9
8
|
end
|
10
9
|
|
11
10
|
defp do_primes([], primes), do: primes
|
12
|
-
|
11
|
+
|
12
|
+
defp do_primes([candidate | rest], primes) do
|
13
13
|
candidates = Enum.reject(rest, &(rem(&1, candidate) == 0))
|
14
|
-
do_primes(candidates, [
|
14
|
+
do_primes(candidates, [candidate | primes])
|
15
15
|
end
|
16
|
-
|
17
16
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("sieve.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule SieveTest do
|
9
9
|
use ExUnit.Case
|
@@ -15,25 +15,177 @@ defmodule SieveTest do
|
|
15
15
|
|
16
16
|
@tag :pending
|
17
17
|
test "primes to 1000" do
|
18
|
-
result = [
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
18
|
+
result = [
|
19
|
+
2,
|
20
|
+
3,
|
21
|
+
5,
|
22
|
+
7,
|
23
|
+
11,
|
24
|
+
13,
|
25
|
+
17,
|
26
|
+
19,
|
27
|
+
23,
|
28
|
+
29,
|
29
|
+
31,
|
30
|
+
37,
|
31
|
+
41,
|
32
|
+
43,
|
33
|
+
47,
|
34
|
+
53,
|
35
|
+
59,
|
36
|
+
61,
|
37
|
+
67,
|
38
|
+
71,
|
39
|
+
73,
|
40
|
+
79,
|
41
|
+
83,
|
42
|
+
89,
|
43
|
+
97,
|
44
|
+
101,
|
45
|
+
103,
|
46
|
+
107,
|
47
|
+
109,
|
48
|
+
113,
|
49
|
+
127,
|
50
|
+
131,
|
51
|
+
137,
|
52
|
+
139,
|
53
|
+
149,
|
54
|
+
151,
|
55
|
+
157,
|
56
|
+
163,
|
57
|
+
167,
|
58
|
+
173,
|
59
|
+
179,
|
60
|
+
181,
|
61
|
+
191,
|
62
|
+
193,
|
63
|
+
197,
|
64
|
+
199,
|
65
|
+
211,
|
66
|
+
223,
|
67
|
+
227,
|
68
|
+
229,
|
69
|
+
233,
|
70
|
+
239,
|
71
|
+
241,
|
72
|
+
251,
|
73
|
+
257,
|
74
|
+
263,
|
75
|
+
269,
|
76
|
+
271,
|
77
|
+
277,
|
78
|
+
281,
|
79
|
+
283,
|
80
|
+
293,
|
81
|
+
307,
|
82
|
+
311,
|
83
|
+
313,
|
84
|
+
317,
|
85
|
+
331,
|
86
|
+
337,
|
87
|
+
347,
|
88
|
+
349,
|
89
|
+
353,
|
90
|
+
359,
|
91
|
+
367,
|
92
|
+
373,
|
93
|
+
379,
|
94
|
+
383,
|
95
|
+
389,
|
96
|
+
397,
|
97
|
+
401,
|
98
|
+
409,
|
99
|
+
419,
|
100
|
+
421,
|
101
|
+
431,
|
102
|
+
433,
|
103
|
+
439,
|
104
|
+
443,
|
105
|
+
449,
|
106
|
+
457,
|
107
|
+
461,
|
108
|
+
463,
|
109
|
+
467,
|
110
|
+
479,
|
111
|
+
487,
|
112
|
+
491,
|
113
|
+
499,
|
114
|
+
503,
|
115
|
+
509,
|
116
|
+
521,
|
117
|
+
523,
|
118
|
+
541,
|
119
|
+
547,
|
120
|
+
557,
|
121
|
+
563,
|
122
|
+
569,
|
123
|
+
571,
|
124
|
+
577,
|
125
|
+
587,
|
126
|
+
593,
|
127
|
+
599,
|
128
|
+
601,
|
129
|
+
607,
|
130
|
+
613,
|
131
|
+
617,
|
132
|
+
619,
|
133
|
+
631,
|
134
|
+
641,
|
135
|
+
643,
|
136
|
+
647,
|
137
|
+
653,
|
138
|
+
659,
|
139
|
+
661,
|
140
|
+
673,
|
141
|
+
677,
|
142
|
+
683,
|
143
|
+
691,
|
144
|
+
701,
|
145
|
+
709,
|
146
|
+
719,
|
147
|
+
727,
|
148
|
+
733,
|
149
|
+
739,
|
150
|
+
743,
|
151
|
+
751,
|
152
|
+
757,
|
153
|
+
761,
|
154
|
+
769,
|
155
|
+
773,
|
156
|
+
787,
|
157
|
+
797,
|
158
|
+
809,
|
159
|
+
811,
|
160
|
+
821,
|
161
|
+
823,
|
162
|
+
827,
|
163
|
+
829,
|
164
|
+
839,
|
165
|
+
853,
|
166
|
+
857,
|
167
|
+
859,
|
168
|
+
863,
|
169
|
+
877,
|
170
|
+
881,
|
171
|
+
883,
|
172
|
+
887,
|
173
|
+
907,
|
174
|
+
911,
|
175
|
+
919,
|
176
|
+
929,
|
177
|
+
937,
|
178
|
+
941,
|
179
|
+
947,
|
180
|
+
953,
|
181
|
+
967,
|
182
|
+
971,
|
183
|
+
977,
|
184
|
+
983,
|
185
|
+
991,
|
186
|
+
997
|
187
|
+
]
|
188
|
+
|
36
189
|
assert Sieve.primes_to(1000) == result
|
37
190
|
end
|
38
|
-
|
39
191
|
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
defmodule SimpleCipher do
|
2
|
-
@alphabet "abcdefghijklmnopqrstuvwxyz" |> String.graphemes
|
2
|
+
@alphabet "abcdefghijklmnopqrstuvwxyz" |> String.graphemes()
|
3
3
|
@alphabet_size @alphabet |> length
|
4
4
|
|
5
5
|
for key_char <- @alphabet do
|
6
|
-
shifted_alphabet =
|
7
|
-
|
8
|
-
|
6
|
+
shifted_alphabet =
|
7
|
+
Stream.cycle(@alphabet)
|
8
|
+
|> Stream.drop_while(&(&1 != key_char))
|
9
|
+
|> Enum.take(@alphabet_size)
|
9
10
|
|
10
|
-
for {
|
11
|
+
for {plain, cipher} <- Enum.zip(@alphabet, shifted_alphabet) do
|
11
12
|
defp encode_char(unquote(plain), unquote(key_char)), do: unquote(cipher)
|
12
13
|
defp decode_char(unquote(cipher), unquote(key_char)), do: unquote(plain)
|
13
14
|
end
|
@@ -69,12 +70,11 @@ defmodule SimpleCipher do
|
|
69
70
|
end
|
70
71
|
|
71
72
|
defp convert_keystream(text, key, converter) do
|
72
|
-
keystream = key |> String.graphemes |> Stream.cycle
|
73
|
+
keystream = key |> String.graphemes() |> Stream.cycle()
|
73
74
|
|
74
75
|
text
|
75
|
-
|> String.graphemes
|
76
|
+
|> String.graphemes()
|
76
77
|
|> Enum.zip(keystream)
|
77
78
|
|> Enum.map_join(converter)
|
78
79
|
end
|
79
80
|
end
|
80
|
-
|
@@ -2,13 +2,13 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("simple_cipher.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(trace: true, exclude: :pending)
|
7
7
|
|
8
8
|
defmodule SimpleCipherTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
|
-
|
11
|
+
# @tag :pending
|
12
12
|
test "encoding with 'a' returns the original text" do
|
13
13
|
assert SimpleCipher.encode("a", "a") == "a"
|
14
14
|
assert SimpleCipher.encode("b", "a") == "b"
|
@@ -86,4 +86,3 @@ defmodule SimpleCipherTest do
|
|
86
86
|
assert SimpleCipher.decode(ciphertext, plaintext) == key
|
87
87
|
end
|
88
88
|
end
|
89
|
-
|
@@ -71,8 +71,9 @@ defmodule LinkedList do
|
|
71
71
|
def to_list(list) do
|
72
72
|
list |> do_to_list([]) |> Enum.reverse()
|
73
73
|
end
|
74
|
+
|
74
75
|
defp do_to_list({}, acc), do: acc
|
75
|
-
defp do_to_list({h, t}, acc), do: do_to_list(t, [h|acc])
|
76
|
+
defp do_to_list({h, t}, acc), do: do_to_list(t, [h | acc])
|
76
77
|
|
77
78
|
@doc """
|
78
79
|
Reverse a LinkedList
|
@@ -81,6 +82,7 @@ defmodule LinkedList do
|
|
81
82
|
def reverse(list) do
|
82
83
|
do_reverse(list, new())
|
83
84
|
end
|
85
|
+
|
84
86
|
def do_reverse({}, acc), do: acc
|
85
87
|
def do_reverse({h, t}, acc), do: do_reverse(t, push(acc, h))
|
86
88
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("linked_list.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule LinkedListTest do
|
9
9
|
use ExUnit.Case
|
@@ -62,6 +62,7 @@ defmodule LinkedListTest do
|
|
62
62
|
LinkedList.new()
|
63
63
|
|> LinkedList.push(:a)
|
64
64
|
|> LinkedList.push(:b)
|
65
|
+
|
65
66
|
assert LinkedList.peek(list) == {:ok, :b}
|
66
67
|
assert {:ok, list} = LinkedList.tail(list)
|
67
68
|
assert LinkedList.peek(list) == {:ok, :a}
|
@@ -145,10 +146,12 @@ defmodule LinkedListTest do
|
|
145
146
|
@tag :pending
|
146
147
|
test "reverse/1 round trip" do
|
147
148
|
list = Enum.to_list(1..200)
|
149
|
+
|
148
150
|
linked_list =
|
149
151
|
LinkedList.from_list(list)
|
150
152
|
|> LinkedList.reverse()
|
151
153
|
|> LinkedList.reverse()
|
154
|
+
|
152
155
|
assert LinkedList.to_list(linked_list) == list
|
153
156
|
end
|
154
157
|
end
|