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
@@ -11,8 +11,9 @@ defmodule Hamming do
|
|
11
11
|
distance = pairs(strand1, strand2) |> count_mismatched
|
12
12
|
{:ok, distance}
|
13
13
|
end
|
14
|
+
|
14
15
|
def hamming_distance(_, _), do: {:error, "Lists must be the same length"}
|
15
16
|
|
16
|
-
defp pairs(s1, s2),
|
17
|
-
defp count_mismatched(pairs), do: Enum.count(pairs, fn
|
17
|
+
defp pairs(s1, s2), do: Enum.zip(s1, s2)
|
18
|
+
defp count_mismatched(pairs), do: Enum.count(pairs, fn {c1, c2} -> c2 && c1 != c2 end)
|
18
19
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("hamming.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 HammingTest do
|
9
9
|
use ExUnit.Case
|
@@ -34,7 +34,10 @@ defmodule HammingTest do
|
|
34
34
|
|
35
35
|
@tag :pending
|
36
36
|
test "hamming distance is undefined for strands of different lengths" do
|
37
|
-
assert {:error, "Lists must be the same length"} =
|
38
|
-
|
37
|
+
assert {:error, "Lists must be the same length"} =
|
38
|
+
Hamming.hamming_distance('AAAC', 'TAGGGGAGGCTAGCGGTAGGAC')
|
39
|
+
|
40
|
+
assert {:error, "Lists must be the same length"} =
|
41
|
+
Hamming.hamming_distance('GACTACGGACAGGACACC', 'GACATCGC')
|
39
42
|
end
|
40
43
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
defmodule Hexadecimal do
|
2
2
|
@base 16
|
3
3
|
@hex_table String.split("0123456789abcdef", "", trim: true)
|
4
|
-
|
5
|
-
|
4
|
+
|> Enum.with_index()
|
5
|
+
|> Enum.into(%{})
|
6
6
|
|
7
7
|
@doc """
|
8
8
|
Accept a string representing a hexadecimal value and return the
|
@@ -26,10 +26,10 @@ defmodule Hexadecimal do
|
|
26
26
|
0
|
27
27
|
else
|
28
28
|
hex
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
|> String.downcase()
|
30
|
+
|> String.reverse()
|
31
|
+
|> String.split("", trim: true)
|
32
|
+
|> hex_to_int(0, 0)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -38,7 +38,8 @@ defmodule Hexadecimal do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
defp hex_to_int([], acc, _), do: round(acc)
|
41
|
-
|
41
|
+
|
42
|
+
defp hex_to_int([char | hex], acc, power) do
|
42
43
|
acc = acc + Map.get(@hex_table, char) * :math.pow(@base, power)
|
43
44
|
hex_to_int(hex, acc, power + 1)
|
44
45
|
end
|
@@ -2,14 +2,14 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("hexadecimal.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 HexadecimalTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
11
|
test "returns 1 when hex is 1" do
|
12
|
-
assert Hexadecimal.to_decimal("1") ==
|
12
|
+
assert Hexadecimal.to_decimal("1") == 1
|
13
13
|
end
|
14
14
|
|
15
15
|
@tag :pending
|
@@ -8,7 +8,7 @@ ExUnit.configure(exclude: :pending, trace: true)
|
|
8
8
|
defmodule ISBNVerifierTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
|
-
|
11
|
+
# @tag :pending
|
12
12
|
test "valid isbn number" do
|
13
13
|
assert ISBNVerifier.isbn?("3-598-21508-8")
|
14
14
|
end
|
@@ -72,4 +72,4 @@ defmodule ISBNVerifierTest do
|
|
72
72
|
test "check digit of X should not be used for 0" do
|
73
73
|
refute ISBNVerifier.isbn?("3-598-21515-X")
|
74
74
|
end
|
75
|
-
end
|
75
|
+
end
|
@@ -2,14 +2,14 @@ defmodule Isogram do
|
|
2
2
|
@doc """
|
3
3
|
Determines if a word or sentence is an isogram
|
4
4
|
"""
|
5
|
-
@spec isogram?(String.t) :: boolean
|
5
|
+
@spec isogram?(String.t()) :: boolean
|
6
6
|
def isogram?(sentence) do
|
7
|
-
codepoints =
|
8
|
-
|
7
|
+
codepoints =
|
8
|
+
sentence
|
9
|
+
|> String.downcase()
|
9
10
|
|> String.replace(~r/\s|-/u, "")
|
10
|
-
|> String.codepoints
|
11
|
+
|> String.codepoints()
|
11
12
|
|
12
13
|
length(Enum.uniq(codepoints)) == length(codepoints)
|
13
14
|
end
|
14
|
-
|
15
15
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("isogram.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 IsogramTest do
|
9
9
|
use ExUnit.Case
|
@@ -46,5 +46,4 @@ defmodule IsogramTest do
|
|
46
46
|
test "phrase is not isogram" do
|
47
47
|
refute Isogram.isogram?("the quick brown fox")
|
48
48
|
end
|
49
|
-
|
50
49
|
end
|
@@ -1,6 +1,18 @@
|
|
1
1
|
defmodule Garden do
|
2
|
-
@default_names [
|
3
|
-
|
2
|
+
@default_names [
|
3
|
+
:alice,
|
4
|
+
:bob,
|
5
|
+
:charlie,
|
6
|
+
:david,
|
7
|
+
:eve,
|
8
|
+
:fred,
|
9
|
+
:ginny,
|
10
|
+
:harriet,
|
11
|
+
:ileana,
|
12
|
+
:joseph,
|
13
|
+
:kincaid,
|
14
|
+
:larry
|
15
|
+
]
|
4
16
|
@letter_map %{"V" => :violets, "R" => :radishes, "C" => :clover, "G" => :grass}
|
5
17
|
|
6
18
|
@doc """
|
@@ -46,7 +58,7 @@ defmodule Garden do
|
|
46
58
|
|
47
59
|
defp add_to_map(map, current_name, letters) do
|
48
60
|
letters = String.codepoints(letters)
|
49
|
-
translated_list = Enum.map(letters, fn
|
61
|
+
translated_list = Enum.map(letters, fn letter -> @letter_map[letter] end)
|
50
62
|
tuple = List.to_tuple(translated_list)
|
51
63
|
Map.put(map, current_name, tuple)
|
52
64
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("garden.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 GardenTest do
|
9
9
|
use ExUnit.Case
|
@@ -57,8 +57,21 @@ defmodule GardenTest do
|
|
57
57
|
|
58
58
|
@tag :pending
|
59
59
|
test "gets the garden for all students with custom child names" do
|
60
|
-
names = [
|
61
|
-
|
60
|
+
names = [
|
61
|
+
:maggie,
|
62
|
+
:nate,
|
63
|
+
:xander,
|
64
|
+
:ophelia,
|
65
|
+
:pete,
|
66
|
+
:reggie,
|
67
|
+
:sylvia,
|
68
|
+
:tanner,
|
69
|
+
:ursula,
|
70
|
+
:victor,
|
71
|
+
:winnie,
|
72
|
+
:ynold
|
73
|
+
]
|
74
|
+
|
62
75
|
garden_string = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
|
63
76
|
garden_info = Garden.info(garden_string, names)
|
64
77
|
assert garden_info.maggie == {:violets, :radishes, :violets, :radishes}
|
@@ -1,17 +1,16 @@
|
|
1
1
|
defmodule Series do
|
2
|
-
|
3
|
-
@spec digits(String.t) :: [non_neg_integer]
|
2
|
+
@spec digits(String.t()) :: [non_neg_integer]
|
4
3
|
defp digits("") do
|
5
4
|
[]
|
6
5
|
end
|
7
6
|
|
8
7
|
defp digits(number_string) do
|
9
8
|
String.split(number_string, "", trim: true)
|
10
|
-
|> Enum.reduce([], fn
|
11
|
-
|> Enum.reverse
|
9
|
+
|> Enum.reduce([], fn char, acc -> [String.to_integer(char) | acc] end)
|
10
|
+
|> Enum.reverse()
|
12
11
|
end
|
13
12
|
|
14
|
-
@spec slices(String.t, non_neg_integer) :: [list(non_neg_integer)]
|
13
|
+
@spec slices(String.t(), non_neg_integer) :: [list(non_neg_integer)]
|
15
14
|
defp slices(number_string, size) do
|
16
15
|
digits = digits(number_string)
|
17
16
|
chunk(digits, size, 1)
|
@@ -20,7 +19,7 @@ defmodule Series do
|
|
20
19
|
@doc """
|
21
20
|
Finds the largest product of a given number of consecutive numbers in a given string of numbers.
|
22
21
|
"""
|
23
|
-
@spec largest_product(String.t, non_neg_integer) :: non_neg_integer
|
22
|
+
@spec largest_product(String.t(), non_neg_integer) :: non_neg_integer
|
24
23
|
def largest_product(_, 0) do
|
25
24
|
1
|
26
25
|
end
|
@@ -29,13 +28,15 @@ defmodule Series do
|
|
29
28
|
unless Enum.member?(Range.new(0, String.length(number_string)), size) do
|
30
29
|
raise ArgumentError
|
31
30
|
end
|
31
|
+
|
32
32
|
slices = slices(number_string, size)
|
33
|
-
|
34
|
-
|
33
|
+
|
34
|
+
Enum.map(slices, &Enum.reduce(&1, fn x, acc -> x * acc end))
|
35
|
+
|> Enum.max()
|
35
36
|
end
|
36
37
|
|
37
38
|
# Handle Enum.chunks -> Enum.chunk renaming.
|
38
|
-
if not {
|
39
|
+
if not ({:chunk, 3} in Enum.__info__(:functions)) do
|
39
40
|
defp chunk(coll, n, step), do: Enum.chunks(coll, n, step)
|
40
41
|
else
|
41
42
|
defp chunk(coll, n, step), do: Enum.chunk(coll, n, step)
|
@@ -1,10 +1,8 @@
|
|
1
1
|
defmodule Series do
|
2
|
-
|
3
2
|
@doc """
|
4
3
|
Finds the largest product of a given number of consecutive numbers in a given string of numbers.
|
5
4
|
"""
|
6
|
-
@spec largest_product(String.t, non_neg_integer) :: non_neg_integer
|
5
|
+
@spec largest_product(String.t(), non_neg_integer) :: non_neg_integer
|
7
6
|
def largest_product(number_string, size) do
|
8
|
-
|
9
7
|
end
|
10
8
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("largest_series_product.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 LargestSeriesProductTest do
|
9
9
|
use ExUnit.Case
|
@@ -45,12 +45,14 @@ defmodule LargestSeriesProductTest do
|
|
45
45
|
|
46
46
|
@tag :pending
|
47
47
|
test "some big number" do
|
48
|
-
assert Series.largest_product("73167176531330624919225119674426574742355349194934", 6) ==
|
48
|
+
assert Series.largest_product("73167176531330624919225119674426574742355349194934", 6) ==
|
49
|
+
23520
|
49
50
|
end
|
50
51
|
|
51
52
|
@tag :pending
|
52
53
|
test "some other big number" do
|
53
|
-
assert Series.largest_product("52677741234314237566414902593461595376319419139427", 6) ==
|
54
|
+
assert Series.largest_product("52677741234314237566414902593461595376319419139427", 6) ==
|
55
|
+
28350
|
54
56
|
end
|
55
57
|
|
56
58
|
@tag :pending
|
@@ -1,10 +1,10 @@
|
|
1
1
|
defmodule Year do
|
2
2
|
def leap_year?(year) do
|
3
|
-
div4?(year) &&
|
3
|
+
div4?(year) && div100?(year) == div400?(year)
|
4
4
|
end
|
5
5
|
|
6
6
|
defp divides?(dividend, divisor), do: rem(dividend, divisor) == 0
|
7
|
-
defp div4?(dividend),
|
7
|
+
defp div4?(dividend), do: divides?(dividend, 4)
|
8
8
|
defp div100?(dividend), do: divides?(dividend, 100)
|
9
9
|
defp div400?(dividend), do: divides?(dividend, 400)
|
10
10
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("leap.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 LeapTest do
|
9
9
|
use ExUnit.Case
|
@@ -10,43 +10,44 @@ defmodule ListOps do
|
|
10
10
|
def count(l), do: do_count(l, 0)
|
11
11
|
|
12
12
|
defp do_count([], acc), do: acc
|
13
|
-
defp do_count([_|t], acc), do: do_count(t, acc+1)
|
13
|
+
defp do_count([_ | t], acc), do: do_count(t, acc + 1)
|
14
14
|
|
15
15
|
@spec reverse(list) :: list
|
16
16
|
def reverse(l), do: do_reverse(l, [])
|
17
17
|
|
18
18
|
defp do_reverse([], acc), do: acc
|
19
|
-
defp do_reverse([h|t], acc), do: do_reverse(t, [h|acc])
|
19
|
+
defp do_reverse([h | t], acc), do: do_reverse(t, [h | acc])
|
20
20
|
|
21
21
|
@spec map(list, (any -> any)) :: list
|
22
22
|
def map(l, f), do: do_map(l, f, []) |> reverse()
|
23
23
|
|
24
24
|
defp do_map([], _, acc), do: acc
|
25
|
-
defp do_map([h|t], f, acc), do: do_map(t, f, [f.(h)|acc])
|
25
|
+
defp do_map([h | t], f, acc), do: do_map(t, f, [f.(h) | acc])
|
26
26
|
|
27
27
|
@spec filter(list, (any -> as_boolean(term))) :: list
|
28
28
|
def filter(l, f), do: do_filter(l, f, []) |> reverse()
|
29
29
|
|
30
30
|
defp do_filter([], _, acc), do: acc
|
31
|
-
|
31
|
+
|
32
|
+
defp do_filter([h | t], f, acc) do
|
32
33
|
if f.(h) do
|
33
|
-
do_filter(t, f, [h|acc])
|
34
|
+
do_filter(t, f, [h | acc])
|
34
35
|
else
|
35
36
|
do_filter(t, f, acc)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
40
|
@type acc :: any
|
40
|
-
@spec reduce(list, acc, (
|
41
|
+
@spec reduce(list, acc, (any, acc -> acc)) :: acc
|
41
42
|
def reduce([], acc, _), do: acc
|
42
|
-
def reduce([h|t], acc, f), do: reduce(t, f.(h, acc), f)
|
43
|
+
def reduce([h | t], acc, f), do: reduce(t, f.(h, acc), f)
|
43
44
|
|
44
45
|
@spec append(list, list) :: list
|
45
46
|
def append(a, b), do: do_append(reverse(a), b)
|
46
47
|
|
47
48
|
defp do_append([], b), do: b
|
48
|
-
defp do_append([h|t], b), do: do_append(t, [h|b])
|
49
|
+
defp do_append([h | t], b), do: do_append(t, [h | b])
|
49
50
|
|
50
51
|
@spec concat([[any]]) :: [any]
|
51
|
-
def concat(ll), do: reverse(ll) |> reduce([], &
|
52
|
+
def concat(ll), do: reverse(ll) |> reduce([], &append(&1, &2))
|
52
53
|
end
|