Minor fixes

This commit is contained in:
Vitor Oliveira 2021-09-03 13:24:58 -07:00
parent f3c42a5829
commit 8bb781f790
59 changed files with 471 additions and 501 deletions

0
360 Normal file
View file

View file

@ -37,7 +37,7 @@
# @return {String[]} # @return {String[]}
def generate_parenthesis(n) def generate_parenthesis(n)
parenthesis = [] parenthesis = []
backtrack(parenthesis, "", 0, 0, n) backtrack(parenthesis, '', 0, 0, n)
parenthesis parenthesis
end end
@ -47,13 +47,9 @@ def backtrack(parenthesis, curr, open, close, max)
return return
end end
if open < max backtrack(parenthesis, curr + '(', open + 1, close, max) if open < max
backtrack(parenthesis, curr + "(", open + 1, close, max)
end
if close < open backtrack(parenthesis, curr + ')', open, close + 1, max) if close < open
backtrack(parenthesis, curr + ")", open, close + 1, max)
end
end end
n = 3 n = 3

View file

@ -1,12 +1,12 @@
def binary_and(x, y) def binary_and(x, y)
raise 'Input must only contain positive integers' if x < 0 or y < 0 raise 'Input must only contain positive integers' if (x < 0) || (y < 0)
"0b" + (x & y).to_s(2) '0b' + (x & y).to_s(2)
end end
begin begin
binary_and(-1, 0) binary_and(-1, 0)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# Input must only contain positive integers # Input must only contain positive integers

View file

@ -8,7 +8,7 @@ end
begin begin
binary_count_setbits(-1) binary_count_setbits(-1)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# Input must be a positive integer # Input must be a positive integer

View file

@ -5,7 +5,7 @@ def binary_count_trailing_zeroes(x)
count = 0 count = 0
binary.chars.reverse_each do |char| binary.chars.reverse_each do |char|
break if char == "1" break if char == '1'
count += 1 count += 1
end end
@ -15,7 +15,7 @@ end
begin begin
binary_count_trailing_zeroes(-1) binary_count_trailing_zeroes(-1)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# Input must be a positive integer # Input must be a positive integer
@ -32,5 +32,5 @@ puts binary_count_trailing_zeroes(1024)
puts binary_count_trailing_zeroes(54) puts binary_count_trailing_zeroes(54)
# 1 # 1
puts binary_count_trailing_zeroes(121024) puts binary_count_trailing_zeroes(121_024)
# 6 # 6

View file

@ -1,12 +1,12 @@
def binary_or(x, y) def binary_or(x, y)
raise 'Input must only contain positive integers' if x < 0 or y < 0 raise 'Input must only contain positive integers' if (x < 0) || (y < 0)
"0b" + (x | y).to_s(2) '0b' + (x | y).to_s(2)
end end
begin begin
binary_or(-1, 0) binary_or(-1, 0)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# Input must only contain positive integers # Input must only contain positive integers
@ -21,4 +21,3 @@ puts binary_or(0, 1023)
# 0b1111111111 # 0b1111111111
puts binary_or(16, 58) puts binary_or(16, 58)
# 0b110010 # 0b110010

View file

@ -1,24 +1,24 @@
def binary_xor(x, y) def binary_xor(x, y)
raise 'Input must only contain positive integers' if x < 0 or y < 0 raise 'Input must only contain positive integers' if (x < 0) || (y < 0)
binary_x = x.to_s(2) binary_x = x.to_s(2)
binary_y = y.to_s(2) binary_y = y.to_s(2)
if binary_x.length > binary_y.length if binary_x.length > binary_y.length
prefix = "0" * (binary_x.length - binary_y.length) prefix = '0' * (binary_x.length - binary_y.length)
binary_y = prefix + binary_y binary_y = prefix + binary_y
elsif binary_y.length > binary_x.length elsif binary_y.length > binary_x.length
prefix = "0" * (binary_y.length - binary_x.length) prefix = '0' * (binary_y.length - binary_x.length)
binary_x = prefix + binary_x binary_x = prefix + binary_x
end end
result = "0b" result = '0b'
binary_x.each_char.with_index do |x_char, i| binary_x.each_char.with_index do |x_char, i|
y_char = binary_y[i] y_char = binary_y[i]
if (x_char == "1" && y_char != "1") || (x_char != "1" && y_char == "1") result += if (x_char == '1' && y_char != '1') || (x_char != '1' && y_char == '1')
result += "1" '1'
else else
result += "0" '0'
end end
end end
@ -27,7 +27,7 @@ end
begin begin
binary_xor(-1, 0) binary_xor(-1, 0)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# Input must only contain positive integers # Input must only contain positive integers

View file

@ -1,5 +1,5 @@
def set_bit(x, position) def set_bit(x, position)
raise "position must be >= 0" if position < 0 raise 'position must be >= 0' if position < 0
x | (1 << position) x | (1 << position)
end end
@ -18,14 +18,13 @@ puts set_bit(8, 4)
begin begin
puts set_bit(8, -4) puts set_bit(8, -4)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# position must be >= 0 # position must be >= 0
def clear_bit(x, position) def clear_bit(x, position)
raise "position must be > 0" if position < 0 raise 'position must be > 0' if position < 0
x & ~(1 << position) x & ~(1 << position)
end end
@ -44,13 +43,13 @@ puts clear_bit(24, 4)
begin begin
puts clear_bit(0, -4) puts clear_bit(0, -4)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# position must be > 0 # position must be > 0
def flip_bit(x, position) def flip_bit(x, position)
raise "position must be > 0" if position < 0 raise 'position must be > 0' if position < 0
x ^ (1 << position) x ^ (1 << position)
end end
@ -69,13 +68,13 @@ puts flip_bit(24, 4)
begin begin
puts flip_bit(0, -4) puts flip_bit(0, -4)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# position must be > 0 # position must be > 0
def is_bit_set(x, position) def is_bit_set(x, position)
raise "position must be > 0" if position < 0 raise 'position must be > 0' if position < 0
((x >> position) & 1) == 1 ((x >> position) & 1) == 1
end end
@ -94,7 +93,7 @@ puts is_bit_set(24, 4)
begin begin
puts is_bit_set(0, -4) puts is_bit_set(0, -4)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
# position must be > 0 # position must be > 0

View file

