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[]}
def generate_parenthesis(n)
parenthesis = []
backtrack(parenthesis, "", 0, 0, n)
backtrack(parenthesis, '', 0, 0, n)
parenthesis
end
@ -47,13 +47,9 @@ def backtrack(parenthesis, curr, open, close, max)
return
end
if open < max
backtrack(parenthesis, curr + "(", open + 1, close, max)
end
backtrack(parenthesis, curr + '(', open + 1, close, max) if open < max
if close < open
backtrack(parenthesis, curr + ")", open, close + 1, max)
end
backtrack(parenthesis, curr + ')', open, close + 1, max) if close < open
end
n = 3

View file

@ -1,12 +1,12 @@
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
begin
binary_and(-1, 0)
rescue => e
rescue StandardError => e
puts e.message
end
# Input must only contain positive integers

View file

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

View file

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

View file

@ -1,12 +1,12 @@
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
begin
binary_or(-1, 0)
rescue => e
rescue StandardError => e
puts e.message
end
# Input must only contain positive integers
@ -21,4 +21,3 @@ puts binary_or(0, 1023)
# 0b1111111111
puts binary_or(16, 58)
# 0b110010

View file

@ -1,25 +1,25 @@
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_y = y.to_s(2)
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
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
end
result = "0b"
result = '0b'
binary_x.each_char.with_index do |x_char, i|
y_char = binary_y[i]
if (x_char == "1" && y_char != "1") || (x_char != "1" && y_char == "1")
result += "1"
else
result += "0"
end
result += if (x_char == '1' && y_char != '1') || (x_char != '1' && y_char == '1')
'1'
else
'0'
end
end
result
@ -27,7 +27,7 @@ end
begin
binary_xor(-1, 0)
rescue => e
rescue StandardError => e
puts e.message
end
# Input must only contain positive integers

View file

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

View file

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

View file

@ -3,7 +3,7 @@
module WeightConversion
# Kilogram -> Gram = (kilogram_value * 1000) grams
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
@ -40,7 +40,7 @@ module WeightConversion
# Pound -> Kilogram = (pound_input / 2.205) kg
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)
@ -70,37 +70,37 @@ puts WeightConversion.pound_to_kilogram(100)
#
begin
puts WeightConversion.kilogram_to_gram("a")
puts WeightConversion.kilogram_to_gram('a')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end
begin
puts WeightConversion.kilogram_to_gram("3000")
puts WeightConversion.kilogram_to_gram('3000')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end
begin
puts WeightConversion.kilogram_to_gram("16")
puts WeightConversion.kilogram_to_gram('16')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end
begin
puts WeightConversion.kilogram_to_gram("x ")
puts WeightConversion.kilogram_to_gram('x ')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end
begin
puts WeightConversion.kilogram_to_gram("weight")
puts WeightConversion.kilogram_to_gram('weight')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end
begin
puts WeightConversion.kilogram_to_gram("100")
puts WeightConversion.kilogram_to_gram('100')
rescue StandardError
puts "Error: Please provide number only!"
puts 'Error: Please provide number only!'
end

View file

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

View file

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

View file

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

View file

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

View file

@ -45,12 +45,12 @@ def find_richest_customer_wealth(accounts)
summed_accounts.push(summed)
end
summed_accounts.sort.pop()
summed_accounts.sort.pop
end
puts find_richest_customer_wealth([[1,2,3],[3,2,1]])
puts find_richest_customer_wealth([[1, 2, 3], [3, 2, 1]])
# => 6
puts find_richest_customer_wealth([[1,5],[7,3],[3,5]])
puts find_richest_customer_wealth([[1, 5], [7, 3], [3, 5]])
# => 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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,63 +1,57 @@
#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?
# 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?
#Example 1:
#Input: n = 2
#Output: 2
#Explanation: There are two ways to climb to the top.
#1. 1 step + 1 step
#2. 2 steps
# Example 1:
# Input: n = 2
# Output: 2
# Explanation: There are two ways to climb to the top.
# 1. 1 step + 1 step
# 2. 2 steps
#Example 2:
#Input: n = 3
#Output: 3
#Explanation: There are three ways to climb to the top.
#1. 1 step + 1 step + 1 step
#2. 1 step + 2 steps
#3. 2 steps + 1 step
# Example 2:
# Input: n = 3
# Output: 3
# Explanation: There are three ways to climb to the top.
# 1. 1 step + 1 step + 1 step
# 2. 1 step + 2 steps
# 3. 2 steps + 1 step
#Constraints:
#1 <= n <= 45
# Constraints:
# 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].
#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.
#otherwise, memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo)
# 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
# @return {Integer}
def climb_stairs(n)
memo = Hash.new
memo = {}
memo[0] = 1
memo[1] = 1
memo[0] = 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|
recurse(n, memo)
end
(2..n).each do |n|
recurse(n, memo)
end
memo[n]
memo[n]
end
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
puts climb_stairs(2)
# => 2

