Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Learn to program exercises #509

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
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
13 changes: 13 additions & 0 deletions ask.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
def ask question
while true
puts question
reply = gets.chomp.downcase
if reply == 'yes'
return true
end
if reply == 'no'
return false
end
end
likes_it = ask 'Do you like eating tacos?'
puts likes_it
14 changes: 12 additions & 2 deletions ch09-writing-your-own-methods/ask.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
def ask question
# your code here
end
while true
puts question
reply = gets.chomp.downcase
if reply == 'yes'
return true
end
if reply == 'no'
return false
end
end
likes_it = ask 'Do you like eating tacos?'
puts likes_it
13 changes: 11 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,12 @@
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(1999))
34 changes: 32 additions & 2 deletions ch09-writing-your-own-methods/roman_numerals.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,33 @@
def roman_numeral num
# your code here
end
hunds = (num % 1000 / 100)
tens = (num % 100 / 10)
ones = (num % 10 )
roman = 'M' * thouscode here
if hunds == 9
roman = roman + 'CM'
elsif hunds == 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 = roman + '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))
22 changes: 20 additions & 2 deletions ch10-nothing-new/dictionary_sort.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
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
81 changes: 80 additions & 1 deletion ch10-nothing-new/english_number.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,82 @@
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
108 changes: 107 additions & 1 deletion ch10-nothing-new/ninety_nine_bottles_of_beer.rb
Original file line number Diff line number Diff line change
@@ -1 +1,107 @@
# 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 = 9999
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!"
20 changes: 18 additions & 2 deletions ch10-nothing-new/shuffle.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
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([1, 2, 2, 323, 53, 54, 65, 7, 47, 54, 2, 8765, 44, 23, 48, 6, 2, 32, 6]))
25 changes: 23 additions & 2 deletions ch10-nothing-new/sort.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
def sort arr
# your code here
end
rec_sort arr, []
end

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

smallest = unsorted.pop
still_unsorted = []

unsorted.each do |tested_object|
if tested_object < smallest
still_unsorted.push smallest
smallest = tested_object
else
still_unsorted.push tested_object
end
end
sorted.push smallest
rec_sort still_unsorted, sorted
end
puts(sort(['hello','this','should','be','sorted','into','the','right', 'order']))
33 changes: 31 additions & 2 deletions ch11-reading-and-writing/build_a_better_playlist.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
def music_shuffle filenames
# your code here
end
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 = ['aa/bbb', 'aa/ccc', 'aa/ddd',
'AAA/xxxx', 'AAA/yyyy', 'AAA/zzzz', 'foo/bar']
puts(music_shuffle(songs))
Loading