@ -5,48 +5,48 @@ module TemperatureConversion
def self.celsius_to_kelvin(celsius_input) def self.celsius_to_kelvin(celsius_input)
kelvin_output = (celsius_input + 273.15).round(2) kelvin_output = (celsius_input + 273.15).round(2)
puts "#{celsius_input}°C = #{kelvin_output}K" puts "#{celsius_input}°C = #{kelvin_output}K"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# kelvin -> celsius = vale of kelvin - 273.15 => °C # kelvin -> celsius = vale of kelvin - 273.15 => °C
def self.kelvin_to_celsius(kelvin_input) def self.kelvin_to_celsius(kelvin_input)
celsius_output = (kelvin_input - 273.15).round(2) celsius_output = (kelvin_input - 273.15).round(2)
puts "#{kelvin_input}K = #{celsius_output}°C" puts "#{kelvin_input}K = #{celsius_output}°C"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# celsius -> fahrenheit = (value of celsius * 9 / 5) + 32 => °F # celsius -> fahrenheit = (value of celsius * 9 / 5) + 32 => °F
def self.celsius_to_fahrenheit(celsius_input) def self.celsius_to_fahrenheit(celsius_input)
fahrenheit_output = ((celsius_input * 9 / 5) + 32).round(2) fahrenheit_output = ((celsius_input * 9 / 5) + 32).round(2)
puts "#{celsius_input}°C = #{fahrenheit_output}°F" puts "#{celsius_input}°C = #{fahrenheit_output}°F"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# fahrenheit -> celsius = (value of fahrenheit - 32) * 5 / 9 => °C # fahrenheit -> celsius = (value of fahrenheit - 32) * 5 / 9 => °C
def self.fahrenheit_to_celsius(fahrenheit_input) def self.fahrenheit_to_celsius(fahrenheit_input)
celsius_output = ((fahrenheit_input - 32) * 5 / 9).round(2) celsius_output = ((fahrenheit_input - 32) * 5 / 9).round(2)
puts "#{fahrenheit_input}°F = #{celsius_output}°C" puts "#{fahrenheit_input}°F = #{celsius_output}°C"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# fahrenheit -> kelvin = [(value of fahrenheit - 32) * 5 / 9] + 273.15 => K # fahrenheit -> kelvin = [(value of fahrenheit - 32) * 5 / 9] + 273.15 => K
def self.fahrenheit_to_kelvin(fahrenheit_input) def self.fahrenheit_to_kelvin(fahrenheit_input)
kelvin_output = ((fahrenheit_input - 32) * 5 / 9).round(2).round(2) kelvin_output = ((fahrenheit_input - 32) * 5 / 9).round(2).round(2)
puts "#{fahrenheit_input}°F = #{kelvin_output}K" puts "#{fahrenheit_input}°F = #{kelvin_output}K"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# kelvin -> fahrenheit = [(value of kelvin - 32) * 5 / 9] + 273.15 => K # kelvin -> fahrenheit = [(value of kelvin - 32) * 5 / 9] + 273.15 => K
def self.kelvin_to_fahrenheit(kelvin_input) def self.kelvin_to_fahrenheit(kelvin_input)
fahrenheit_output = (((kelvin_input - 273.15) * 9 / 5) + 32).round(2).round(2) fahrenheit_output = (((kelvin_input - 273.15) * 9 / 5) + 32).round(2).round(2)
puts "#{kelvin_input}K = #{fahrenheit_output}°F" puts "#{kelvin_input}K = #{fahrenheit_output}°F"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
end end
@ -55,18 +55,18 @@ TemperatureConversion.celsius_to_kelvin(20)
TemperatureConversion.kelvin_to_celsius(20) TemperatureConversion.kelvin_to_celsius(20)
# Invalid input # Invalid input
TemperatureConversion.kelvin_to_celsius("a") TemperatureConversion.kelvin_to_celsius('a')
# celsius <-> fahrenheit # celsius <-> fahrenheit
TemperatureConversion.celsius_to_fahrenheit(-20) TemperatureConversion.celsius_to_fahrenheit(-20)
TemperatureConversion.fahrenheit_to_celsius(68) TemperatureConversion.fahrenheit_to_celsius(68)
# Invalid input # Invalid input
TemperatureConversion.celsius_to_fahrenheit("abc") TemperatureConversion.celsius_to_fahrenheit('abc')
# fahrenheit <-> kelvin # fahrenheit <-> kelvin
TemperatureConversion.fahrenheit_to_kelvin(60) TemperatureConversion.fahrenheit_to_kelvin(60)
TemperatureConversion.kelvin_to_fahrenheit(-60) TemperatureConversion.kelvin_to_fahrenheit(-60)
# Invalid input # Invalid input
TemperatureConversion.fahrenheit_to_kelvin("60") TemperatureConversion.fahrenheit_to_kelvin('60')

View file

@ -3,7 +3,7 @@
module WeightConversion module WeightConversion
# Kilogram -> Gram = (kilogram_value * 1000) grams # Kilogram -> Gram = (kilogram_value * 1000) grams
def self.kilogram_to_gram(kilogram_input) def self.kilogram_to_gram(kilogram_input)
raise StandardError unless Integer === kilogram_input raise StandardError unless kilogram_input.is_a?(Integer)
gram = kilogram_input * 1000 gram = kilogram_input * 1000
@ -40,7 +40,7 @@ module WeightConversion
# Pound -> Kilogram = (pound_input / 2.205) kg # Pound -> Kilogram = (pound_input / 2.205) kg
def self.pound_to_kilogram(pound_input) def self.pound_to_kilogram(pound_input)
raise StandardError unless Integer === pound_input raise StandardError unless pound_input.is_a?(Integer)
kilogram = (pound_input / 2.205).round(2) kilogram = (pound_input / 2.205).round(2)
@ -70,37 +70,37 @@ puts WeightConversion.pound_to_kilogram(100)
# #
begin begin
puts WeightConversion.kilogram_to_gram("a") puts WeightConversion.kilogram_to_gram('a')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
begin begin
puts WeightConversion.kilogram_to_gram("3000") puts WeightConversion.kilogram_to_gram('3000')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
begin begin
puts WeightConversion.kilogram_to_gram("16") puts WeightConversion.kilogram_to_gram('16')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
begin begin
puts WeightConversion.kilogram_to_gram("x ") puts WeightConversion.kilogram_to_gram('x ')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
begin begin
puts WeightConversion.kilogram_to_gram("weight") puts WeightConversion.kilogram_to_gram('weight')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
begin begin
puts WeightConversion.kilogram_to_gram("100") puts WeightConversion.kilogram_to_gram('100')
rescue StandardError rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end

View file

@ -20,9 +20,7 @@
# Time complexity: O(n) # Time complexity: O(n)
# #
def add_digits(num) def add_digits(num)
if num.to_s.length < 2 return num if num.to_s.length < 2
return num
end
digits_to_sum = num.to_s.split('') digits_to_sum = num.to_s.split('')
sum = 0 sum = 0

View file

@ -19,9 +19,8 @@ def num_identical_pairs(nums)
target = num target = num
nums.each_with_index do |num, j| nums.each_with_index do |num, j|
next if i >= j next if i >= j
if num == target
count += 1 count += 1 if num == target
end
end end
end end
count count

View file

@ -25,6 +25,7 @@ def intersect(arr1, arr2)
shorter.each do |matcher| shorter.each do |matcher|
longer.each do |number| longer.each do |number|
next if number != matcher next if number != matcher
result.push(number) result.push(number)
break break
end end
@ -60,7 +61,7 @@ def intersect(arr1, arr2)
hash = Hash.new(0) hash = Hash.new(0)
arr2.each {|num| hash[num] += 1 } arr2.each { |num| hash[num] += 1 }
arr1.each do |num| arr1.each do |num|
if hash.has_key?(num) if hash.has_key?(num)

View file