View file

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

View file

@ -3,10 +3,10 @@
def abs_max(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}."
rescue
"Error: Provide number only!"
rescue StandardError
'Error: Provide number only!'
end
# Valid inputs
@ -20,11 +20,11 @@ puts abs_max(9, -121)
# The Abs Max of 9 and -121 is 9.
# Invalid inputs
puts abs_max(2, "-1")
puts abs_max(2, '-1')
# Error: Provide number only!
puts abs_max("3", "5")
puts abs_max('3', '5')
# Error: Provide number only!
puts abs_max("a", "5")
puts abs_max('a', '5')
# Error: Provide number only!

View file

@ -3,10 +3,10 @@
def abs_min(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}."
rescue
"Error: Provide number only!"
rescue StandardError
'Error: Provide number only!'
end
#
@ -24,11 +24,11 @@ puts abs_min(9, -121)
#
# Invalid inputs
#
puts abs_min(2, "-1")
puts abs_min(2, '-1')
# Error: Provide number only!
puts abs_min("3", "5")
puts abs_min('3', '5')
# Error: Provide number only!
puts abs_min("a", "5")
puts abs_min('a', '5')
# Error: Provide number only!

View file

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

View file

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

View file

@ -5,15 +5,15 @@ module AverageMean
def self.average_mean(n, *array)
if n.instance_of? Integer
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
puts "Provide the required #{n} elements properly!"
end
else
raise
end
rescue
puts "Error: Please provide number only!"
rescue StandardError
puts 'Error: Please provide number only!'
end
end
@ -24,5 +24,5 @@ AverageMean.average_mean(3, 2, 2, 2)
# Invalid inputs
AverageMean.average_mean(2, 3, 1, 5)
AverageMean.average_mean(2, 3, "a")
AverageMean.average_mean("a", 1, 2)
AverageMean.average_mean(2, 3, 'a')
AverageMean.average_mean('a', 1, 2)

View file

@ -6,8 +6,8 @@ module AverageMedian
if n.instance_of? Integer
if n == array.size
array.sort
if array.size % 2 == 0
mid_element_1 = array.size/2
if array.size.even?
mid_element_1 = array.size / 2
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}."
else
@ -20,8 +20,8 @@ module AverageMedian
else
raise
end
rescue
puts "Error: Please provide number only!"
rescue StandardError
puts 'Error: Please provide number only!'
end
end
@ -48,7 +48,7 @@ puts AverageMedian.average_median(1, 5)
puts AverageMedian.average_median(2, 3, 1, 5)
# 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):
# 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'
@ -56,5 +56,5 @@ puts AverageMedian.average_median(2, 3, "a")
# 1: from (irb):30
# 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!

View file

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

View file

@ -1,8 +1,6 @@
=begin
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.
i.e: n! = n*(n-1)*(n-2)......*2*1
=end
# 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.
# i.e: n! = n*(n-1)*(n-2)......*2*1
#
# Approach: Interative

View file

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

View file

@ -4,27 +4,25 @@
def find_max(*array)
max = array[0]
array.each do |a|
if a >= max
max = a
end
max = a if a >= max
end
"The Max of the following elements #{array} is #{max}."
rescue
"Error: Please provide number only!"
"The Max of the following elements #{array} is #{max}."
rescue StandardError
'Error: Please provide number only!'
end
# Max method will return the maximum element from the set of input elements provided
def predefined_max(*array)
"The Max of the following elements #{array} is #{array.max}."
rescue
"Error: Please provide number only!"
rescue StandardError
'Error: Please provide number only!'
end
# 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)
"The Max of the following elements #{array} is #{array.sort.last}."
rescue
"Error: Please provide number only!"
"The Max of the following elements #{array} is #{array.max}."
rescue StandardError
'Error: Please provide number only!'
end
# 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.
# Invalid inputs
puts find_max(5, "95", 2)
puts find_max(5, '95', 2)
# Error: Please provide number only!
# 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.
# Invalid inputs
puts predefined_max("x", 5, 95, 2)
puts predefined_max('x', 5, 95, 2)
# Error: Please provide number only!
# 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.
# 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!

View file

