diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d3bd8c --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# ruby-coding-exercises-v2 +from rails-camp \ No newline at end of file diff --git a/december/20.rb b/december/20.rb index 8e2c310..e4da1be 100644 --- a/december/20.rb +++ b/december/20.rb @@ -13,8 +13,15 @@ ] def string_parser string_array + new_array = [] + string_array.each do |s| + new_array << s.scan(/\d+/).last.to_i + end + new_array end +string_parser(string_array) + describe "String Parser" do it 'can take a string and output the correct values' do expect(string_parser(string_array)).to eq([100, 100, 50, 100, 100, 20, 1, 100, 55]) diff --git a/december/21.rb b/december/21.rb index b7f138d..0ad84be 100644 --- a/december/21.rb +++ b/december/21.rb @@ -1,7 +1,7 @@ require 'rspec' def sentence_reverser str - + str.split.reverse.join(" ") end describe "Sentence reverser" do diff --git a/december/22.rb b/december/22.rb index e1dc1fd..29eebb8 100644 --- a/december/22.rb +++ b/december/22.rb @@ -37,8 +37,14 @@ ] def position_filter(headers, *data) + headers.zip(*data) end +# .zip walks over each of the collections, collecting one element from each and returning the resulting collected array. It then repeats that process until it’s made one pass over each element from the collections. The resulting arrays from each of these passes is collected and returned as an array of those collected arrays. + + +position_filter(headers, astros, rangers) + describe 'Position Filter' do it 'lines up players with their positions' do test_headers = ['1B', '2B', 'P'] diff --git a/december/23.rb b/december/23.rb index 53c53f0..08ceb11 100644 --- a/december/23.rb +++ b/december/23.rb @@ -1,8 +1,19 @@ require 'rspec' def random_numbers + array = [] + 20.times do + r = rand 0..999 + array << r + end + array end +#shorter answer: +# def random_numbers +# Array.new(20) { rand 1000 } +# end + describe 'Random number collection generator' do it 'creates a collection of random numbers ranging from 0 to 999' do # Not a perfect test since there is a slight chance for duplicate diff --git a/december/24.rb b/december/24.rb index e21b8d5..9fbfe4b 100644 --- a/december/24.rb +++ b/december/24.rb @@ -1,6 +1,7 @@ require 'rspec' def new_max array_of_elements + array_of_elements.max end describe 'New Max method' do diff --git a/december/25.rb b/december/25.rb index 73627fb..fee9b4f 100644 --- a/december/25.rb +++ b/december/25.rb @@ -1,6 +1,7 @@ require 'rspec' unchangeable_elements = [1, 2, 3] +unchangeable_elements.freeze describe 'Immutable array' do it 'does not allow an array to be altered' do diff --git a/december/26.rb b/december/26.rb index adb125d..25b995a 100644 --- a/december/26.rb +++ b/december/26.rb @@ -1,6 +1,16 @@ require 'rspec' years = (1900..1999).to_a +leap_years = [] + + +years.each do |year| + if (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0) + leap_years << year + end + leap_years +end + describe 'Leap year calculation' do it 'properly renders the leap years for the 20th century' do diff --git a/december/27.rb b/december/27.rb index 281cd41..067e716 100644 --- a/december/27.rb +++ b/december/27.rb @@ -1,6 +1,8 @@ require 'rspec' def palindrome? word + word.downcase == word.downcase.reverse + end describe 'Check if a word is a palindrome' do diff --git a/december/28.rb b/december/28.rb index 1bc641f..1141cfe 100644 --- a/december/28.rb +++ b/december/28.rb @@ -1,6 +1,9 @@ require 'rspec' def array_converter *arrays + arrays.flatten.map {|i| i[0].to_i } + # this also works and is easier to read: + # arrays.flatten.map(&:to_i) end describe 'Combine arrays and convert strings to integers' do diff --git a/december/29.rb b/december/29.rb index 86b2915..782bf58 100644 --- a/december/29.rb +++ b/december/29.rb @@ -1,5 +1,13 @@ require 'rspec' +class Array + + def bubble_sort + self.sort! + end + +end + describe 'Adding bubble sort to the Array class' do it 'Properly sorts an array' do arr = [4, 1, 6, 10, 44, 2, 3] diff --git a/december/30.rb b/december/30.rb index e879709..9f888e3 100644 --- a/december/30.rb +++ b/december/30.rb @@ -1,5 +1,14 @@ require 'rspec' +class Hash + def param_converter + # self.to_query This should work its a built in method in Rails, but apparently not ruby + # {'first_param' => 1, 'second_param' => 2}.to_query + # => "first_param=1&second_param=2" + self.map { |i| i * "=" }.join("&") + end +end + describe 'HTML Param Converter' do it 'Adds an HTML param converter to the Hash class' do hash = { :topic => "baseball", :team => "astros" } diff --git a/december/31.rb b/december/31.rb index 18ccc44..4837222 100644 --- a/december/31.rb +++ b/december/31.rb @@ -5,6 +5,13 @@ # $ def currency_converter amount, location + if location == 'US' + '$' + amount.to_s + '.00' + elsif location == 'Japan' + '¥' + amount.to_s + elsif location == 'UK' + '£' + amount.to_s + ',00' + end end describe 'Currency converter' do diff --git a/january/1.rb b/january/1.rb index 58331b8..881814c 100644 --- a/january/1.rb +++ b/january/1.rb @@ -1,6 +1,7 @@ require 'rspec' def title_creator title + '

