Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

6 left to do #227

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions lib/questions.rb
Original file line number Diff line number Diff line change
@@ -1,152 +1,181 @@
# keep only the elements that start with an a
def select_elements_starting_with_a(array)
array.select { |x| x[0]=="a" }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surrounding space missing for operator ==.

end

# keep only the elements that start with a vowel
def select_elements_starting_with_vowel(array)
array.select { |x| x[0]=~ /[aeiou]/}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surrounding space missing for operator =~.
Space missing inside }.

end

# remove instances of nil (but NOT false) from an array
def remove_nils_from_array(array)
array.compact!
end

# remove instances of nil AND false from an array
def remove_nils_and_false_from_array(array)
array.compact!.delete_if{ |x| x==false }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space missing to the left of {.
Surrounding space missing for operator ==.

end

# don't reverse the array, but reverse every word inside it. e.g.
# ['dog', 'monkey'] becomes ['god', 'yeknom']
def reverse_every_element_in_array(array)
array.map { |x| x.reverse }
end

# given an array of student names, like ['Bob', 'Dave', 'Clive']
# give every possible pairing - in this case:
# [['Bob', 'Clive'], ['Bob', 'Dave'], ['Clive', 'Dave']]
# make sure you don't have the same pairing twice,
def every_possible_pairing_of_students(array)
array.combination(2).to_a
end

# discard the first 3 elements of an array,
# e.g. [1, 2, 3, 4, 5, 6] becomes [4, 5, 6]
def all_elements_except_first_3(array)
array[3...array.length]
end

# add an element to the beginning of an array
def add_element_to_beginning_of_array(array, element)
array.insert(0, element)
end

# sort an array of words by their last letter, e.g.
# ['sky', 'puma', 'maker'] becomes ['puma', 'maker', 'sky']
def array_sort_by_last_letter_of_word(array)
array.map{|x| x.reverse}.sort.map{|x| x.reverse}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space missing to the left of {.
Space between { and | missing.
Space missing inside }.

end

# cut strings in half, and return the first half, e.g.
# 'banana' becomes 'ban'. If the string is an odd number of letters
# round up - so 'apple' becomes 'app'
def get_first_half_of_string(string)
string[0...((string.length.to_f/2).ceil)]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surrounding space missing for operator /.

end

# turn a positive integer into a negative integer. A negative integer
# stays negative
def make_numbers_negative(number)
number<0 ? number : -number

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use number.negative? instead of number<0.
Surrounding space missing for operator <.

end

# turn an array of numbers into two arrays of numbers, one an array of
# even numbers, the other an array of odd numbers
# even numbers come first
# so [1, 2, 3, 4, 5, 6] becomes [[2, 4, 6], [1, 3, 5]]
def separate_array_into_even_and_odd_numbers(array)
[] << array.select{|x| x.even?} << array.select{|x| x.odd?}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space missing to the left of {.
Space between { and | missing.
Space missing inside }.

end

# count the numbers of elements in an element which are palindromes
# a palindrome is a word that's the same backwards as forward
# e.g. 'bob'. So in the array ['bob', 'radar', 'eat'], there
# are 2 palindromes (bob and radar), so the method should return 2
def number_of_elements_that_are_palindromes(array)
array.select{|x| x.reverse==x}.length

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Space missing to the left of {.
Space between { and | missing.
Surrounding space missing for operator ==.
Space missing inside }.

end

# return the shortest word in an array
def shortest_word_in_array(array)
array.min{|a,b| a.length <=> b.length }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use min_by(&:length) instead of min { |a, b| a.length <=> b.length }.
Space missing to the left of {.
Space between { and | missing.
Space missing after comma.

end

# return the shortest word in an array
def longest_word_in_array(array)
array.max {|a,b| a.length <=> b.length}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use max_by(&:length) instead of max { |a, b| a.length <=> b.length }.
Space between { and | missing.
Space missing after comma.
Space missing inside }.

end

# add up all the numbers in an array, so [1, 3, 5, 6]
# returns 15
def total_of_array(array)
array.sum
end

# turn an array into itself repeated twice. So [1, 2, 3]
# becomes [1, 2, 3, 1, 2, 3]
def double_array(array)
array * 2
end

# convert a symbol into a string
def turn_symbol_into_string(symbol)
symbol.to_s
end

# get the average from an array, rounded to the nearest integer
# so [10, 15, 25] should return 17
def average_of_array(array)
((array.sum.to_f/array.length.to_f)+0.5).to_i

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surrounding space missing for operator /.
Surrounding space missing for operator +.

end

# get all the elements in an array, up until the first element
# which is greater than five. e.g.
# [1, 3, 5, 4, 1, 2, 6, 2, 1, 3, 7]
# becomes [1, 3, 5, 4, 1, 2]
def get_elements_until_greater_than_five(array)
array.take_while { |x| x < 6 }
end

# turn an array (with an even number of elements) into a hash, by
# pairing up elements. e.g. ['a', 'b', 'c', 'd'] becomes
# {'a' => 'b', 'c' => 'd'}
def convert_array_to_a_hash(array)
array.each_slice(2).to_a.to_h
end

# get all the letters used in an array of words and return
# it as a array of letters, in alphabetical order
# . e.g. the array ['cat', 'dog', 'fish'] becomes
# ['a', 'c', 'd', 'f', 'g', 'h', 'i', 'o', 's', 't']
def get_all_letters_in_array_of_words(array)
array.join.split("").sort
end

# swap the keys and values in a hash. e.g.
# {'a' => 'b', 'c' => 'd'} becomes
# {'b' => 'a', 'd' => 'c'}
def swap_keys_and_values_in_a_hash(hash)
hash.invert
end

# in a hash where the keys and values are all numbers
# add all the keys and all the values together, e.g.
# {1 => 1, 2 => 2} becomes 6
def add_together_keys_and_values(hash)
hash.flatten(2).sum
end

# take out all the capital letters from a string
# so 'Hello JohnDoe' becomes 'ello ohnoe'
def remove_capital_letters_from_string(string)
string.tr("A-Z", "")
end

# round up a float up and convert it to an Integer,
# so 3.214 becomes 4
def round_up_number(float)
float.ceil.to_i
end

# round down a float up and convert it to an Integer,
# so 9.52 becomes 9
def round_down_number(float)
float.floor.to_i
end

# take a date and format it like dd/mm/yyyy, so Halloween 2013
# becomes 31/10/2013
def format_date_nicely(date)
date.strftime("%d/%m/%Y")
end

# get the domain name *without* the .com part, from an email address
# so alex@makersacademy.com becomes makersacademy
def get_domain_name_from_email_address(email)
email[email.index("@")+1...email.index(".")]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surrounding space missing for operator +.

end

# capitalize the first letter in each word of a string,
Expand All @@ -155,30 +184,41 @@ def get_domain_name_from_email_address(email)
# 'the lion the witch and the wardrobe' becomes
# 'The Lion the Witch and the Wardrobe'
def titleize_a_string(string)
# array = string.split
# array.each do |word|
# unless word=="a" || word =="and" || word=="the"
# word.capitalize!
# end
end

# return true if a string contains any special characters
# where 'special character' means anything apart from the letters
# a-z (uppercase and lower) or numbers
def check_a_string_for_special_characters(string)
string.length != string.gsub!(/[^0-9A-Za-z]/, '').length
end

# get the upper limit of a range. e.g. for the range 1..20, you
# should return 20
def get_upper_limit_of(range)
range.last
end

# should return true for a 3 dot range like 1...20, false for a
# normal 2 dot range
def is_a_3_dot_range?(range)
range.to_s.include?("...")
end

# get the square root of a number
def square_root_of(number)
Math.sqrt(number)
end

# count the number of words in a file
def word_count_a_file(file_path)
file = File.open(file_path, "r")
file.read.split.length
end

# --- tougher ones ---
Expand Down Expand Up @@ -208,6 +248,8 @@ def your_birthday_is_on_a_friday_in_the_year(birthday)
# and 1 that is 4 letters long. Return it as a hash in the format
# word_length => count, e.g. {2 => 1, 3 => 5, 4 => 1}
def count_words_of_each_length_in_a_file(file_path)
# file = File.open(file_path, "r")
# file.read.split.each
end

# implement fizzbuzz without modulo, i.e. the % method
Expand Down