@ -4,27 +4,25 @@
def find_min(*array)
min = array[0]
array.each do |a|
if a <= min
min = a
end
min = a if a <= min
end
"The Min of the following elements #{array} is #{min}."
rescue
"Error: Please provide number only!"
"The Min of the following elements #{array} is #{min}."
rescue StandardError
'Error: Please provide number only!'
end
# Min method will return the minimum element from the set of input elements provided
def predefined_min(*array)
"The Min of the following elements #{array} is #{array.min}."
rescue
"Error: Please provide number only!"
rescue StandardError
'Error: Please provide number only!'
end
# 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)
"The Min of the following elements #{array} is #{array.sort.first}."
rescue
"Error: Please provide number only!"
"The Min of the following elements #{array} is #{array.min}."
rescue StandardError
'Error: Please provide number only!'
end
# 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.
# Invalid inputs
puts find_min(5, "95", 2)
puts find_min(5, '95', 2)
# Error: Please provide number only!
# 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.
# Invalid inputs
puts predefined_min("x", 5, 95, 2)
puts predefined_min('x', 5, 95, 2)
# Error: Please provide number only!
# 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.
# 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!

View file

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

View file

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

View file

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

View file

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

View file

@ -36,13 +36,13 @@
# Because only a constant number of single-value variables are used, the space complexity is O(1).
ROM_NUMS = {
"I" => 1,
"V" => 5,
"X" => 10,
"L" => 50,
"C" => 100,
"D" => 500,
"M" => 1000
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000
}
# 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|
# 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]
else
# Else this is NOT the subtractive case.
@ -73,24 +73,24 @@ def roman_to_int(s)
res
end
s = "III"
s = 'III'
puts roman_to_int(s)
# Output: 3
s = "IV"
s = 'IV'
puts roman_to_int(s)
# Output: 4
s = "IX"
s = 'IX'
puts roman_to_int(s)
# Output: 9
s = "LVIII"
s = 'LVIII'
puts roman_to_int(s)
# Output: 58
# Explanation: L = 50, V= 5, III = 3.
s = "MCMXCIV"
s = 'MCMXCIV'
puts roman_to_int(s)
# Output: 1994
# 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.
#
# Approach 1: Using Ruby built-in feature Date.parse
# Time complexity: O(1)
@ -28,8 +27,8 @@ def number_of_days(date1, date2)
(end_date - beginning_date).to_i.abs
end
puts number_of_days("2019-06-29", "2019-06-30")
puts number_of_days('2019-06-29', '2019-06-30')
# => 1
puts number_of_days("2020-01-15", "2019-12-31")
puts number_of_days('2020-01-15', '2019-12-31')
# => 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.
#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.
# 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.
#Example 1:
#Input: grid = [
# Example 1:
# Input: grid = [
# ["1","1","1","1","0"],
# ["1","1","0","1","0"],
# ["1","1","0","0","0"],
# ["0","0","0","0","0"]
#]
#Output: 1
# ]
# Output: 1
#Example 2:
#Input: grid = [
# Example 2:
# Input: grid = [
# ["1","1","0","0","0"],
# ["1","1","0","0","0"],
# ["0","0","1","0","0"],
# ["0","0","0","1","1"]
#]
#Output: 3
# ]
# Output: 3
#Constraints:
#m == grid.length
#n == grid[i].length
#1 <= m, n <= 300
#grid[i][j] is '0' or '1'.
# Constraints:
# m == grid.length
# n == grid[i].length
# 1 <= m, n <= 300
# 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, 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
#Make the current plot water
#Call dfs again for up, down, left, and right
# 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
# @return {Integer}
def num_islands(grid)
return 0 if grid.empty?
return 0 if grid.empty?
#init num of islands
islands = 0
# init num of islands
islands = 0
#loop through each element (plot) in the 2d array
grid.each_with_index do |row, x|
row.each_with_index do |plot, y|
#if the plot is water, start a dfs
if plot == "1"
dfs(grid, x, y)
#add 1 to islands once all connected land plots are searched
islands += 1
end
end
# loop through each element (plot) in the 2d array
grid.each_with_index do |row, x|
row.each_with_index do |plot, y|
# if the plot is water, start a dfs
next unless plot == '1'
dfs(grid, x, y)
# add 1 to islands once all connected land plots are searched
islands += 1
end
end
#return ans
islands
# return ans
islands
end
def dfs(grid, x, y)
#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"
# 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'
#set the plot to water
grid[x][y] = "0"
# set the plot to water
grid[x][y] = '0'
#search each adjacent plot
dfs(grid, x - 1, y) #up
dfs(grid, x + 1, y) #down
dfs(grid, x, y - 1) #left
dfs(grid, x, y + 1) #right
# search each adjacent plot
dfs(grid, x - 1, y) # up
dfs(grid, x + 1, y) # down
dfs(grid, x, y - 1) # left
dfs(grid, x, y + 1) # right
end

View file

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

View file

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

View file

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

View file

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