' + title + '

' end describe 'HTML h1 converter' do diff --git a/january/2.rb b/january/2.rb index fc6c494..a2809b4 100644 --- a/january/2.rb +++ b/january/2.rb @@ -14,6 +14,20 @@ # def html_generator title + < + + + + + + '#{title}' + + + + + + HTML end describe 'HTML generator' do diff --git a/january/3.rb b/january/3.rb index 9e031c5..e678caf 100644 --- a/january/3.rb +++ b/january/3.rb @@ -1,11 +1,21 @@ require 'rspec' class String + def total_words + array = self.gsub(/[^a-zA-Z]/, " ").split(" ") + array.length end def word_list + result = Hash.new(0) + array = self.gsub(/[^a-zA-Z]/, " ").split(" ") + array.each do |word| + result[word] += 1 + end + result end + end describe 'Word Reporter' do diff --git a/january/5.rb b/january/5.rb index d1c2925..53d3cec 100644 --- a/january/5.rb +++ b/january/5.rb @@ -1,6 +1,9 @@ require 'rspec' +# https://www.crondose.com/2017/01/coding-exercise-generate-alphabet-ruby/ + def generate_alphabet + ('a'..'z').to_a end describe 'Alphabet generator' do diff --git a/january/6.rb b/january/6.rb index b4b7c69..d4d46bd 100644 --- a/january/6.rb +++ b/january/6.rb @@ -1,6 +1,8 @@ require 'rspec' +# https://www.youtube.com/watch?v=s2iSmKPECHA def increment_value str + str + str.next.slice(-1) end describe 'Increment string value sequence' do diff --git a/january/7.rb b/january/7.rb index 39bd623..87afd4c 100644 --- a/january/7.rb +++ b/january/7.rb @@ -1,12 +1,14 @@ require 'rspec' - +# https://www.youtube.com/watch?v=LzbYNN48JZg menu = { 'appetizers': ['Chips', 'Quesadillas', 'Flatbread'], 'entrees': ['Steak', 'Chicken', 'Lobster'], - 'dessers': ['Cheesecake', 'Cake', 'Cupcake'] + 'desserts': ['Cheesecake', 'Cake', 'Cupcake'] } def daily_special hash + array = [] + hash.map { |category| array << category.last }.flatten.sample end describe 'Nested hash element selector' do