@ -19,13 +19,13 @@
# Time complexity: O(n) # Time complexity: O(n)
# #
def remove_elements(nums, val) def remove_elements(nums, val)
nums.delete_if{ |num| num == val } nums.delete_if { |num| num == val }
nums.length nums.length
end end
puts remove_elements([3,2,2,3], 3) puts remove_elements([3, 2, 2, 3], 3)
# => 2 # => 2
puts remove_elements([0,1,2,2,3,0,4,2], 2) puts remove_elements([0, 1, 2, 2, 3, 0, 4, 2], 2)
# => 5 # => 5
# #
@ -37,20 +37,20 @@ def remove_elements(nums, val)
result_length = nums.length result_length = nums.length
shift_length = 0 shift_length = 0
nums.each_with_index do |num, i| nums.each_with_index do |num, i|
if num == val next unless num == val
nums.delete_at(i) nums.delete_at(i)
nums.unshift('removed') nums.unshift('removed')
result_length -=1 result_length -= 1
shift_length += 1 shift_length += 1
end end
end
nums.shift(shift_length) nums.shift(shift_length)
result_length result_length
end end
puts remove_elements([3,2,2,3], 3) puts remove_elements([3, 2, 2, 3], 3)
# => 2 # => 2
puts remove_elements([0,1,2,2,3,0,4,2], 2) puts remove_elements([0, 1, 2, 2, 3, 0, 4, 2], 2)
# => 5 # => 5
# #
@ -78,9 +78,9 @@ def remove_element(nums, val)
pointer1 pointer1
end end
puts remove_elements([3,2,2,3], 3) puts remove_elements([3, 2, 2, 3], 3)
# => 2 # => 2
puts remove_elements([0,1,2,2,3,0,4,2], 2) puts remove_elements([0, 1, 2, 2, 3, 0, 4, 2], 2)
# => 5 # => 5
# #
@ -111,7 +111,7 @@ def remove_element(nums, val)
pointer1 pointer1
end end
puts remove_elements([3,2,2,3], 3) puts remove_elements([3, 2, 2, 3], 3)
# => 2 # => 2
puts remove_elements([0,1,2,2,3,0,4,2], 2) puts remove_elements([0, 1, 2, 2, 3, 0, 4, 2], 2)
# => 5 # => 5

View file

@ -45,12 +45,12 @@ def find_richest_customer_wealth(accounts)
summed_accounts.push(summed) summed_accounts.push(summed)
end end
summed_accounts.sort.pop() summed_accounts.sort.pop
end end
puts find_richest_customer_wealth([[1,2,3],[3,2,1]]) puts find_richest_customer_wealth([[1, 2, 3], [3, 2, 1]])
# => 6 # => 6
puts find_richest_customer_wealth([[1,5],[7,3],[3,5]]) puts find_richest_customer_wealth([[1, 5], [7, 3], [3, 5]])
# => 10 # => 10
puts find_richest_customer_wealth([[2,8,7],[7,1,3],[1,9,5]]) puts find_richest_customer_wealth([[2, 8, 7], [7, 1, 3], [1, 9, 5]])
# => 17 # => 17

View file

@ -28,8 +28,8 @@
# #
def shuffle(nums, n) def shuffle(nums, n)
result = [] result = []
(0..n-1).count do |i| (0..n - 1).count do |i|
result.push(nums[i], nums[i+n]) result.push(nums[i], nums[i + n])
end end
result result
end end
@ -55,7 +55,7 @@ print(shuffle(nums, n))
def shuffle(nums, n) def shuffle(nums, n)
current_index = 1 current_index = 1
(0..n-1).each do |i| (0..n - 1).each do |i|
nums.insert(current_index, nums.delete_at(i + n)) nums.insert(current_index, nums.delete_at(i + n))
current_index += 2 current_index += 2
end end
@ -88,8 +88,8 @@ def shuffle(nums, n)
while p1 < n while p1 < n
result.push(nums[p1], nums[p2]) result.push(nums[p1], nums[p2])
p1 +=1 p1 += 1
p2 +=1 p2 += 1
end end
result result

View file

@ -18,7 +18,7 @@ def single_number(nums)
result_hash = {} result_hash = {}
nums.each do |num| nums.each do |num|
if result_hash[num] if result_hash[num]
result_hash[num] +=1 result_hash[num] += 1
else else
result_hash[num] = 1 result_hash[num] = 1
end end

View file

@ -28,16 +28,14 @@
# Time Complexity: O(n) # Time Complexity: O(n)
# Space Complexity: O(1) # Space Complexity: O(1)
def almost_palindrome_checker(string) def almost_palindrome_checker(string)
p1 = 0 p1 = 0
p2 = string.length - 1 p2 = string.length - 1
array = string.split('') array = string.split('')
while p1 < p2 while p1 < p2
if array[p1] != array[p2] return palindrome_checker(array, p1, p2 - 1) || palindrome_checker(array, p1 + 1, p2) if array[p1] != array[p2]
return palindrome_checker(array, p1, p2 - 1) || palindrome_checker(array, p1 + 1, p2)
end
p1 += 1 p1 += 1
p2 -= 1 p2 -= 1
end end
@ -47,9 +45,8 @@ end
def palindrome_checker(array, p1, p2) def palindrome_checker(array, p1, p2)
while p1 < p2 while p1 < p2
if array[p1] != array[p2] return false if array[p1] != array[p2]
return false
end
p1 += 1 p1 += 1
p2 -= 1 p2 -= 1
end end

View file

@ -36,17 +36,15 @@ def find_jewels(jewels, stones)
result = 0 result = 0
jewels_array.each do |jewel| jewels_array.each do |jewel|
stones_array.each do |stone| stones_array.each do |stone|
if jewel == stone result += 1 if jewel == stone
result += 1
end
end end
end end
result result
end end
puts find_jewels("aA", "aAAbbbb") puts find_jewels('aA', 'aAAbbbb')
# => 3 # => 3
puts find_jewels("z", "ZZ") puts find_jewels('z', 'ZZ')
# => 0 # => 0
# #
@ -80,7 +78,7 @@ def find_jewels(jewels, stones)
result result
end end
puts find_jewels("aA", "aAAbbbb") puts find_jewels('aA', 'aAAbbbb')
# => 3 # => 3
puts find_jewels("z", "ZZ") puts find_jewels('z', 'ZZ')
# => 0 # => 0

View file

@ -26,9 +26,7 @@ def remove_vowels(s)
start_array = s.split('') start_array = s.split('')
start_array.each do |letter| start_array.each do |letter|
if letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u' result_array.push(letter) if letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u'
result_array.push(letter)
end
end end
result_array.join('') result_array.join('')

View file

