diff --git a/exercises/count_pattern_test.rb b/exercises/test/count_pattern_test.rb similarity index 69% rename from exercises/count_pattern_test.rb rename to exercises/test/count_pattern_test.rb index 6ad7121..ef0ea75 100644 --- a/exercises/count_pattern_test.rb +++ b/exercises/test/count_pattern_test.rb @@ -17,51 +17,68 @@ def test_count_numbers_greater_than_17 numbers = [9, 18, 12, 17, 1, 3, 99] tally = 0 numbers.each do |number| - # Your code goes here + tally += 1 if number > 17 end assert_equal 2, tally end def test_count_words_that_are_uppercase - skip + words = ["trousers", "SOCKS", "sweater", "Cap", "SHOE", "TIE"] tally = 0 - # Your code goes here + words.each do |word| + tally += 1 if word.upcase == word + end assert_equal 3, tally end def test_count_words_ending_in_ing - skip + words = ["thought", "brake", "shin", "juice", "trash"] - # Your code goes here + tally = 0 + words.each do |word| + tally +=1 if word.end_with?('ing') + end assert_equal 0, tally end def test_count_even_numbers - skip + numbers = [9, 2, 1, 3, 18, 39, 71, 4, 6] - # Your code goes here + tally = 0 + numbers.each do |number| + tally +=1 if number.even? + end assert_equal 4, tally end def test_count_multiples_of_5 - skip + numbers = [2, 5, 19, 25, 35, 67] - # Your code goes here + tally = 0 + numbers.each do |number| + tally +=1 if number % 5 == 0 + end assert_equal 3, tally end def test_count_round_prices - skip + prices = [1.0, 3.9, 5.99, 18.5, 20.0] - # Your code goes here + tally = 0 + prices.each do |price| + tally +=1 if (price - price.floor) == 0 + end assert_equal 2, tally end def test_count_four_letter_words - skip + words = ["bake", "bark", "corn", "apple", "wart", "bird", "umbrella", "fart"] - # Your code goes here + tally = 0 + words.each do |word| + tally +=1 if word.length == 4 + end assert_equal 6, tally end diff --git a/exercises/count_test.rb b/exercises/test/count_test.rb similarity index 73% rename from exercises/count_test.rb rename to exercises/test/count_test.rb index 43a57a9..599309e 100644 --- a/exercises/count_test.rb +++ b/exercises/test/count_test.rb @@ -15,50 +15,62 @@ def test_count_count_words_with_e def test_count_numbers_greater_than_17 numbers = [9, 18, 12, 17, 1, 3, 99] tally = numbers.count do |number| - # Your code goes here + number > 17 end assert_equal 2, tally end def test_count_words_that_are_uppercase - skip + words = ["trousers", "SOCKS", "sweater", "Cap", "SHOE", "TIE"] - # Your code goes here + tally = words.count do |word| + word.upcase == word + end assert_equal 3, tally end def test_count_words_ending_in_ing - skip + words = ["thought", "brake", "shin", "juice", "trash"] - # Your code goes here + tally = words.count do |word| + word.end_with?('ing') + end assert_equal 0, tally end def test_count_even_numbers - skip + numbers = [9, 2, 1, 3, 18, 39, 71, 4, 6] - # Your code goes here + tally = numbers.count do |number| + number.even? + end assert_equal 4, tally end def test_count_multiples_of_5 - skip + numbers = [2, 5, 19, 25, 35, 67] - # Your code goes here + tally = numbers.count do |number| + number % 5 == 0 + end assert_equal 3, tally end def test_count_round_prices - skip + prices = [1.0, 3.9, 5.99, 18.5, 20.0] - # Your code goes here + tally = prices.count do |price| + price - price.floor == 0 + end assert_equal 2, tally end def test_count_four_letter_words - skip + words = ["bake", "bark", "corn", "apple", "wart", "bird", "umbrella", "fart"] - # Your code goes here + tally = words.count do |word| + word.length == 4 + end assert_equal 6, tally end diff --git a/exercises/find_pattern_test.rb b/exercises/test/find_pattern_test.rb similarity index 60% rename from exercises/find_pattern_test.rb rename to exercises/test/find_pattern_test.rb index 13f3319..0171c8f 100644 --- a/exercises/find_pattern_test.rb +++ b/exercises/test/find_pattern_test.rb @@ -20,65 +20,115 @@ def test_no_waldo words = ["scarf", "sandcastle", "flag", "pretzel", "crow", "key"] found = nil words.each do |word| - # Your code goes here + if word == 'waldo' + found = 'waldo' + break + end end assert_equal nil, found end def test_find_waldo - skip + words = ["noise", "dog", "fair", "house", "waldo", "bucket", "fish"] found = nil - # Your code goes here + words.each do |word| + if word == 'waldo' + found = 'waldo' + break + end + end assert_equal "waldo", found end def test_cannot_find_3_letter_words - skip + words = ["piglet", "porridge", "bear", "blueberry"] - # Your code goes here + found = nil + words.each do |word| + if word.length == 3 + found = word + break + end + end assert_equal nil, found end def test_find_13 - skip + numbers = [2, 13, 19, 8, 3, 27] - # Your code goes here + found = nil + numbers.each do |number| + if number == 13 + found = 13 + break + end + end assert_equal 13, found end def test_find_first_even_number - skip + numbers = [3, 7, 13, 11, 10, 2, 17] - # Your code goes here + found = nil + numbers.each do |number| + if number.even? + found = number + break + end + end assert_equal 10, found end def test_find_first_multiple_of_3 - skip + numbers = [2, 8, 9, 27, 24, 5] - # Your code goes here + found = nil + numbers.each do |number| + if number % 3 == 0 + found = number + break + end + end assert_equal 9, found end def test_find_first_word_starting_with_q - skip + words = ["weirdo", "quill", "fast", "quaint", "quitter", "koala"] - # Your code goes here + found = nil + words.each do |word| + if word.start_with? 'q' + found = word + break + end + end assert_equal "quill", found end def test_find_first_word_ending_with_er - skip + words = ["biggest", "pour", "blight", "finger", "pie", "border"] - # Your code goes here + found = nil + words.each do |word| + if word.end_with? 'er' + found = word + break + end + end assert_equal "finger", found end def test_find_first_number_greater_than_20 - skip + numbers = [1, 8, 19, 21, 29, 31, 34] - # Your code goes here + found = nil + numbers.each do |number| + if number > 20 + found = number + break + end + end assert_equal 21, found end diff --git a/exercises/find_test.rb b/exercises/test/find_test.rb similarity index 73% rename from exercises/find_test.rb rename to exercises/test/find_test.rb index 61c2d71..940602c 100644 --- a/exercises/find_test.rb +++ b/exercises/test/find_test.rb @@ -15,64 +15,79 @@ def test_find_first_seven_letter_word def test_no_waldo words = ["scarf", "sandcastle", "flag", "pretzel", "crow", "key"] found = words.find do |word| - # Your code goes here + word == 'waldo' end assert_equal nil, found end def test_find_waldo - skip words = ["noise", "dog", "fair", "house", "waldo", "bucket", "fish"] - # Your code goes here + found = words.find do |word| + word == 'waldo' + end assert_equal "waldo", found end def test_cannot_find_3_letter_words - skip + words = ["piglet", "porridge", "bear", "blueberry"] - # Your code goes here + found = words.find do |word| + word.length == 3 + end assert_equal nil, found end def test_find_13 - skip + numbers = [2, 13, 19, 8, 3, 27] - # Your code goes here + found = numbers.find do |number| + number == 13 + end assert_equal 13, found end def test_find_first_even_number - skip + numbers = [3, 7, 13, 11, 10, 2, 17] - # Your code goes here + found = numbers.find do |number| + number.even? + end assert_equal 10, found end def test_find_first_multiple_of_3 - skip + numbers = [2, 8, 9, 27, 24, 5] - # Your code goes here + found = numbers.find do |number| + number % 3 == 0 + end assert_equal 9, found end def test_find_first_word_starting_with_q - skip + words = ["weirdo", "quill", "fast", "quaint", "quitter", "koala"] - # Your code goes here + found = words.find do |word| + word.start_with? 'q' + end assert_equal "quill", found end def test_find_first_word_ending_with_er - skip + words = ["biggest", "pour", "blight", "finger", "pie", "border"] - # Your code goes here + found = words.find do |word| + word.end_with? 'er' + end assert_equal "finger", found end def test_find_first_number_greater_than_20 - skip + numbers = [1, 8, 19, 21, 29, 31, 34] - # Your code goes here + found = numbers.find do |number| + number > 20 + end assert_equal 21, found end diff --git a/exercises/map_pattern_test.rb b/exercises/test/map_pattern_test.rb similarity index 71% rename from exercises/map_pattern_test.rb rename to exercises/test/map_pattern_test.rb index c54279b..e31dfe7 100644 --- a/exercises/map_pattern_test.rb +++ b/exercises/test/map_pattern_test.rb @@ -17,51 +17,68 @@ def test_doubles numbers = [1, 2, 3, 4, 5] doubles = [] numbers.each do |number| - # Your code goes here + doubles << number * 2 end assert_equal [2, 4, 6, 8, 10], doubles end def test_squares - skip + numbers = [1, 2, 3, 4, 5] squares = [] - # Your code goes here + numbers.each do |number| + squares << number * number + end assert_equal [1, 4, 9, 16, 25], squares end def test_lengths - skip + names = ["alice", "bob", "charlie", "david", "eve"] - # Your code goes here + lengths = [] + names.each do |name| + lengths << name.length + end assert_equal [5, 3, 7, 5, 3], lengths end def test_normalize_zip_codes - skip + numbers = [234, 10, 9119, 38881] - # Your code goes here + zip_codes = [] + numbers.each do |number| + zip_codes << number.to_s.rjust(5, '0') + end assert_equal ["00234", "00010", "09119", "38881"], zip_codes end def test_backwards - skip + names = ["alice", "bob", "charlie", "david", "eve"] - # Your code goes here + backwards = [] + names.each do |name| + backwards << name.reverse + end assert_equal ["ecila", "bob", "eilrahc", "divad", "eve"], backwards end def test_words_with_no_vowels - skip + words = ["green", "sheep", "travel", "least", "boat"] - # Your code goes here + without_vowels = [] + words.each do |word| + without_vowels << word.delete('aeiou') + end assert_equal ["grn", "shp", "trvl", "lst", "bt"], without_vowels end def test_trim_last_letter - skip + animals = ["dog", "cat", "mouse", "frog", "platypus"] - # Your code goes here + trimmed = [] + animals.each do |animal| + trimmed << animal.chop + end assert_equal ["do", "ca", "mous", "fro", "platypu"], trimmed end diff --git a/exercises/map_test.rb b/exercises/test/map_test.rb similarity index 74% rename from exercises/map_test.rb rename to exercises/test/map_test.rb index 8f502c1..1f7f805 100644 --- a/exercises/map_test.rb +++ b/exercises/test/map_test.rb @@ -1,6 +1,7 @@ gem 'minitest' require 'minitest/autorun' require 'minitest/pride' +require 'pry' class MapTest < Minitest::Test @@ -15,50 +16,64 @@ def test_capitalize def test_doubles numbers = [1, 2, 3, 4, 5] doubles = numbers.map do |number| - # Your code goes here + number * 2 end assert_equal [2, 4, 6, 8, 10], doubles end def test_squares - skip + numbers = [1, 2, 3, 4, 5] - # Your code goes here + squares = numbers.map do |number| + number * number + end assert_equal [1, 4, 9, 16, 25], squares end def test_lengths - skip + names = ["alice", "bob", "charlie", "david", "eve"] - # Your code goes here + lengths = names.map do |name| + name.length + end assert_equal [5, 3, 7, 5, 3], lengths end def test_normalize_zip_codes - skip + numbers = [234, 10, 9119, 38881] - # Your code goes here + zip_codes = numbers.map do |number| + number.to_s.rjust(5, '0') + end + assert_equal ["00234", "00010", "09119", "38881"], zip_codes end def test_backwards - skip + names = ["alice", "bob", "charlie", "david", "eve"] - # Your code goes here + backwards = names.map do |name| + name.reverse + end assert_equal ["ecila", "bob", "eilrahc", "divad", "eve"], backwards end def test_words_with_no_vowels - skip + words = ["green", "sheep", "travel", "least", "boat"] - # Your code goes here + + without_vowels = words.map do |word| + word.delete('aeiou') + end assert_equal ["grn", "shp", "trvl", "lst", "bt"], without_vowels end def test_trim_last_letter - skip + animals = ["dog", "cat", "mouse", "frog", "platypus"] - # Your code goes here + trimmed = animals.map do |animal| + animal.chop + end assert_equal ["do", "ca", "mous", "fro", "platypu"], trimmed end diff --git a/exercises/select_pattern_test.rb b/exercises/test/select_pattern_test.rb similarity index 68% rename from exercises/select_pattern_test.rb rename to exercises/test/select_pattern_test.rb index 6628eac..87b890e 100644 --- a/exercises/select_pattern_test.rb +++ b/exercises/test/select_pattern_test.rb @@ -17,72 +17,98 @@ def test_pick_odd_numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] odds = [] numbers.each do |number| - # Your code goes here + odds << number if number.odd? end assert_equal [1, 3, 5, 7, 9], odds end def test_pick_words_with_three_letters - skip + words = ["pill", "bad", "finger", "cat", "blue", "dog", "table", "red"] selected = [] - # Your code goes here + words. each do |word| + selected << word if word.length == 3 + end assert_equal ["bad", "cat", "dog", "red"], selected end def test_pick_words_with_more_than_three_letters - skip + words = ["pill", "bad", "finger", "cat", "blue", "dog", "table", "red"] - # Your code goes here + selected = [] + words.each do |word| + selected << word if word.length > 3 + end assert_equal ["pill", "finger", "blue", "table"], selected end def test_pick_words_ending_in_e - skip + words = ["are", "you", "strike", "thinking", "belt", "piece", "warble", "sing", "pipe"] - # Your code goes here + selected = [] + words.each do |word| + selected << word if word.end_with? 'e' + end assert_equal ["are", "strike", "piece", "warble", "pipe"], selected end def test_pick_words_ending_in_ing - skip + words = ["bring", "finger", "drought", "singing", "bingo", "purposeful"] - # Your code goes here + selected = [] + words.each do |word| + selected << word if word.end_with? 'ing' + end assert_equal ["bring", "singing"], selected end def test_pick_words_containing_e - skip + words = ["four", "red", "five", "blue", "pizza", "purple"] - # Your code goes here + selected = [] + words.each do |word| + selected << word if word.include? 'e' + end assert_equal ["red", "five", "blue", "purple"], selected end def test_pick_dinosaurs - skip + animals = ["tyrannosaurus", "narwhal", "eel", "achillesaurus", "qingxiusaurus"] - # Your code goes here + dinosaurs = [] + animals.each do |animal| + dinosaurs << animal if animal.end_with? 'saurus' + end assert_equal ["tyrannosaurus", "achillesaurus", "qingxiusaurus"], dinosaurs end def test_pick_floats - skip + numbers = [3, 1.4, 3.5, 2, 4.9, 9.1, 8.0] - # Your code goes here + floats = [] + numbers.each do |number| + floats << number if number.is_a?(Float) #also works !number.integer? + end assert_equal [1.4, 3.5, 4.9, 9.1, 8.0], floats end def test_pick_arrays - skip + elements = ["CAT", ["dog"], 23, [56, 3, 8], "AIMLESS", 43, "butter"] - # Your code goes here + arrays = [] + elements.each do |element| + arrays << element if element.is_a?(Array) + end assert_equal [["dog"], [56, 3, 8]], arrays end def test_pick_hashes - skip + elements = ["cat", {:dog=>"fido"}, 23, {:stuff=>"things"}, "aimless", 43] - # Your code goes here + hashes = [] + elements.each do |element| + hashes << element if element.is_a?(Hash) + end assert_equal [{:dog=>"fido"}, {:stuff=>"things"}], hashes end diff --git a/exercises/select_test.rb b/exercises/test/select_test.rb similarity index 73% rename from exercises/select_test.rb rename to exercises/test/select_test.rb index bdede87..ee87f85 100644 --- a/exercises/select_test.rb +++ b/exercises/test/select_test.rb @@ -15,71 +15,89 @@ def test_pick_even_numbers def test_pick_odd_numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] odds = numbers.select do |number| - # Your code goes here + number.odd? end assert_equal [1, 3, 5, 7, 9], odds end def test_pick_words_with_three_letters - skip + words = ["pill", "bad", "finger", "cat", "blue", "dog", "table", "red"] - # Your code goes here + selected = words.select do |word| + word.length == 3 + end assert_equal ["bad", "cat", "dog", "red"], selected end def test_pick_words_with_more_than_three_letters - skip + words = ["pill", "bad", "finger", "cat", "blue", "dog", "table", "red"] - # Your code goes here + selected = words.select do |word| + word.length > 3 + end assert_equal ["pill", "finger", "blue", "table"], selected end def test_pick_words_ending_in_e - skip + words = ["are", "you", "strike", "thinking", "belt", "piece", "warble", "sing", "pipe"] - # Your code goes here + selected = words.select do |word| + word.end_with? 'e' + end assert_equal ["are", "strike", "piece", "warble", "pipe"], selected end def test_pick_words_ending_in_ing - skip + words = ["bring", "finger", "drought", "singing", "bingo", "purposeful"] - # Your code goes here + selected = words.select do |word| + word.end_with? 'ing' + end assert_equal ["bring", "singing"], selected end def test_pick_words_containing_e - skip + words = ["four", "red", "five", "blue", "pizza", "purple"] - # Your code goes here + selected = words.select do |word| + word.include? 'e' + end assert_equal ["red", "five", "blue", "purple"], selected end def test_pick_dinosaurs - skip + animals = ["tyrannosaurus", "narwhal", "eel", "achillesaurus", "qingxiusaurus"] - # Your code goes here + dinosaurs = animals.select do |animal| + animal.end_with? 'saurus' + end assert_equal ["tyrannosaurus", "achillesaurus", "qingxiusaurus"], dinosaurs end def test_pick_floats - skip + numbers = [3, 1.4, 3.5, 2, 4.9, 9.1, 8.0] - # Your code goes here + floats = numbers.select do |number| + number.is_a?(Float) + end assert_equal [1.4, 3.5, 4.9, 9.1, 8.0], floats end def test_pick_arrays - skip + elements = ["CAT", ["dog"], 23, [56, 3, 8], "AIMLESS", 43, "butter"] - # Your code goes here + arrays = elements.select do |element| + element.is_a?(Array) + end assert_equal [["dog"], [56, 3, 8]], arrays end def test_pick_hashes - skip + elements = ["cat", {:dog=>"fido"}, 23, {:stuff=>"things"}, "aimless", 43] - # Your code goes here + hashes = elements.select do |element| + element.is_a?(Hash) + end assert_equal [{:dog=>"fido"}, {:stuff=>"things"}], hashes end diff --git a/exercises/sort_by_pattern_test.rb b/exercises/test/sort_by_pattern_test.rb similarity index 67% rename from exercises/sort_by_pattern_test.rb rename to exercises/test/sort_by_pattern_test.rb index 33d9306..61c1746 100644 --- a/exercises/sort_by_pattern_test.rb +++ b/exercises/test/sort_by_pattern_test.rb @@ -1,7 +1,7 @@ gem 'minitest' require 'minitest/autorun' require 'minitest/pride' - +require 'pry' class SortByPatternTest < Minitest::Test def test_sort_alphabetically @@ -22,7 +22,7 @@ def test_sort_alphabetically_by_last_letter things = ["pill", "box", "glass", "water", "sponge"] transformed = [] things.each do |thing| - # Your code goes here + transformed << [thing[-1], thing] end transformed = transformed.sort sorted = [] @@ -33,10 +33,12 @@ def test_sort_alphabetically_by_last_letter end def test_sort_by_distance - skip + distances = ["1cm", "9cm", "30cm", "4cm", "2cm"] transformed = [] - # Your code goes here + distances.each do |distance| + transformed << [distance.to_i, distance] + end transformed = transformed.sort sorted = [] transformed.each do |sort_key, distance| @@ -46,24 +48,47 @@ def test_sort_by_distance end def test_sort_by_length - skip + words = ["heteromorph", "ancyloceratina", "bioengineering", "mathematical", "bug"] - # Your code goes here + transformed = [] + words.each do |word| + transformed << [word.length, word] + end + transformed = transformed.sort + sorted = [] + transformed.each do |sort_key, word| + sorted << word + end assert_equal ["bug", "heteromorph", "mathematical", "ancyloceratina", "bioengineering"], sorted end def test_sort_by_proximity_to_ten - skip + prices = [3.02, 9.91, 17.9, 10.01, 11.0] - # Your code goes here + transformed = [] + prices.each do |price| + transformed << [(10 - price).abs, price] + end + transformed = transformed.sort + sorted = [] + transformed.each do |sort_key, price| + sorted << price + end assert_equal [10.01, 9.91, 11.0, 3.02, 17.9], sorted end def test_sort_by_number_of_cents - skip + prices = [3.02, 9.91, 7.9, 10.01, 11.0] - # Your code goes here + transformed = [] + prices.each do |price | + transformed << [(price - price.floor), price] + end + transformed = transformed.sort + sorted = [] + transformed.each do |sort_key, price| + sorted << price + end assert_equal [11.0, 10.01, 3.02, 7.9, 9.91], sorted end - end \ No newline at end of file diff --git a/exercises/sort_by_test.rb b/exercises/test/sort_by_test.rb similarity index 80% rename from exercises/sort_by_test.rb rename to exercises/test/sort_by_test.rb index 91c6465..55ed6d9 100644 --- a/exercises/sort_by_test.rb +++ b/exercises/test/sort_by_test.rb @@ -15,36 +15,44 @@ def test_sort_alphabetically def test_sort_alphabetically_by_last_letter things = ["pill", "box", "glass", "water", "sponge"] sorted = things.sort_by do |thing| - # Your code goes here + thing[-1] end assert_equal ["sponge", "pill", "water", "glass", "box"], sorted end def test_sort_by_distance - skip + distances = ["1cm", "9cm", "30cm", "4cm", "2cm"] - # Your code goes here + sorted = distances.sort_by do |distance| + distance.to_i + end assert_equal ["1cm", "2cm", "4cm", "9cm", "30cm"], sorted end def test_sort_by_length - skip + words = ["heteromorph", "ancyloceratina", "bioengineering", "mathematical", "bug"] - # Your code goes here + sorted = words.sort_by do |word| + word.length + end assert_equal ["bug", "heteromorph", "mathematical", "ancyloceratina", "bioengineering"], sorted end def test_sort_by_proximity_to_ten - skip + prices = [3.02, 9.91, 17.9, 10.01, 11.0] - # Your code goes here + sorted = prices.sort_by do |price| + (10 - price).abs + end assert_equal [10.01, 9.91, 11.0, 3.02, 17.9], sorted end def test_sort_by_number_of_cents - skip + prices = [3.02, 9.91, 7.9, 10.01, 11.0] - # Your code goes here + sorted = prices.sort_by do |price| + price - price.floor + end assert_equal [11.0, 10.01, 3.02, 7.9, 9.91], sorted end