Guest User

Untitled

a guest
Apr 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.72 KB | None | 0 0
  1. ## Chapter 9 ##
  2.  
  3. ### Improved ask method
  4.  
  5. #!/usr/bin/ruby
  6.  
  7. def set_defaults
  8. if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
  9. system "clear"
  10. terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
  11. line_width = terminal_size[0]
  12. elsif RUBY_PLATFORM =~ /mswin32/ then
  13. system "cls"
  14. line_width = 90
  15. else
  16. line_width = 90
  17. end
  18. line_width
  19. end
  20.  
  21. def randomize_array(arr)
  22. arr.sort_by{rand}
  23. end
  24.  
  25. def get_random_item(arr)
  26. seed = rand(arr.length-1)
  27. arr[seed]
  28. end
  29.  
  30. def hr(width,char='_')
  31. puts char.center(width,char)
  32. end
  33.  
  34. def ask question
  35. while true
  36. puts question
  37. case gets.chomp.downcase
  38. when 'yes' then
  39. if question.rindex(/bed/) == nil
  40. $order.push question.sub(/\?/,'').scan(/\b\w*$/).join
  41. end
  42. return true
  43. when 'no' then return false
  44. else puts 'Please answer "yes" or "no"'
  45. end
  46. end
  47. end
  48.  
  49. food = ["tacos","burritos","chimichangas","sopapillas","flautas"]
  50. drinks = ["horchata","margaritas","tequila"]
  51. personal = ["wet the bed"]
  52. line_width = set_defaults
  53. hr(line_width)
  54. puts 'Hello stranger. Welcome to "El Taco Grande"'.center(line_width)
  55. puts 'We have some sugestions on our menu'.center(line_width)
  56. hr(line_width)
  57. puts
  58.  
  59. random_food = randomize_array(food)
  60.  
  61. $order = []
  62.  
  63. food.each do |item|
  64. ask "Do you like #{item}?"
  65. if item == random_food[0]
  66. ask "Do you #{get_random_item(personal)}"
  67. elsif item == random_food[1]
  68. ask "Do you like drinking #{get_random_item(drinks)}"
  69. end
  70. end
  71.  
  72. set_defaults
  73. puts
  74. puts "DEBRIEFING:"
  75. hr(line_width,"=")
  76. puts 'THANK YOU!'.center(line_width)
  77. hr(line_width)
  78. puts "Order details".center(line_width)
  79. $order.each do |item|
  80. puts item.center(line_width)
  81. end
  82. hr(line_width)
  83. puts
  84. puts "your order will be ready in 45 minutes!".center(line_width)
  85. puts
  86. hr(line_width)
  87.  
  88.  
  89. ### Old-school Roman numerals
  90.  
  91. def set_defaults
  92. if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
  93. system "clear"
  94. terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
  95. line_width = terminal_size[0]
  96. elsif RUBY_PLATFORM =~ /mswin32/ then
  97. system "cls"
  98. line_width = 90
  99. else
  100. line_width = 90
  101. end
  102. line_width
  103. end
  104.  
  105. def arabic_to_roman number
  106.  
  107. if number <=0 || number>3000
  108. return "The entered value can not be represented as a Roman Number"
  109. end
  110.  
  111. roman_numeral = ""
  112. numbers_equiv = [[1000,"M"],[500,"D"],[100,"C"],[50,"L"],[10,"X"],[5,"V"],[1,"I"]]
  113. roman_set = [0,0,0,0,0,0,0]
  114.  
  115. numbers_equiv.each_index do |set|
  116. if number >= numbers_equiv[set][0]
  117. roman_set[set] = number/numbers_equiv[set][0]
  118. number -= roman_set[set]*numbers_equiv[set][0]
  119. end
  120. end
  121.  
  122. roman_set.each_index do |current|
  123. roman_set[current].times { roman_numeral += numbers_equiv[current][1] }
  124. end
  125. "Your Roman Number is: #{roman_numeral}"
  126. end
  127.  
  128. line_width = set_defaults
  129.  
  130. while true
  131. puts "_".center(line_width,"_")
  132. puts "Enter a number to convert".center(line_width)
  133. puts "to exit type [x]".center(line_width)
  134. puts "_".center(line_width,"_")
  135. puts
  136. print "Number: "
  137. num = gets.chomp
  138. if num == 'x'
  139. set_defaults
  140. puts "Bye!"
  141. break
  142. end
  143. set_defaults
  144. puts "_".center(line_width,"_")
  145. puts " #{arabic_to_roman num.to_i} ".center(line_width,"#")
  146. puts "_".center(line_width,"_")
  147. puts
  148. end
  149.  
  150.  
  151. ### Modern Roman numerals
  152.  
  153. $line_width = 90
  154.  
  155. def set_defaults
  156. if RUBY_PLATFORM =~ /linux|i686-darwin9/ then
  157. system "clear"
  158. terminal_size = `stty size`.split.map { |x| x.to_i }.reverse
  159. $line_width = terminal_size[0]
  160. elsif RUBY_PLATFORM =~ /mswin32/ then
  161. system "cls"
  162. end
  163. end
  164.  
  165. def arabic_to_roman number
  166. if number <=0 || number>3000
  167. return "The entered value can not be represented as a Roman Number"
  168. end
  169. roman_numeral = ""
  170. # I Like Arrays
  171. numbers_equiv = [
  172. [1000,"M"],
  173. [900,"CM"],
  174. [500,"D"],
  175. [400,"CD"],
  176. [100,"C"],
  177. [90,"XC"],
  178. [50,"L"],
  179. [40,"XL"],
  180. [10,"X"],
  181. [9,"IX"],
  182. [5,"V"],
  183. [4,"IV"],
  184. [1,"I"]
  185. ]
  186. # Maybe in this one, I should used the {X=>"Y"} syntaxist, but ... nhe... latter
  187. numbers_equiv.each do |set|
  188. if number >= set[0]
  189. to_roman = number.divmod(set[0])
  190. roman_numeral += set[1]*to_roman[0]
  191. number = to_roman[1]
  192. end
  193. end
  194. "Your Roman Number is: #{roman_numeral}"
  195. end
  196.  
  197. set_defaults
  198.  
  199. while true
  200. puts "_".center($line_width,"_")
  201. puts "Enter a number to convert".center($line_width)
  202. puts "to exit type [x]".center($line_width)
  203. puts "_".center($line_width,"_")
  204. puts
  205. print "Number: "
  206. num = gets.chomp
  207. if num == 'x'
  208. set_defaults
  209. puts "Bye!"
  210. break
  211. end
  212. set_defaults
  213. puts "_".center($line_width,"_")
  214. puts " #{arabic_to_roman num.to_i} ".center($line_width,"#")
  215. puts "_".center($line_width,"_")
  216. puts
  217. end
Add Comment
Please, Sign In to add comment