Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Chapter 9 ##
- ### Improved ask method
- #!/usr/bin/ruby
- def set_defaults
- if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
- system "clear"
- terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
- line_width = terminal_size[0]
- elsif RUBY_PLATFORM =~ /mswin32/ then
- system "cls"
- line_width = 90
- else
- line_width = 90
- end
- line_width
- end
- def randomize_array(arr)
- arr.sort_by{rand}
- end
- def get_random_item(arr)
- seed = rand(arr.length-1)
- arr[seed]
- end
- def hr(width,char='_')
- puts char.center(width,char)
- end
- def ask question
- while true
- puts question
- case gets.chomp.downcase
- when 'yes' then
- if question.rindex(/bed/) == nil
- $order.push question.sub(/\?/,'').scan(/\b\w*$/).join
- end
- return true
- when 'no' then return false
- else puts 'Please answer "yes" or "no"'
- end
- end
- end
- food = ["tacos","burritos","chimichangas","sopapillas","flautas"]
- drinks = ["horchata","margaritas","tequila"]
- personal = ["wet the bed"]
- line_width = set_defaults
- hr(line_width)
- puts 'Hello stranger. Welcome to "El Taco Grande"'.center(line_width)
- puts 'We have some sugestions on our menu'.center(line_width)
- hr(line_width)
- puts
- random_food = randomize_array(food)
- $order = []
- food.each do |item|
- ask "Do you like #{item}?"
- if item == random_food[0]
- ask "Do you #{get_random_item(personal)}"
- elsif item == random_food[1]
- ask "Do you like drinking #{get_random_item(drinks)}"
- end
- end
- set_defaults
- puts
- puts "DEBRIEFING:"
- hr(line_width,"=")
- puts 'THANK YOU!'.center(line_width)
- hr(line_width)
- puts "Order details".center(line_width)
- $order.each do |item|
- puts item.center(line_width)
- end
- hr(line_width)
- puts
- puts "your order will be ready in 45 minutes!".center(line_width)
- puts
- hr(line_width)
- ### Old-school Roman numerals
- def set_defaults
- if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
- system "clear"
- terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
- line_width = terminal_size[0]
- elsif RUBY_PLATFORM =~ /mswin32/ then
- system "cls"
- line_width = 90
- else
- line_width = 90
- end
- line_width
- end
- def arabic_to_roman number
- if number <=0 || number>3000
- return "The entered value can not be represented as a Roman Number"
- end
- roman_numeral = ""
- numbers_equiv = [[1000,"M"],[500,"D"],[100,"C"],[50,"L"],[10,"X"],[5,"V"],[1,"I"]]
- roman_set = [0,0,0,0,0,0,0]
- numbers_equiv.each_index do |set|
- if number >= numbers_equiv[set][0]
- roman_set[set] = number/numbers_equiv[set][0]
- number -= roman_set[set]*numbers_equiv[set][0]
- end
- end
- roman_set.each_index do |current|
- roman_set[current].times { roman_numeral += numbers_equiv[current][1] }
- end
- "Your Roman Number is: #{roman_numeral}"
- end
- line_width = set_defaults
- while true
- puts "_".center(line_width,"_")
- puts "Enter a number to convert".center(line_width)
- puts "to exit type [x]".center(line_width)
- puts "_".center(line_width,"_")
- puts
- print "Number: "
- num = gets.chomp
- if num == 'x'
- set_defaults
- puts "Bye!"
- break
- end
- set_defaults
- puts "_".center(line_width,"_")
- puts " #{arabic_to_roman num.to_i} ".center(line_width,"#")
- puts "_".center(line_width,"_")
- puts
- end
- ### Modern Roman numerals
- $line_width = 90
- def set_defaults
- if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
- system "clear"
- terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
- $line_width = terminal_size[0]
- elsif RUBY_PLATFORM =~ /mswin32/ then
- system "cls"
- end
- end
- def arabic_to_roman number
- if number <=0 || number>3000
- return "The entered value can not be represented as a Roman Number"
- end
- roman_numeral = ""
- # I Like Arrays
- numbers_equiv = [
- [1000,"M"],
- [900,"CM"],
- [500,"D"],
- [400,"CD"],
- [100,"C"],
- [90,"XC"],
- [50,"L"],
- [40,"XL"],
- [10,"X"],
- [9,"IX"],
- [5,"V"],
- [4,"IV"],
- [1,"I"]
- ]
- # Maybe in this one, I should used the {X=>"Y"} syntaxist, but ... nhe... latter
- numbers_equiv.each do |set|
- if number >= set[0]
- to_roman = number.divmod(set[0])
- roman_numeral += set[1]*to_roman[0]
- number = to_roman[1]
- end
- end
- "Your Roman Number is: #{roman_numeral}"
- end
- set_defaults
- while true
- puts "_".center($line_width,"_")
- puts "Enter a number to convert".center($line_width)
- puts "to exit type [x]".center($line_width)
- puts "_".center($line_width,"_")
- puts
- print "Number: "
- num = gets.chomp
- if num == 'x'
- set_defaults
- puts "Bye!"
- break
- end
- set_defaults
- puts "_".center($line_width,"_")
- puts " #{arabic_to_roman num.to_i} ".center($line_width,"#")
- puts "_".center($line_width,"_")
- puts
- end
Add Comment
Please, Sign In to add comment