@ -20,7 +20,8 @@ def is_valid_sudoku(board)
board.each do |row| board.each do |row|
row_hash = Hash.new(0) row_hash = Hash.new(0)
row.each do |num| row.each do |num|
next if num == "." next if num == '.'
row_hash[num] += 1 row_hash[num] += 1
end end
rows << row_hash rows << row_hash
@ -28,10 +29,8 @@ def is_valid_sudoku(board)
# check each row hash for duplicated value # check each row hash for duplicated value
rows.each do |row| rows.each do |row|
row.each do |k, v| row.each do |_k, v|
if v > 1 return false if v > 1
return false
end
end end
end end
@ -39,7 +38,8 @@ def is_valid_sudoku(board)
(0..8).each do |i| (0..8).each do |i|
column_hash = Hash.new(0) column_hash = Hash.new(0)
board.each do |row| board.each do |row|
next if row[i] == "." next if row[i] == '.'
column_hash[row[i]] += 1 column_hash[row[i]] += 1
columns << column_hash columns << column_hash
end end
@ -47,10 +47,8 @@ def is_valid_sudoku(board)
# check each column hash for duplicated value # check each column hash for duplicated value
columns.each do |column| columns.each do |column|
column.each do |k, v| column.each do |_k, v|
if v > 1 return false if v > 1
return false
end
end end
end end
@ -58,17 +56,20 @@ def is_valid_sudoku(board)
(0..2).each do |i| (0..2).each do |i|
grid_hash = Hash.new(0) grid_hash = Hash.new(0)
board.first(3).each do |row| board.first(3).each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board[3..5].each do |row| board[3..5].each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board.each do |row| board.each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
@ -76,17 +77,20 @@ def is_valid_sudoku(board)
(3..5).each do |i| (3..5).each do |i|
grid_hash = Hash.new(0) grid_hash = Hash.new(0)
board.first(3).each do |row| board.first(3).each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board[3..5].each do |row| board[3..5].each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board.each do |row| board.each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
@ -94,17 +98,20 @@ def is_valid_sudoku(board)
(6..8).last(3).each do |i| (6..8).last(3).each do |i|
grid_hash = Hash.new(0) grid_hash = Hash.new(0)
board.first(3).each do |row| board.first(3).each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board[3..5].each do |row| board[3..5].each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
board.each do |row| board.each do |row|
next if row[i] == "." next if row[i] == '.'
grid_hash[row[i]] += 1 grid_hash[row[i]] += 1
grids << grid_hash grids << grid_hash
end end
@ -112,63 +119,61 @@ def is_valid_sudoku(board)
# check each grid hash for duplicated value # check each grid hash for duplicated value
grids.each do |grid| grids.each do |grid|
grid.each do |k, v| grid.each do |_k, v|
if v > 1 return false if v > 1
return false
end
end end
end end
true true
end end
board = [["5","3",".",".","7",".",".",".","."], board = [['5', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => true # => true
board = [["8","3",".",".","7",".",".",".","."], board = [['8', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in column # explanation: duplicated value in column
board = [["8","3",".",".","7",".","3",".","."], board = [['8', '3', '.', '.', '7', '.', '3', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in row # explanation: duplicated value in row
board = [["8","3",".",".","7",".",".",".","."], board = [['8', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
[".",".",".",".","6",".",".",".","3"], ['.', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in 3x3 grid # explanation: duplicated value in 3x3 grid
@ -181,6 +186,7 @@ require 'set'
def is_valid_sudoku(board) def is_valid_sudoku(board)
return false unless check_rows(board) return false unless check_rows(board)
return false unless check_cols(board) return false unless check_cols(board)
row = -3 row = -3
while (row += 3) < 9 while (row += 3) < 9
col = - 3 col = - 3
@ -198,8 +204,9 @@ def check_grid(board, start_point)
ss = Set.new ss = Set.new
(row..(row + 2)).each do |cur_row| (row..(row + 2)).each do |cur_row|
(col..(col + 2)).each do |cur_col| (col..(col + 2)).each do |cur_col|
next if board[cur_row][cur_col] == "." next if board[cur_row][cur_col] == '.'
return false if ss.member?(board[cur_row][cur_col]) return false if ss.member?(board[cur_row][cur_col])
ss.add board[cur_row][cur_col] ss.add board[cur_row][cur_col]
end end
end end
@ -209,8 +216,9 @@ end
def check_col(board, col) def check_col(board, col)
ss = Set.new ss = Set.new
(0..8).each do |row| (0..8).each do |row|
next if board[row][col] == "." next if board[row][col] == '.'
return false if ss.member?(board[row][col]) return false if ss.member?(board[row][col])
ss.add board[row][col] ss.add board[row][col]
end end
true true
@ -219,8 +227,9 @@ end
def check_row(board, row) def check_row(board, row)
ss = Set.new ss = Set.new
(0..8).each do |col| (0..8).each do |col|
next if board[row][col] == "." next if board[row][col] == '.'
return false if ss.member?(board[row][col]) return false if ss.member?(board[row][col])
ss.add board[row][col] ss.add board[row][col]
end end
true true
@ -240,53 +249,53 @@ def check_cols(board)
true true
end end
board = [["5","3",".",".","7",".",".",".","."], board = [['5', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => true # => true
board = [["8","3",".",".","7",".",".",".","."], board = [['8', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in column # explanation: duplicated value in column
board = [["8","3",".",".","7",".","3",".","."], board = [['8', '3', '.', '.', '7', '.', '3', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
["8",".",".",".","6",".",".",".","3"], ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in row # explanation: duplicated value in row
board = [["8","3",".",".","7",".",".",".","."], board = [['8', '3', '.', '.', '7', '.', '.', '.', '.'],
["6",".",".","1","9","5",".",".","."], ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
[".","9","8",".",".",".",".","6","."], ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
[".",".",".",".","6",".",".",".","3"], ['.', '.', '.', '.', '6', '.', '.', '.', '3'],
["4",".",".","8",".","3",".",".","1"], ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
["7",".",".",".","2",".",".",".","6"], ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
[".","6",".",".",".",".","2","8","."], ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
[".",".",".","4","1","9",".",".","5"], ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
[".",".",".",".","8",".",".","7","9"]] ['.', '.', '.', '.', '8', '.', '.', '7', '9']]
print(is_valid_sudoku(board)) print(is_valid_sudoku(board))
# => false # => false
# explanation: duplicated value in 3x3 grid # explanation: duplicated value in 3x3 grid

View file

@ -71,9 +71,7 @@ def two_sum(nums, target)
target_difference = target - num target_difference = target - num
nums.each_with_index do |num, j| nums.each_with_index do |num, j|
if i != j && num == target_difference return [i, j] if i != j && num == target_difference
return [i, j]
end
end end
end end
end end

View file

@ -38,7 +38,7 @@ def is_anagram(s, t)
counter[t[i]] -= 1 counter[t[i]] -= 1
end end
counter.each do |k, v| counter.each do |_k, v|
return false unless v == 0 return false unless v == 0
end end

View file

@ -32,7 +32,7 @@ def arrays_intersection(arr1, arr2, arr3)
add_to_hash(arr2, hash) add_to_hash(arr2, hash)
add_to_hash(arr3, hash) add_to_hash(arr3, hash)
hash.select { |key, value| value == 3 }.keys hash.select { |_key, value| value == 3 }.keys
end end
def add_to_hash(arr, hash) def add_to_hash(arr, hash)

View file

@ -44,8 +44,8 @@ def common_characters(arr)
result result
end end
puts common_characters(["bella","label","roller"]) puts common_characters(%w[bella label roller])
# => ["e","l","l"] # => ["e","l","l"]
puts common_characters(["cool","lock","cook"]) puts common_characters(%w[cool lock cook])
# => ["c","o"] # => ["c","o"]

View file

@ -45,20 +45,20 @@ def isomorphic_strings_check(s, t)
else else
# return false if char2 is already mapped to a different character # return false if char2 is already mapped to a different character
return false if set.include?(char2) return false if set.include?(char2)
# checks passed: add new character map and track that char2 has been mapped # checks passed: add new character map and track that char2 has been mapped
map[char1] = char2 map[char1] = char2
set << char2 set << char2
end end
end end
return true true
end end
puts isomorphic_strings_check("egg", "add") puts isomorphic_strings_check('egg', 'add')
# => true # => true
puts isomorphic_strings_check("foo", "bar") puts isomorphic_strings_check('foo', 'bar')
# => false # => false
puts isomorphic_strings_check("paper", "title") puts isomorphic_strings_check('paper', 'title')
# => true # => true

View file

@ -42,18 +42,16 @@ def find_richest_customer_wealth(accounts)
end end
highest_value = 0 highest_value = 0
result_hash.each do |k, v| result_hash.each do |_k, v|
if v > highest_value highest_value = v if v > highest_value
highest_value = v
end
end end
highest_value highest_value
end end
puts find_richest_customer_wealth([[1,2,3],[3,2,1]]) puts find_richest_customer_wealth([[1, 2, 3], [3, 2, 1]])
# => 6 # => 6
puts find_richest_customer_wealth([[1,5],[7,3],[3,5]]) puts find_richest_customer_wealth([[1, 5], [7, 3], [3, 5]])
# => 10 # => 10
puts find_richest_customer_wealth([[2,8,7],[7,1,3],[1,9,5]]) puts find_richest_customer_wealth([[2, 8, 7], [7, 1, 3], [1, 9, 5]])
# => 17 # => 17

View file

@ -48,9 +48,7 @@ def two_sum(nums, target)
nums.each_with_index do |num, i| nums.each_with_index do |num, i|
difference_target = target - num difference_target = target - num
if hash[difference_target] && hash[difference_target] != i return [i, hash[difference_target]] if hash[difference_target] && hash[difference_target] != i
return [i, hash[difference_target]]
end
end end
end end

View file

@ -24,7 +24,7 @@
# Time Complexitiy: O(n) # Time Complexitiy: O(n)
def find_uncommon_words(strA, strB) def find_uncommon_words(strA, strB)
array = strA.concat(" ", strB).split(" ") array = strA.concat(' ', strB).split(' ')
hash = Hash.new(0) hash = Hash.new(0)
result = [] result = []
@ -33,16 +33,14 @@ def find_uncommon_words(strA, strB)
end end
hash.each do |k, v| hash.each do |k, v|
if v < 2 result.push(k) if v < 2
result.push(k)
end
end end
result result
end end
puts find_uncommon_words("this apple is sweet", "this apple is sour") puts find_uncommon_words('this apple is sweet', 'this apple is sour')
# => ["sweet", "sour"] # => ["sweet", "sour"]
puts find_uncommon_words("apple apple", "banana") puts find_uncommon_words('apple apple', 'banana')
# => ["banana"] # => ["banana"]

View file

@ -38,8 +38,7 @@ class CircularQueue
end end
def add(x) def add(x)
raise "Queue is at max capacity" if size == max_size raise 'Queue is at max capacity' if size == max_size
queue[back] = x queue[back] = x
@back = (back + 1) % max_size @back = (back + 1) % max_size
@ -47,7 +46,7 @@ class CircularQueue
end end
def pop def pop
raise "Queue is empty" if size == 0 raise 'Queue is empty' if size == 0
temp = queue[front] temp = queue[front]
queue[front] = nil queue[front] = nil
@ -62,7 +61,7 @@ queue = CircularQueue.new(3)
begin begin
queue.pop queue.pop
rescue => e rescue StandardError => e
puts e.message puts e.message
end end
@ -72,7 +71,7 @@ queue.add(3)
begin begin
queue.add(4) queue.add(4)
rescue => e rescue StandardError => e
puts e.message puts e.message
end end

View file

@ -1,47 +1,43 @@
#You are climbing a staircase. It takes n steps to reach the top. # You are climbing a staircase. It takes n steps to reach the top.
#Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? # Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
#Example 1: # Example 1:
#Input: n = 2 # Input: n = 2
#Output: 2 # Output: 2
#Explanation: There are two ways to climb to the top. # Explanation: There are two ways to climb to the top.
#1. 1 step + 1 step # 1. 1 step + 1 step
#2. 2 steps # 2. 2 steps
#Example 2: # Example 2:
#Input: n = 3 # Input: n = 3
#Output: 3 # Output: 3
#Explanation: There are three ways to climb to the top. # Explanation: There are three ways to climb to the top.
#1. 1 step + 1 step + 1 step # 1. 1 step + 1 step + 1 step
#2. 1 step + 2 steps # 2. 1 step + 2 steps
#3. 2 steps + 1 step # 3. 2 steps + 1 step
#Constraints: # Constraints:
#1 <= n <= 45 # 1 <= n <= 45
# Dynamic Programming, Recursive Bottom Up Approach - O(n) Time / O(n) Space
# Init memoization hash (only 1 parameter)
# Set base cases which are memo[0] = 1 and memo[1] = 1, since there are only 1 way to get to each stair
# Iterate from 2..n and call recurse(n, memo) for each value n.
# Return memo[n].
# recurse(n, memo) - Recurrence Relation is n = (n - 1) + (n - 2)
# return memo[n] if memo[n] exists.
#Dynamic Programming, Recursive Bottom Up Approach - O(n) Time / O(n) Space # otherwise, memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo)
#Init memoization hash (only 1 parameter)
#Set base cases which are memo[0] = 1 and memo[1] = 1, since there are only 1 way to get to each stair
#Iterate from 2..n and call recurse(n, memo) for each value n.
#Return memo[n].
#recurse(n, memo) - Recurrence Relation is n = (n - 1) + (n - 2)
#return memo[n] if memo[n] exists.
#otherwise, memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo)
# @param {Integer} n # @param {Integer} n
# @return {Integer} # @return {Integer}
def climb_stairs(n) def climb_stairs(n)
memo = Hash.new memo = {}
memo[0] = 1 memo[0] = 1
memo[1] = 1 memo[1] = 1
return memo[n] if n == 0 || n == 1 return memo[n] if [0, 1].include?(n)
(2..n).each do |n| (2..n).each do |n|
recurse(n, memo) recurse(n, memo)
@ -50,14 +46,12 @@ def climb_stairs(n)
memo[n] memo[n]
end end
def recurse(n, memo) def recurse(n, memo)
return memo[n] if memo[n] return memo[n] if memo[n]
memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo) memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo)
end end
puts climb_stairs(2) puts climb_stairs(2)
# => 2 # => 2

View file

@ -69,6 +69,7 @@ end
def generate(num_rows) def generate(num_rows)
return [[1]] if num_rows < 1 return [[1]] if num_rows < 1
result = [[1], [1, 1]] result = [[1], [1, 1]]
(2...num_rows + 1).each do |row| (2...num_rows + 1).each do |row|

View file

@ -3,10 +3,10 @@
def abs_max(x, y) def abs_max(x, y)
num = x - y num = x - y
max_value = ((x + y + num.abs()) / 2) max_value = ((x + y + num.abs) / 2)
"The Abs Max of #{x} and #{y} is #{max_value}." "The Abs Max of #{x} and #{y} is #{max_value}."
rescue rescue StandardError
"Error: Provide number only!" 'Error: Provide number only!'
end end
# Valid inputs # Valid inputs
@ -20,11 +20,11 @@ puts abs_max(9, -121)
# The Abs Max of 9 and -121 is 9. # The Abs Max of 9 and -121 is 9.
# Invalid inputs # Invalid inputs
puts abs_max(2, "-1") puts abs_max(2, '-1')
# Error: Provide number only! # Error: Provide number only!
puts abs_max("3", "5") puts abs_max('3', '5')
# Error: Provide number only! # Error: Provide number only!
puts abs_max("a", "5") puts abs_max('a', '5')
# Error: Provide number only! # Error: Provide number only!

View file

@ -3,10 +3,10 @@
def abs_min(x, y) def abs_min(x, y)
num = x - y num = x - y
min_value = ((x + y - num.abs()) / 2) min_value = ((x + y - num.abs) / 2)
"The Abs Min of #{x} and #{y} is #{min_value}." "The Abs Min of #{x} and #{y} is #{min_value}."
rescue rescue StandardError
"Error: Provide number only!" 'Error: Provide number only!'
end end
# #
@ -24,11 +24,11 @@ puts abs_min(9, -121)
# #
# Invalid inputs # Invalid inputs
# #
puts abs_min(2, "-1") puts abs_min(2, '-1')
# Error: Provide number only! # Error: Provide number only!
puts abs_min("3", "5") puts abs_min('3', '5')
# Error: Provide number only! # Error: Provide number only!
puts abs_min("a", "5") puts abs_min('a', '5')
# Error: Provide number only! # Error: Provide number only!

View file

@ -4,10 +4,10 @@
def add(*array) def add(*array)
sum = 0 sum = 0
array.each { |a| sum+=a } array.each { |a| sum += a }
puts "The sum of following elements #{array} is #{sum}" puts "The sum of following elements #{array} is #{sum}"
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
# #
@ -27,8 +27,8 @@ puts add(25, 45)
# Invalid inputs # Invalid inputs
# #
puts add("1", 2, 3) puts add('1', 2, 3)
# Error: Please provide number only! # Error: Please provide number only!
puts add("a", 1) puts add('a', 1)
# Error: Please provide number only! # Error: Please provide number only!

View file

@ -11,9 +11,9 @@ def armstrong_number(number)
num = number num = number
sum = 0 sum = 0
len = number.digits.count len = number.digits.count
while(number != 0) while number != 0
remainder = number % 10 remainder = number % 10
sum += remainder ** len sum += remainder**len
number /= 10 number /= 10
end end
@ -22,8 +22,8 @@ def armstrong_number(number)
else else
"The number #{num} is not an Armstrong number." "The number #{num} is not an Armstrong number."
end end
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# #
@ -50,8 +50,8 @@ puts armstrong_number(123)
# #
# Invalid inputs # Invalid inputs
# #
puts armstrong_number("153") puts armstrong_number('153')
# Error: Please provide number only! # Error: Please provide number only!
puts armstrong_number("a") puts armstrong_number('a')
# Error: Please provide number only! # Error: Please provide number only!

View file

@ -5,15 +5,15 @@ module AverageMean
def self.average_mean(n, *array) def self.average_mean(n, *array)
if n.instance_of? Integer if n.instance_of? Integer
if n == array.size if n == array.size
puts "The average mean of the following elements #{array} is #{array.sum/array.size}." puts "The average mean of the following elements #{array} is #{array.sum / array.size}."
else else
puts "Provide the required #{n} elements properly!" puts "Provide the required #{n} elements properly!"
end end
else else
raise raise
end end
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
end end
@ -24,5 +24,5 @@ AverageMean.average_mean(3, 2, 2, 2)
# Invalid inputs # Invalid inputs
AverageMean.average_mean(2, 3, 1, 5) AverageMean.average_mean(2, 3, 1, 5)
AverageMean.average_mean(2, 3, "a") AverageMean.average_mean(2, 3, 'a')
AverageMean.average_mean("a", 1, 2) AverageMean.average_mean('a', 1, 2)

View file

@ -6,8 +6,8 @@ module AverageMedian
if n.instance_of? Integer if n.instance_of? Integer
if n == array.size if n == array.size
array.sort array.sort
if array.size % 2 == 0 if array.size.even?
mid_element_1 = array.size/2 mid_element_1 = array.size / 2
mid_element_2 = mid_element_1 + 1 mid_element_2 = mid_element_1 + 1
puts "The average median of the following elements #{array} is #{(array[mid_element_1 - 1] + array[mid_element_2 - 1]) / 2}." puts "The average median of the following elements #{array} is #{(array[mid_element_1 - 1] + array[mid_element_2 - 1]) / 2}."
else else
@ -20,8 +20,8 @@ module AverageMedian
else else
raise raise
end end
rescue rescue StandardError
puts "Error: Please provide number only!" puts 'Error: Please provide number only!'
end end
end end
@ -48,7 +48,7 @@ puts AverageMedian.average_median(1, 5)
puts AverageMedian.average_median(2, 3, 1, 5) puts AverageMedian.average_median(2, 3, 1, 5)
# Provide the required 2 elements properly! # Provide the required 2 elements properly!
puts AverageMedian.average_median(2, 3, "a") puts AverageMedian.average_median(2, 3, 'a')
# Traceback (most recent call last): # Traceback (most recent call last):
# 4: from /Users/voliveira/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>' # 4: from /Users/voliveira/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>'
# 3: from /Users/voliveira/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load' # 3: from /Users/voliveira/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load'
@ -56,5 +56,5 @@ puts AverageMedian.average_median(2, 3, "a")
# 1: from (irb):30 # 1: from (irb):30
# NameError (undefined local variable or method `verageMedian' for main:Object) # NameError (undefined local variable or method `verageMedian' for main:Object)
puts AverageMedian.average_median("a", 1, 2) puts AverageMedian.average_median('a', 1, 2)
# Error: Please provide number only! # Error: Please provide number only!

View file

@ -26,7 +26,6 @@
# Input: n = 33 # Input: n = 33
# Output: 66045 # Output: 66045
# #
# Approach: Math # Approach: Math
# #

View file

@ -1,8 +1,6 @@
=begin # A ruby program calculate factorial of a given number.
A ruby program calculate factorial of a given number. # Mathematical Explanation: The factorial of a number is the product of all the integers from 1 to that number.
Mathematical Explanation: The factorial of a number is the product of all the integers from 1 to that number. # i.e: n! = n*(n-1)*(n-2)......*2*1
i.e: n! = n*(n-1)*(n-2)......*2*1
=end
# #
# Approach: Interative # Approach: Interative

View file

@ -8,15 +8,15 @@
def factorial(number) def factorial(number)
if number < 0 if number < 0
"Please check your input number! The given number is a negative number." 'Please check your input number! The given number is a negative number.'
elsif number == 0 elsif number == 0
"The factorial of #{number} is 1." "The factorial of #{number} is 1."
else else
result = (1..number).inject(:*) result = (1..number).inject(:*)
"The factorial of #{number} is #{result}." "The factorial of #{number} is #{result}."
end end
rescue rescue StandardError
"Error: Please provide integer only!" 'Error: Please provide integer only!'
end end
# Valid inputs # Valid inputs
@ -36,8 +36,8 @@ puts factorial(-5)
# Please check your input number! The given number is a negative number. # Please check your input number! The given number is a negative number.
# Invalid inputs # Invalid inputs
puts factorial("a") puts factorial('a')
# Error: Please provide integer only! # Error: Please provide integer only!
puts factorial("2") puts factorial('2')
# Error: Please provide integer only! # Error: Please provide integer only!

View file

@ -4,27 +4,25 @@
def find_max(*array) def find_max(*array)
max = array[0] max = array[0]
array.each do |a| array.each do |a|
if a >= max max = a if a >= max
max = a
end
end end
"The Max of the following elements #{array} is #{max}." "The Max of the following elements #{array} is #{max}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Max method will return the maximum element from the set of input elements provided # Max method will return the maximum element from the set of input elements provided
def predefined_max(*array) def predefined_max(*array)
"The Max of the following elements #{array} is #{array.max}." "The Max of the following elements #{array} is #{array.max}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Sort method will sort the elements in ascending order. Last method will return the end element out of the array # Sort method will sort the elements in ascending order. Last method will return the end element out of the array
def predefined_sort_last_max(*array) def predefined_sort_last_max(*array)
"The Max of the following elements #{array} is #{array.sort.last}." "The Max of the following elements #{array} is #{array.max}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Using find_max # Using find_max
@ -36,7 +34,7 @@ puts find_max(-221, -852, -1100, -10)
# The Max of the following elements [-221, -852, -1100, -10] is -10. # The Max of the following elements [-221, -852, -1100, -10] is -10.
# Invalid inputs # Invalid inputs
puts find_max(5, "95", 2) puts find_max(5, '95', 2)
# Error: Please provide number only! # Error: Please provide number only!
# Using predefined_max # Using predefined_max
@ -48,7 +46,7 @@ puts predefined_max(-11, -51, -10, -10)
# The Max of the following elements [-11, -51, -10, -10] is -10. # The Max of the following elements [-11, -51, -10, -10] is -10.
# Invalid inputs # Invalid inputs
puts predefined_max("x", 5, 95, 2) puts predefined_max('x', 5, 95, 2)
# Error: Please provide number only! # Error: Please provide number only!
# Using predefined_sort_last_max # Using predefined_sort_last_max
@ -60,5 +58,5 @@ puts predefined_sort_last_max(-21, -52, -100, -1)
# The Max of the following elements [-21, -52, -100, -1] is -1. # The Max of the following elements [-21, -52, -100, -1] is -1.
# Invalid inputs # Invalid inputs
puts predefined_sort_last_max(5, 95, 2, "a") puts predefined_sort_last_max(5, 95, 2, 'a')
# Error: Please provide number only! # Error: Please provide number only!

View file

@ -4,27 +4,25 @@
def find_min(*array) def find_min(*array)
min = array[0] min = array[0]
array.each do |a| array.each do |a|
if a <= min min = a if a <= min
min = a
end
end end
"The Min of the following elements #{array} is #{min}." "The Min of the following elements #{array} is #{min}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Min method will return the minimum element from the set of input elements provided # Min method will return the minimum element from the set of input elements provided
def predefined_min(*array) def predefined_min(*array)
"The Min of the following elements #{array} is #{array.min}." "The Min of the following elements #{array} is #{array.min}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Sort method will sort the elements in ascending order. First method will return the beginning element out of the array # Sort method will sort the elements in ascending order. First method will return the beginning element out of the array
def predefined_sort_first_min(*array) def predefined_sort_first_min(*array)
"The Min of the following elements #{array} is #{array.sort.first}." "The Min of the following elements #{array} is #{array.min}."
rescue rescue StandardError
"Error: Please provide number only!" 'Error: Please provide number only!'
end end
# Using find_min # Using find_min
@ -36,7 +34,7 @@ puts find_min(-221, -852, -1100, -10)
# The Min of the following elements [-221, -852, -1100, -10] is -10. # The Min of the following elements [-221, -852, -1100, -10] is -10.
# Invalid inputs # Invalid inputs
puts find_min(5, "95", 2) puts find_min(5, '95', 2)
# Error: Please provide number only! # Error: Please provide number only!
# Using predefined_min # Using predefined_min
@ -48,7 +46,7 @@ puts predefined_min(-11, -51, -10, -10)
# The Min of the following elements [-11, -51, -10, -10] is -10. # The Min of the following elements [-11, -51, -10, -10] is -10.
# Invalid inputs # Invalid inputs
puts predefined_min("x", 5, 95, 2) puts predefined_min('x', 5, 95, 2)
# Error: Please provide number only! # Error: Please provide number only!
# Using predefined_sort_first_min # Using predefined_sort_first_min
@ -60,5 +58,5 @@ puts predefined_sort_first_min(-21, -52, -100, -1)
# The Min of the following elements [-21, -52, -100, -1] is -1. # The Min of the following elements [-21, -52, -100, -1] is -1.
# Invalid inputs # Invalid inputs
puts predefined_sort_first_min(5, 95, 2, "a") puts predefined_sort_first_min(5, 95, 2, 'a')
# Error: Please provide number only! # Error: Please provide number only!

View file

@ -13,9 +13,9 @@
def lucas(number) def lucas(number)
golden_ratio = (1 + 5**0.5) / 2 golden_ratio = (1 + 5**0.5) / 2
((golden_ratio**number).round()).to_i (golden_ratio**number).round.to_i
rescue rescue StandardError
"Error: Provide number only!" 'Error: Provide number only!'
end end
puts lucas(4) puts lucas(4)
@ -24,7 +24,7 @@ puts lucas(4)
puts lucas(3) puts lucas(3)
# 4 # 4
puts lucas("3") puts lucas('3')
# Error: Provide number only! # Error: Provide number only!
puts lucas(2) puts lucas(2)

View file

@ -21,7 +21,7 @@
# Space complexity: O(k). # Space complexity: O(k).
def get_row(row_index) def get_row(row_index)
(0..row_index).map {|num| combination(row_index, num) } (0..row_index).map { |num| combination(row_index, num) }
end end
def combination(num1, num2) def combination(num1, num2)

View file

@ -38,7 +38,7 @@
def is_power_of_two(n) def is_power_of_two(n)
if n == 1 if n == 1
true true
elsif n % 2 == 0 elsif n.even?
is_power_of_two(n / 2) is_power_of_two(n / 2)
else else
false false
@ -67,9 +67,7 @@ puts is_power_of_two(n)
# Time Complexity: O(n) # Time Complexity: O(n)
# #
def is_power_of_two(n) def is_power_of_two(n)
while n % 2 == 0 && n != 0 n /= 2 while n.even? && n != 0
n /= 2
end
n == 1 n == 1
end end

View file

@ -3,14 +3,14 @@
# Prime number check function # Prime number check function
def prime_number(number) def prime_number(number)
if number <= 1 non_prime_flag = if number <= 1
non_prime_flag = true true
elsif number == 2 elsif number == 2
non_prime_flag = false false
elsif number % 2 == 0 elsif number.even?
non_prime_flag = true true
else else
non_prime_flag = (2..Math.sqrt(number)).any? { |i| number % i == 0 } (2..Math.sqrt(number)).any? { |i| number % i == 0 }
end end
if !non_prime_flag if !non_prime_flag

View file

@ -36,13 +36,13 @@
# Because only a constant number of single-value variables are used, the space complexity is O(1). # Because only a constant number of single-value variables are used, the space complexity is O(1).
ROM_NUMS = { ROM_NUMS = {
"I" => 1, 'I' => 1,
"V" => 5, 'V' => 5,
"X" => 10, 'X' => 10,
"L" => 50, 'L' => 50,
"C" => 100, 'C' => 100,
"D" => 500, 'D' => 500,
"M" => 1000 'M' => 1000
} }
# Now, recall that each symbol adds its own value, except for when a smaller # Now, recall that each symbol adds its own value, except for when a smaller
@ -61,7 +61,7 @@ def roman_to_int(s)
s.chars.each_with_index do |el, i| s.chars.each_with_index do |el, i|
# subtractive case: if at least 2 symbols remaining AND value of s[i] < value of s[i + 1] # subtractive case: if at least 2 symbols remaining AND value of s[i] < value of s[i + 1]
if ROM_NUMS[s[i + 1]] && ROM_NUMS[el] < ROM_NUMS[s[i+1]] if ROM_NUMS[s[i + 1]] && ROM_NUMS[el] < ROM_NUMS[s[i + 1]]
temp = ROM_NUMS[el] temp = ROM_NUMS[el]
else else
# Else this is NOT the subtractive case. # Else this is NOT the subtractive case.
@ -73,24 +73,24 @@ def roman_to_int(s)
res res
end end
s = "III" s = 'III'
puts roman_to_int(s) puts roman_to_int(s)
# Output: 3 # Output: 3
s = "IV" s = 'IV'
puts roman_to_int(s) puts roman_to_int(s)
# Output: 4 # Output: 4
s = "IX" s = 'IX'
puts roman_to_int(s) puts roman_to_int(s)
# Output: 9 # Output: 9
s = "LVIII" s = 'LVIII'
puts roman_to_int(s) puts roman_to_int(s)
# Output: 58 # Output: 58
# Explanation: L = 50, V= 5, III = 3. # Explanation: L = 50, V= 5, III = 3.
s = "MCMXCIV" s = 'MCMXCIV'
puts roman_to_int(s) puts roman_to_int(s)
# Output: 1994 # Output: 1994
# Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. # Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

View file

@ -13,7 +13,6 @@
# #
# Constraints: The given dates are valid dates between the years 1971 and 2100. # Constraints: The given dates are valid dates between the years 1971 and 2100.
# #
# Approach 1: Using Ruby built-in feature Date.parse # Approach 1: Using Ruby built-in feature Date.parse
# Time complexity: O(1) # Time complexity: O(1)
@ -28,8 +27,8 @@ def number_of_days(date1, date2)
(end_date - beginning_date).to_i.abs (end_date - beginning_date).to_i.abs
end end
puts number_of_days("2019-06-29", "2019-06-30") puts number_of_days('2019-06-29', '2019-06-30')
# => 1 # => 1
puts number_of_days("2020-01-15", "2019-12-31") puts number_of_days('2020-01-15', '2019-12-31')
# => 15 # => 15

View file

@ -1,79 +1,76 @@
#Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands. # Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands.
#An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water. # An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
#Example 1: # Example 1:
#Input: grid = [ # Input: grid = [
# ["1","1","1","1","0"], # ["1","1","1","1","0"],
# ["1","1","0","1","0"], # ["1","1","0","1","0"],
# ["1","1","0","0","0"], # ["1","1","0","0","0"],
# ["0","0","0","0","0"] # ["0","0","0","0","0"]
#] # ]
#Output: 1 # Output: 1
#Example 2: # Example 2:
#Input: grid = [ # Input: grid = [
# ["1","1","0","0","0"], # ["1","1","0","0","0"],
# ["1","1","0","0","0"], # ["1","1","0","0","0"],
# ["0","0","1","0","0"], # ["0","0","1","0","0"],
# ["0","0","0","1","1"] # ["0","0","0","1","1"]
#] # ]
#Output: 3 # Output: 3
#Constraints: # Constraints:
#m == grid.length # m == grid.length
#n == grid[i].length # n == grid[i].length
#1 <= m, n <= 300 # 1 <= m, n <= 300
#grid[i][j] is '0' or '1'. # grid[i][j] is '0' or '1'.
# DFS, Recursive Bottom Up Approach - O(n*m) Time / O(1) Space
# Init num_of_islands = 0, return if the grid is empty
# Start a double loop with index to iterate through each plot (each value is a plot of either water or land in this case)
# if the plot is land, dfs(grid, x, y)
# num_of_islands += 1
# Return num_of_islands
# dfs(grid, x, y)
# Return if x or y are out of bounds, or if the plot is water
#DFS, Recursive Bottom Up Approach - O(n*m) Time / O(1) Space # Make the current plot water
#Init num_of_islands = 0, return if the grid is empty # Call dfs again for up, down, left, and right
#Start a double loop with index to iterate through each plot (each value is a plot of either water or land in this case)
#if the plot is land, dfs(grid, x, y)
#num_of_islands += 1
#Return num_of_islands
#dfs(grid, x, y)
#Return if x or y are out of bounds, or if the plot is water
#Make the current plot water
#Call dfs again for up, down, left, and right
# @param {Character[][]} grid # @param {Character[][]} grid
# @return {Integer} # @return {Integer}
def num_islands(grid) def num_islands(grid)
return 0 if grid.empty? return 0 if grid.empty?
#init num of islands # init num of islands
islands = 0 islands = 0
#loop through each element (plot) in the 2d array # loop through each element (plot) in the 2d array
grid.each_with_index do |row, x| grid.each_with_index do |row, x|
row.each_with_index do |plot, y| row.each_with_index do |plot, y|
#if the plot is water, start a dfs # if the plot is water, start a dfs
if plot == "1" next unless plot == '1'
dfs(grid, x, y) dfs(grid, x, y)
#add 1 to islands once all connected land plots are searched # add 1 to islands once all connected land plots are searched
islands += 1 islands += 1
end end
end end
end
#return ans # return ans
islands islands
end end
def dfs(grid, x, y) def dfs(grid, x, y)
#don't search if out of bounds, or if it's already water # don't search if out of bounds, or if it's already water
return if x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == "0" return if x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0'
#set the plot to water # set the plot to water
grid[x][y] = "0" grid[x][y] = '0'
#search each adjacent plot # search each adjacent plot
dfs(grid, x - 1, y) #up dfs(grid, x - 1, y) # up
dfs(grid, x + 1, y) #down dfs(grid, x + 1, y) # down
dfs(grid, x, y - 1) #left dfs(grid, x, y - 1) # left
dfs(grid, x, y + 1) #right dfs(grid, x, y + 1) # right
end end

View file

@ -11,7 +11,10 @@ def cocktail_sort(array)
end end
end end
break unless swapped break unless swapped
start, finish, way = swapped, start, -way
finish = start
start = swapped
way = -way
end end
array array
end end

View file

@ -9,4 +9,3 @@ class TestInsertionSort < Minitest::Test
cocktail_sort(input) cocktail_sort(input)
end end
end end

View file

@ -1,7 +1,7 @@
def comb_sort(array) def comb_sort(array)
gap = array.length gap = array.length
swaps = true swaps = true
while gap > 1 or swaps while (gap > 1) || swaps
gap = [1, (gap / 1.25).to_i].max gap = [1, (gap / 1.25).to_i].max
swaps = false swaps = false
0.upto(array.length - gap - 1) do |i| 0.upto(array.length - gap - 1) do |i|

View file

@ -1,5 +1,6 @@
def pancake_sort(array) def pancake_sort(array)
return array if array.length <= 1 return array if array.length <= 1
(array.length - 1).downto(1) do |index| (array.length - 1).downto(1) do |index|
max_index = array[0..index].index(array[0..index].max) max_index = array[0..index].index(array[0..index].max)
next if max_index == index next if max_index == index