From 31b40ff79ca46821290b5a80b9aa8d45be0524e6 Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 16:53:07 -0600 Subject: [PATCH 1/6] ruby version of 92_Trap --- 92_Trap/ruby/trab.rb | 101 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 92_Trap/ruby/trab.rb diff --git a/92_Trap/ruby/trab.rb b/92_Trap/ruby/trab.rb new file mode 100644 index 00000000..500752eb --- /dev/null +++ b/92_Trap/ruby/trab.rb @@ -0,0 +1,101 @@ +#!/usr/bin/env ruby + +# Trap +# Steve Ullman, 1972-08-01 +# Ruby version Glenn Vanderburg, 2022-03-04 + +# Change these values to make the game easier or harder. +GUESSES_PER_GAME = 6 +NUMBER_UPPER_BOUND = 100 + +# Put everything in methods for order of presentation; we +# want to be able to refer to methods before declaring them, +# so the code reads nicely from top to bottom. +def main + print_banner + print_instructions + + loop do + play_a_game + break unless yes?("\nTry again?") + end +end + +def print_banner + banner = "Creative Computing -- Morristown, New Jersey" + + puts "Trap!".center(banner.size) + puts banner + 3.times { puts } +end + +def print_instructions + return unless yes?("Instructions?") + + puts <<~"END" + I am thinking of a number between 1 and #{NUMBER_UPPER_BOUND}. + Try to guess my numbrer. On each guess, + you are to enter 2 numbers, trying to trap + my number between the two numbers. I will + tell you if you have trapped my number, if my + number is larger than your two numbers, or if + my number is smaller than your two numbers. + If you want to guess one single number, type + your guess for both your trap numbers. + You get #{GUESSES_PER_GAME} guesses to get my number. + END +end + +def play_a_game + n = choose_number + + GUESSES_PER_GAME.times do |i| + lower, upper = get_guesses("Guess ##{i+1}?") + + case + when lower == upper && lower == n + puts "You got it!!!" + return + when n < lower + puts "My number is smaller than your trap numbers." + when n > upper + puts "My number is larger than your trap numbers." + else + puts "You have trapped my number" + end + end + + puts "Sorry, that's #{GUESSES_PER_GAME} guesses. Number was #{n}" +end + +def choose_number + rand(NUMBER_UPPER_BOUND) + 1 +end + +def get_guesses(prompt) + loop do + print "\n#{prompt} " + + # This is forgiving of input format; it ignores spaces and + # punctuation, returning only the strings of consecutive + # digits in the input line. + guesses = gets.scan(/\d+/) + + if guesses.size != 2 + puts "Please enter two numbers for each guess." + else + # convert the strings of digits to integers: + numbers = guesses.map(&:to_i) + # and return them, lowest number first: + return numbers.sort + end + end +end + +def yes?(prompt) + print "#{prompt} " + answer = gets + return answer.downcase.start_with?("y") +end + +main From a55f63ad6cc574cc2f7a34fcaa724a58d3de695a Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 17:08:52 -0600 Subject: [PATCH 2/6] slight cleanup and fix typoed filename --- 92_Trap/ruby/{trab.rb => trap.rb} | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) rename 92_Trap/ruby/{trab.rb => trap.rb} (93%) diff --git a/92_Trap/ruby/trab.rb b/92_Trap/ruby/trap.rb similarity index 93% rename from 92_Trap/ruby/trab.rb rename to 92_Trap/ruby/trap.rb index 500752eb..ca1f8349 100644 --- a/92_Trap/ruby/trab.rb +++ b/92_Trap/ruby/trap.rb @@ -12,24 +12,21 @@ NUMBER_UPPER_BOUND = 100 # want to be able to refer to methods before declaring them, # so the code reads nicely from top to bottom. def main - print_banner - print_instructions + print_banner_and_instructions loop do play_a_game - break unless yes?("\nTry again?") + break unless yes?("Try again?") end end -def print_banner +def print_banner_and_instructions banner = "Creative Computing -- Morristown, New Jersey" puts "Trap!".center(banner.size) puts banner - 3.times { puts } -end + 2.times { puts } -def print_instructions return unless yes?("Instructions?") puts <<~"END" @@ -93,7 +90,7 @@ def get_guesses(prompt) end def yes?(prompt) - print "#{prompt} " + print "\n#{prompt} " answer = gets return answer.downcase.start_with?("y") end From 0cb7cc9046d7573ceae6733bd8e131f13862df8a Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 17:10:18 -0600 Subject: [PATCH 3/6] reorder methods --- 92_Trap/ruby/trap.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/92_Trap/ruby/trap.rb b/92_Trap/ruby/trap.rb index ca1f8349..b00c4253 100644 --- a/92_Trap/ruby/trap.rb +++ b/92_Trap/ruby/trap.rb @@ -20,6 +20,12 @@ def main end end +def yes?(prompt) + print "\n#{prompt} " + answer = gets + return answer.downcase.start_with?("y") +end + def print_banner_and_instructions banner = "Creative Computing -- Morristown, New Jersey" @@ -89,10 +95,4 @@ def get_guesses(prompt) end end -def yes?(prompt) - print "\n#{prompt} " - answer = gets - return answer.downcase.start_with?("y") -end - main From 84f302287548768fed466c09ce51969d47305164 Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 17:14:22 -0600 Subject: [PATCH 4/6] fix spelling mistake --- 92_Trap/ruby/trap.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/92_Trap/ruby/trap.rb b/92_Trap/ruby/trap.rb index b00c4253..fd719800 100644 --- a/92_Trap/ruby/trap.rb +++ b/92_Trap/ruby/trap.rb @@ -37,7 +37,7 @@ def print_banner_and_instructions puts <<~"END" I am thinking of a number between 1 and #{NUMBER_UPPER_BOUND}. - Try to guess my numbrer. On each guess, + Try to guess my number. On each guess, you are to enter 2 numbers, trying to trap my number between the two numbers. I will tell you if you have trapped my number, if my From 6f226d59d4bcc3b19c30cc64a1ee831cd6734503 Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 17:15:40 -0600 Subject: [PATCH 5/6] tiny punctuation fix --- 92_Trap/ruby/trap.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/92_Trap/ruby/trap.rb b/92_Trap/ruby/trap.rb index fd719800..9ff53f31 100644 --- a/92_Trap/ruby/trap.rb +++ b/92_Trap/ruby/trap.rb @@ -64,7 +64,7 @@ def play_a_game when n > upper puts "My number is larger than your trap numbers." else - puts "You have trapped my number" + puts "You have trapped my number." end end From a55db2e7d92bfc3c722c496923d114a6bf7c7ce1 Mon Sep 17 00:00:00 2001 From: Glenn Vanderburg Date: Fri, 4 Mar 2022 17:24:12 -0600 Subject: [PATCH 6/6] rearrange conditions to simplify them --- 92_Trap/ruby/trap.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/92_Trap/ruby/trap.rb b/92_Trap/ruby/trap.rb index 9ff53f31..d3a5b7c5 100644 --- a/92_Trap/ruby/trap.rb +++ b/92_Trap/ruby/trap.rb @@ -56,15 +56,15 @@ def play_a_game lower, upper = get_guesses("Guess ##{i+1}?") case - when lower == upper && lower == n - puts "You got it!!!" - return when n < lower puts "My number is smaller than your trap numbers." when n > upper puts "My number is larger than your trap numbers." - else + when lower != upper puts "You have trapped my number." + else + puts "You got it!!!" + return end end