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
@@ -1,13 +1,12 @@
|
|
1
1
|
defmodule SpaceAge do
|
2
|
-
|
3
|
-
def age_on(:earth, seconds), do: seconds / 31557600.0
|
2
|
+
def age_on(:earth, seconds), do: seconds / 31_557_600.0
|
4
3
|
def age_on(planet, seconds), do: age_on(:earth, seconds) / planet_rel_years(planet)
|
5
4
|
|
6
5
|
defp planet_rel_years(:mercury), do: 0.2408467
|
7
|
-
defp planet_rel_years(:venus),
|
8
|
-
defp planet_rel_years(:mars),
|
6
|
+
defp planet_rel_years(:venus), do: 0.61519726
|
7
|
+
defp planet_rel_years(:mars), do: 1.8808158
|
9
8
|
defp planet_rel_years(:jupiter), do: 11.862615
|
10
|
-
defp planet_rel_years(:saturn),
|
11
|
-
defp planet_rel_years(:uranus),
|
9
|
+
defp planet_rel_years(:saturn), do: 29.447498
|
10
|
+
defp planet_rel_years(:uranus), do: 84.016846
|
12
11
|
defp planet_rel_years(:neptune), do: 164.79132
|
13
12
|
end
|
@@ -1,6 +1,13 @@
|
|
1
1
|
defmodule SpaceAge do
|
2
|
-
@type planet ::
|
3
|
-
|
2
|
+
@type planet ::
|
3
|
+
:mercury
|
4
|
+
| :venus
|
5
|
+
| :earth
|
6
|
+
| :mars
|
7
|
+
| :jupiter
|
8
|
+
| :saturn
|
9
|
+
| :uranus
|
10
|
+
| :neptune
|
4
11
|
|
5
12
|
@doc """
|
6
13
|
Return the number of years a person that has lived for 'seconds' seconds is
|
@@ -8,6 +15,5 @@ defmodule SpaceAge do
|
|
8
15
|
"""
|
9
16
|
@spec age_on(planet, pos_integer) :: float
|
10
17
|
def age_on(planet, seconds) do
|
11
|
-
|
12
18
|
end
|
13
19
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("space_age.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
|
# You need to define a SpaceAge module containing a function age_on that given a
|
9
9
|
# planet (:earth, :saturn, etc) and a number of seconds returns the age in years
|
@@ -1,19 +1,24 @@
|
|
1
1
|
defmodule Spiral do
|
2
|
-
|
3
2
|
@doc """
|
4
3
|
Given the dimension, return a square matrix of numbers in clockwise spiral order.
|
5
4
|
"""
|
6
5
|
@spec matrix(dimension :: integer) :: list(list(integer))
|
7
6
|
def matrix(0), do: []
|
7
|
+
|
8
8
|
def matrix(dimension) do
|
9
9
|
unwind(dimension, dimension, 1)
|
10
10
|
end
|
11
11
|
|
12
12
|
defp unwind(row, col, start) do
|
13
13
|
case col do
|
14
|
-
0 ->
|
15
|
-
|
16
|
-
|
14
|
+
0 ->
|
15
|
+
[[]]
|
16
|
+
|
17
|
+
_ ->
|
18
|
+
[
|
19
|
+
Enum.to_list(start..(start + col - 1))
|
20
|
+
| unwind(col, row - 1, start + col) |> rotate_right
|
21
|
+
]
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
@@ -22,6 +27,6 @@ defmodule Spiral do
|
|
22
27
|
end
|
23
28
|
|
24
29
|
defp transpose(matrix) do
|
25
|
-
matrix |> List.zip |> Enum.map(&Tuple.to_list/1)
|
30
|
+
matrix |> List.zip() |> Enum.map(&Tuple.to_list/1)
|
26
31
|
end
|
27
32
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("spiral.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 SpiralTest do
|
9
9
|
use ExUnit.Case
|
@@ -15,44 +15,44 @@ defmodule SpiralTest do
|
|
15
15
|
|
16
16
|
@tag :pending
|
17
17
|
test "trivial spiral" do
|
18
|
-
assert Spiral.matrix(1) == [
|
18
|
+
assert Spiral.matrix(1) == [[1]]
|
19
19
|
end
|
20
20
|
|
21
21
|
@tag :pending
|
22
22
|
test "spiral of side length 2" do
|
23
23
|
assert Spiral.matrix(2) == [
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
[1, 2],
|
25
|
+
[4, 3]
|
26
|
+
]
|
27
27
|
end
|
28
28
|
|
29
29
|
@tag :pending
|
30
30
|
test "spiral of side length 3" do
|
31
31
|
assert Spiral.matrix(3) == [
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
[1, 2, 3],
|
33
|
+
[8, 9, 4],
|
34
|
+
[7, 6, 5]
|
35
|
+
]
|
36
36
|
end
|
37
37
|
|
38
38
|
@tag :pending
|
39
39
|
test "spiral of side length 4" do
|
40
40
|
assert Spiral.matrix(4) == [
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
[1, 2, 3, 4],
|
42
|
+
[12, 13, 14, 5],
|
43
|
+
[11, 16, 15, 6],
|
44
|
+
[10, 9, 8, 7]
|
45
|
+
]
|
46
46
|
end
|
47
47
|
|
48
48
|
@tag :pending
|
49
49
|
test "spiral of size 5" do
|
50
50
|
assert Spiral.matrix(5) == [
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
[1, 2, 3, 4, 5],
|
52
|
+
[16, 17, 18, 19, 6],
|
53
|
+
[15, 24, 25, 20, 7],
|
54
|
+
[14, 23, 22, 21, 8],
|
55
|
+
[13, 12, 11, 10, 9]
|
56
|
+
]
|
57
57
|
end
|
58
58
|
end
|
@@ -5,12 +5,13 @@ defmodule Strain do
|
|
5
5
|
|
6
6
|
Do not use `Enum.filter`.
|
7
7
|
"""
|
8
|
-
@spec keep(list :: list(any), fun :: (
|
8
|
+
@spec keep(list :: list(any), fun :: (any -> boolean)) :: list(any)
|
9
9
|
def keep(list, fun) do
|
10
10
|
do_keep(list, fun, [])
|
11
11
|
end
|
12
12
|
|
13
13
|
defp do_keep([], _, results), do: Enum.reverse(results)
|
14
|
+
|
14
15
|
defp do_keep([head | tail], fun, results) do
|
15
16
|
case apply(fun, [head]) do
|
16
17
|
true -> do_keep(tail, fun, [head | results])
|
@@ -24,17 +25,17 @@ defmodule Strain do
|
|
24
25
|
|
25
26
|
Do not use `Enum.reject`.
|
26
27
|
"""
|
27
|
-
@spec discard(list :: list(any), fun :: (
|
28
|
+
@spec discard(list :: list(any), fun :: (any -> boolean)) :: list(any)
|
28
29
|
def discard(list, fun) do
|
29
30
|
do_discard(list, fun, [])
|
30
31
|
end
|
31
32
|
|
32
33
|
defp do_discard([], _, results), do: Enum.reverse(results)
|
34
|
+
|
33
35
|
defp do_discard([head | tail], fun, results) do
|
34
36
|
case apply(fun, [head]) do
|
35
37
|
true -> do_discard(tail, fun, results)
|
36
|
-
_ -> do_discard(tail, fun, [
|
38
|
+
_ -> do_discard(tail, fun, [head | results])
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
40
|
-
|
@@ -5,7 +5,7 @@ defmodule Strain do
|
|
5
5
|
|
6
6
|
Do not use `Enum.filter`.
|
7
7
|
"""
|
8
|
-
@spec keep(list :: list(any), fun :: (
|
8
|
+
@spec keep(list :: list(any), fun :: (any -> boolean)) :: list(any)
|
9
9
|
def keep(list, fun) do
|
10
10
|
end
|
11
11
|
|
@@ -15,7 +15,7 @@ defmodule Strain do
|
|
15
15
|
|
16
16
|
Do not use `Enum.reject`.
|
17
17
|
"""
|
18
|
-
@spec discard(list :: list(any), fun :: (
|
18
|
+
@spec discard(list :: list(any), fun :: (any -> boolean)) :: list(any)
|
19
19
|
def discard(list, fun) do
|
20
20
|
end
|
21
21
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("strain.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 StrainTest do
|
9
9
|
use ExUnit.Case
|
@@ -12,7 +12,7 @@ defmodule StrainTest do
|
|
12
12
|
defp is_even?(n), do: rem(n, 2) == 0
|
13
13
|
defp noop(_), do: true
|
14
14
|
|
15
|
-
|
15
|
+
# @tag :pending
|
16
16
|
test "empty keep" do
|
17
17
|
assert Strain.keep([], &noop/1) == []
|
18
18
|
end
|
@@ -35,7 +35,7 @@ defmodule StrainTest do
|
|
35
35
|
@tag :pending
|
36
36
|
test "keep strings" do
|
37
37
|
words = ~w(apple zebra banana zombies cherimoya zelot)
|
38
|
-
assert Strain.keep(words, &
|
38
|
+
assert Strain.keep(words, &String.starts_with?(&1, "z")) == ~w(zebra zombies zelot)
|
39
39
|
end
|
40
40
|
|
41
41
|
@tag :pending
|
@@ -50,7 +50,12 @@ defmodule StrainTest do
|
|
50
50
|
[1, 2, 5]
|
51
51
|
]
|
52
52
|
|
53
|
-
assert Strain.keep(rows, fn row -> 5 in row end) == [
|
53
|
+
assert Strain.keep(rows, fn row -> 5 in row end) == [
|
54
|
+
[5, 5, 5],
|
55
|
+
[5, 1, 2],
|
56
|
+
[1, 5, 2],
|
57
|
+
[1, 2, 5]
|
58
|
+
]
|
54
59
|
end
|
55
60
|
|
56
61
|
@tag :pending
|
@@ -76,7 +81,7 @@ defmodule StrainTest do
|
|
76
81
|
@tag :pending
|
77
82
|
test "discard strings" do
|
78
83
|
words = ~w(apple zebra banana zombies cherimoya zelot)
|
79
|
-
assert Strain.discard(words, &
|
84
|
+
assert Strain.discard(words, &String.starts_with?(&1, "z")) == ~w(apple banana cherimoya)
|
80
85
|
end
|
81
86
|
|
82
87
|
@tag :pending
|
@@ -90,7 +95,7 @@ defmodule StrainTest do
|
|
90
95
|
[2, 2, 1],
|
91
96
|
[1, 2, 5]
|
92
97
|
]
|
98
|
+
|
93
99
|
assert Strain.discard(rows, fn row -> 5 in row end) == [[1, 2, 3], [2, 1, 2], [2, 2, 1]]
|
94
100
|
end
|
95
101
|
end
|
96
|
-
|
@@ -4,27 +4,31 @@ defmodule Sublist do
|
|
4
4
|
and if not whether it is equal or unequal to the second list.
|
5
5
|
"""
|
6
6
|
def compare(a, b) do
|
7
|
-
case {
|
8
|
-
{
|
7
|
+
case {length(a), length(b)} do
|
8
|
+
{la, lb} when la < lb ->
|
9
9
|
if is_sublist(a, b, la, lb), do: :sublist, else: :unequal
|
10
|
-
|
10
|
+
|
11
|
+
{la, lb} when la > lb ->
|
11
12
|
if is_sublist(b, a, lb, la), do: :superlist, else: :unequal
|
13
|
+
|
12
14
|
_ ->
|
13
15
|
if a == b, do: :equal, else: :unequal
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
19
|
defp is_sublist(_, _, len_a, len_b) when len_a > len_b, do: false
|
18
|
-
|
19
|
-
defp is_sublist(
|
20
|
+
# empty is sublist of all non-empty
|
21
|
+
defp is_sublist([], _, _, _), do: true
|
22
|
+
|
23
|
+
defp is_sublist(a, b = [_ | t], len_a, len_b) do
|
20
24
|
if try_is_sublist(a, b) do
|
21
25
|
true
|
22
26
|
else
|
23
|
-
is_sublist(a, t, len_a, len_b-1)
|
27
|
+
is_sublist(a, t, len_a, len_b - 1)
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
27
31
|
defp try_is_sublist([], _), do: true
|
28
|
-
defp try_is_sublist([x|at], [x|bt]), do: try_is_sublist(at, bt)
|
32
|
+
defp try_is_sublist([x | at], [x | bt]), do: try_is_sublist(at, bt)
|
29
33
|
defp try_is_sublist(_, _), do: false
|
30
34
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("sublist.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 SublistTest do
|
9
9
|
use ExUnit.Case
|
@@ -35,64 +35,62 @@ defmodule SublistTest do
|
|
35
35
|
|
36
36
|
@tag :pending
|
37
37
|
test "sublist at start" do
|
38
|
-
assert Sublist.compare([1,2,3],[1,2,3,4,5]) == :sublist
|
38
|
+
assert Sublist.compare([1, 2, 3], [1, 2, 3, 4, 5]) == :sublist
|
39
39
|
end
|
40
40
|
|
41
41
|
@tag :pending
|
42
42
|
test "sublist in middle" do
|
43
|
-
assert Sublist.compare([4,3,2],[5,4,3,2,1]) == :sublist
|
43
|
+
assert Sublist.compare([4, 3, 2], [5, 4, 3, 2, 1]) == :sublist
|
44
44
|
end
|
45
45
|
|
46
46
|
@tag :pending
|
47
47
|
test "sublist at end" do
|
48
|
-
assert Sublist.compare([3,4,5],[1,2,3,4,5]) == :sublist
|
48
|
+
assert Sublist.compare([3, 4, 5], [1, 2, 3, 4, 5]) == :sublist
|
49
49
|
end
|
50
50
|
|
51
51
|
@tag :pending
|
52
52
|
test "partially matching sublist at start" do
|
53
|
-
assert Sublist.compare([1,1,2], [1,1,1,2]) == :sublist
|
53
|
+
assert Sublist.compare([1, 1, 2], [1, 1, 1, 2]) == :sublist
|
54
54
|
end
|
55
55
|
|
56
56
|
@tag :pending
|
57
57
|
test "sublist early in huge list" do
|
58
|
-
assert Sublist.compare([3,4,5], Enum.to_list(1..1_000_000)) == :sublist
|
58
|
+
assert Sublist.compare([3, 4, 5], Enum.to_list(1..1_000_000)) == :sublist
|
59
59
|
end
|
60
60
|
|
61
61
|
@tag :pending
|
62
62
|
test "huge sublist not in huge list" do
|
63
|
-
assert Sublist.compare(Enum.to_list(10..1_000_001),
|
64
|
-
Enum.to_list(1..1_000_000))
|
65
|
-
== :unequal
|
63
|
+
assert Sublist.compare(Enum.to_list(10..1_000_001), Enum.to_list(1..1_000_000)) == :unequal
|
66
64
|
end
|
67
65
|
|
68
66
|
@tag :pending
|
69
67
|
test "superlist at start" do
|
70
|
-
assert Sublist.compare([1,2,3,4,5],[1,2,3]) == :superlist
|
68
|
+
assert Sublist.compare([1, 2, 3, 4, 5], [1, 2, 3]) == :superlist
|
71
69
|
end
|
72
70
|
|
73
71
|
@tag :pending
|
74
72
|
test "superlist in middle" do
|
75
|
-
assert Sublist.compare([5,4,3,2,1],[4,3,2]) == :superlist
|
73
|
+
assert Sublist.compare([5, 4, 3, 2, 1], [4, 3, 2]) == :superlist
|
76
74
|
end
|
77
75
|
|
78
76
|
@tag :pending
|
79
77
|
test "superlist at end" do
|
80
|
-
assert Sublist.compare([1,2,3,4,5],[3,4,5]) == :superlist
|
78
|
+
assert Sublist.compare([1, 2, 3, 4, 5], [3, 4, 5]) == :superlist
|
81
79
|
end
|
82
80
|
|
83
81
|
@tag :pending
|
84
82
|
test "1 and 2 does not contain 3" do
|
85
|
-
assert Sublist.compare([1,2], [3]) == :unequal
|
83
|
+
assert Sublist.compare([1, 2], [3]) == :unequal
|
86
84
|
end
|
87
85
|
|
88
86
|
@tag :pending
|
89
87
|
test "partially matching superlist at start" do
|
90
|
-
assert Sublist.compare([1,1,1,2], [1,1,2]) == :superlist
|
88
|
+
assert Sublist.compare([1, 1, 1, 2], [1, 1, 2]) == :superlist
|
91
89
|
end
|
92
90
|
|
93
91
|
@tag :pending
|
94
92
|
test "superlist early in huge list" do
|
95
|
-
assert Sublist.compare(Enum.to_list(1..1_000_000), [3,4,5]) == :superlist
|
93
|
+
assert Sublist.compare(Enum.to_list(1..1_000_000), [3, 4, 5]) == :superlist
|
96
94
|
end
|
97
95
|
|
98
96
|
@tag :pending
|
@@ -102,11 +100,11 @@ defmodule SublistTest do
|
|
102
100
|
|
103
101
|
@tag :pending
|
104
102
|
test "recurring values sublist" do
|
105
|
-
assert Sublist.compare([1,2,1,2,3], [1,2,3,1,2,1,2,3,2,1]) == :sublist
|
103
|
+
assert Sublist.compare([1, 2, 1, 2, 3], [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]) == :sublist
|
106
104
|
end
|
107
105
|
|
108
106
|
@tag :pending
|
109
107
|
test "recurring values unequal" do
|
110
|
-
assert Sublist.compare([1,2,1,2,3], [1,2,3,1,2,3,2,3,2,1]) == :unequal
|
108
|
+
assert Sublist.compare([1, 2, 1, 2, 3], [1, 2, 3, 1, 2, 3, 2, 3, 2, 1]) == :unequal
|
111
109
|
end
|
112
110
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
defmodule SumOfMultiples do
|
2
|
-
|
3
2
|
@doc """
|
4
3
|
Adds up all numbers from 1 to a given end number that are multiples of the factors provided.
|
5
4
|
"""
|
6
5
|
@spec to(non_neg_integer, [non_neg_integer]) :: non_neg_integer
|
7
6
|
def to(limit, factors) do
|
8
|
-
Enum.reduce(1..limit-1, 0, fn
|
9
|
-
if Enum.any?(factors, &(rem(n, &1) == 0)), do: acc + n, else: acc
|
7
|
+
Enum.reduce(1..(limit - 1), 0, fn n, acc ->
|
8
|
+
if Enum.any?(factors, &(rem(n, &1) == 0)), do: acc + n, else: acc
|
9
|
+
end)
|
10
10
|
end
|
11
|
-
|
12
11
|
end
|