Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions ask_method.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
def ask question
while true
puts question
reply = gets.chomp.downcase

if (reply == "yes") || (reply == "no")
if reply == "yes"
return true
else
return false
end

else
puts "Please answer yes or no."
end
end
end

puts "Hello and welcome to pointless questions."

ask "Do you like cake?"
ask "Do you like birthdays?"
ask "Do you like the idea of going to bed right now for a solid 8 hours sleep??"

# tidy up method by removing the answer variable.
# use return to exit from the loop
18 changes: 16 additions & 2 deletions ch09-writing-your-own-methods/ask.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
def ask question
# your code here
end
while true
puts question
reply = gets.chomp.downcase

if (reply == "yes") || (reply == "no")
if reply == "yes"
return true
else
return false
end

else
puts "Please answer yes or no."
end
end
end
40 changes: 38 additions & 2 deletions ch09-writing-your-own-methods/old_school_roman_numerals.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
def old_roman_numeral num
# your code here
end
while num.to_i <= 3000
array = num.to_s.split(//).map { |x| x.to_i }
result =[]
until array.length == 4
array.unshift(0)
end
if array[-4] < 5
number = array[-4]
number.times { result << "M" }
end
if array[-3] < 5
number = array[-3]
number.times { result << "C" }
else
number = array[-3]
result << "D"
(number-5).times { result << "C" }
end
if array[-2] < 5
number = array[-2]
number.times { result << "X" }
else
number = array[-2]
result << "L"
(number-5).times { result << "X" }
end
if array[-1] < 5
number = array[-1]
number.times { result << "I" }
else
number = array[-1]
result << "V"
(number-5).times { result << "I" }
end
return result.join("")
end
return "Number must be greater than 3000."
end
75 changes: 73 additions & 2 deletions ch09-writing-your-own-methods/roman_numerals.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,74 @@
def roman_numeral num
# your code here
end
while num.to_i <= 3000
# split number into an array
array = num.to_s.split(//).map { |x| x.to_i }
result =[]
# array has length of 4
until array.length == 4
array.unshift(0)
end
# 1000s of number
if array[-4] < 4
number = array[-4]
number.times { result << "M" }
end
# 100s of number
if array[-3] < 4
number = array[-3]
number.times { result << "C" }
elsif array[-3] == 4
number = array[-3]
result << "CD"
elsif array[-3] == 6
number = array[-3]
result << "DC"
elsif array[-3] == 9
number = array[-3]
result << "CM"
else
number = array[-3]
result << "D"
(number-5).times { result << "C" }
end
# 10s of number
if array[-2] < 4
number = array[-2]
number.times { result << "X" }
elsif array[-2] == 4
number = array[-2]
result << "XL"
elsif array[-2] == 6
number = array[-2]
result << "LX"
elsif array[-2] == 9
number = array[-2]
result << "XC"
else
number = array[-2]
result << "L"
(number-5).times { result << "X" }
end
# single digits of number
if array[-1] < 4
number = array[-1]
number.times { result << "I" }
elsif array[-1] == 4
number = array[-1]
result << "IV"
elsif array[-1] == 6
number = array[-1]
result << "VI"
elsif array[-1] == 9
number = array[-1]
result << "IX"
else
number = array[-1]
result << "V"
(number-5).times { result << "I" }
end
# return number in roman numerals
return result.join("")
end
puts "Number must be greater than 3000."
exit
end
40 changes: 38 additions & 2 deletions ch10-nothing-new/dictionary_sort.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
def dictionary_sort arr
# your code here
end
recursive_sort(arr, [])
end

def recursive_sort unsorted_array, sorted_array
if unsorted_array.length < 1
return sorted_array
end

smallest = unsorted_array.pop
still_unsorted = []

unsorted_array.each { |tested_object|
if tested_object.downcase < smallest.downcase
still_unsorted << smallest
smallest = tested_object
else
still_unsorted << tested_object
end
}
sorted_array << smallest
recursive_sort still_unsorted, sorted_array
end
puts dictionary_sort(['Apple', 'apple', 'Banana', 'BANANA', 'banana']).join(' ')
# print sort(['apple', 'Apple', 'APPLE'])

# put everything to downcase, sort, then revert back to original.

# smallest = APPLE 65
# tested_object = apple 97
# 65 < 97 therefore tested_object < smallest FALSE, still_unsorted << apple
# tested_object = Apple 65
# 65 < 97 therefore tested_object< smallest FALSE, still_unsorted << Apple
# tested_object = APPLE 86
# 97 < 97 FALSE, still unsorted << APPLE

# print dictionary_sort(['testing', 'with', 'DUPLICATE', 'duplicate', 'words', 'alright'])
# print dictionary_sort(['f', 'v', 'e', 'd', 'j', 'f'])
# print dictionary_sort(['Apple', 'apple', 'Banana', 'BANANA', 'banana'])
87 changes: 86 additions & 1 deletion ch10-nothing-new/english_number.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,88 @@
def english_number number
# your code here

if number < 0
return "Please enter a number that isn't negative."
end
if number == 0
return 'zero'
end

num_string = ''
ones_place = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tens_place = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
zillions = [
['hundred', 2], ['thousand', 3], ['million', 6], ['billion', 9], ['trillion', 12], ['quadrillion', 15],
['quintillion', 18], ['sextillion', 21], ['septillion', 24], ['octillion', 27], ['nonillion', 30],
['decillion', 33], ['undecillion', 36], ['duodecillion', 39], ['tredecillion', 42], ['quattuordecillion', 45],
['quindecillion', 48], ['sexdecillion', 51], ['septendecillion', 54], ['octodecillion', 57], ['novemdecillion', 60],
['vigintillion', 63], ['googol', 100]
]

left = number

# Zillions
while zillions.length > 0
zil_pair = zillions.pop
zil_name = zil_pair[0]
zil_base = 10 ** zil_pair[1]
write = left/zil_base
left = left - write*zil_base

if write > 0
prefix = english_number write
num_string = num_string + prefix + ' ' + zil_name
if left > 0
num_string = num_string + ' '
end
end
end

# Tens
write = left/10
left = left - write*10

if write > 0
if ((write == 1) and (left > 0))
num_string = num_string + teenagers[left-1]
left = 0
else
num_string = num_string + tens_place[write-1]
end

if left > 0
num_string = num_string + '-'
end
end

# Single digits
write = left
left = 0

if write > 0
num_string = num_string + ones_place[write - 1]
end

num_string

end


puts english_number( 0)
puts english_number( 9)
puts english_number( 10)
puts english_number( 11)
puts english_number( 17)
puts english_number( 32)
puts english_number( 88)
puts english_number( 99)
puts english_number(101)
puts english_number(234)
puts english_number(3211)
puts english_number(999999)
puts english_number(574645)
puts english_number(1000000)
puts english_number(1000000000000)
puts english_number(1000000000032)
puts english_number(2343234355434457357)
puts english_number(109238745102938560129834709285360238475982374561034)
Loading