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
19 changes: 17 additions & 2 deletions ch09-writing-your-own-methods/ask.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
def ask question
# your code here
end
while true
puts question
reply = gets.chomp.downcase

return true if reply == 'yes'
return false if reply == 'no'

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

ask 'Do you wanna dance?'
ask 'Do you wanna sleep?'
ask 'Do you wanna eat?'
likes_it = ask 'Do you wanna eat tacos?'
puts likes_it
17 changes: 15 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,16 @@
def old_roman_numeral num
# your code here
end
roman = ''

roman = roman + 'M' * (num / 1000)
roman = roman + 'D' * (num % 1000 / 500)
roman = roman + 'C' * (num % 500 / 100)
roman = roman + 'L' * (num % 100 / 50)
roman = roman + 'X' * (num % 50 / 10)
roman = roman + 'V' * (num % 10 / 5)
roman = roman + 'I' * (num % 5 / 1)
roman
end

puts old_roman_numeral 2457
puts old_roman_numeral 13
puts old_roman_numeral 1952
40 changes: 38 additions & 2 deletions ch09-writing-your-own-methods/roman_numerals.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
def roman_numeral num
# your code here
end
thousands = (num / 1000)
hundreds = (num % 1000 / 100)
tens = (num % 100 / 10)
ones = (num % 10)

roman = 'M' * thousands

if hundreds == 9
roman = roman + 'CM'
elsif hundreds == 4
roman = roman + 'CD'
else
roman = roman + 'D' * (num % 1000 / 500)
roman = roman + 'C' * (num % 500 / 100)
end

if tens == 9
roman = roman + 'XC'
elsif tens == 4
roman = romann + 'XL'
else
roman = roman + 'L' * (num % 100 / 50)
roman = roman + 'X' * (num % 50 / 10)
end

if ones == 9
roman = roman + 'IX'
elsif ones == 4
roman = roman + 'IV'
else
roman = roman + 'V' * (num % 10 / 5)
roman = roman + 'I' * (num % 5 / 1)
end
roman
end

puts(roman_numeral(1999))
puts (roman_numeral(99))
28 changes: 26 additions & 2 deletions ch10-nothing-new/dictionary_sort.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
def dictionary_sort arr
# your code here
end
rec_dict_sort arr, []
end

def rec_dict_sort unsorted, sorted
if unsorted.length <= 0
return sorted
end

smallest = unsorted.pop
still_unsorted = []

unsorted.each do |tested_object|
if tested_object.downcase < smallest.downcase
still_unsorted.push smallest
smallest = tested_object
else
still_unsorted.push tested_object
end
end

sorted.push smallest

rec_dict_sort still_unsorted, sorted
end

puts(dictionary_sort([' space' ,' time' ,' continuum' ,' countdown' ,' space' ,' blastoff' ]))
101 changes: 100 additions & 1 deletion ch10-nothing-new/english_number.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,102 @@
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

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

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

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( 8)
puts english_number( 13)
puts english_number( 23)
puts english_number(2001)
puts english_number(99999)
puts english_number(2000000000500)
puts english_number(109236225102938986129834709285360238475667874561034)
109 changes: 108 additions & 1 deletion ch10-nothing-new/ninety_nine_bottles_of_beer.rb
Original file line number Diff line number Diff line change
@@ -1 +1,108 @@
# your code here
def english_number number
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

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

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

write = left
left = 0

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

num_at_start = 99
num_now = num_at_start
while num_now > 2
puts english_number(num_now).capitalize + ' bottles of beer on the wall, ' +
english_number(num_now) + ' bottles of beer!'
num_now = num_now - 1
puts 'Take one down, pass it around, ' +
english_number(num_now) + ' bottles of beer on the wall!'
end

puts "Two bottles of beer on the wall, two bottles of beer!"
puts "Take one down, pass it around, one bottle of beer on the wall!"
puts "One bottle of beer on the wall, one bottle of beer!"
puts "Take one down, pass it around, no more bottles of beer on the wall!"
28 changes: 26 additions & 2 deletions ch10-nothing-new/shuffle.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
def shuffle arr
# your code here
end
shuf = []

while arr.length > 0
rand_index = rand(arr.length)

curr_index = 0
new_arr = []

arr.each do |item|
if curr_index == rand_index
shuf.push item
else
new_arr.push item
end

curr_index = curr_index + 1
end


arr = new_arr
end

shuf
end

puts (shuffle ([5,6,7,8,9,10,11,12]))
33 changes: 32 additions & 1 deletion ch11-reading-and-writing/build_a_better_playlist.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
def music_shuffle filenames
# your code here
filenames = filenames.sort
len = filenames.length

2.times do
l_idx = 0
r_idx = len/2
shuf = []

while shuf.length < len
if shuf.length%2 == 0
shuf.push(filenames[r_idx])
r_idx = r_idx + 1
else
shuf.push(filenames[l_idx])
l_idx = l_idx + 1
end
end

filenames = shuf
end
arr = []
cut = rand(len)
idx = 0

while idx < len
arr.push(filenames[(idx+cut)%len])
idx = idx + 1
end

arr
end
songs = ['Sorry', 'Hold Up', 'Freedom','6 inch', 'Daddy Lessons', 'Don\'t Hurt Yourself']
puts(music_shuffle(songs))