mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 23:26:40 -08:00
Merge pull request #59 from rjnienaber/add_91_train_in_ruby
add 91 train in ruby
This commit is contained in:
58
91 Train/ruby/train.rb
Normal file
58
91 Train/ruby/train.rb
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
def intro
|
||||||
|
puts " TRAIN
|
||||||
|
CREATIVE COMPUTING MORRISTOWN, NEW JERSEY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TIME - SPEED DISTANCE EXERCISE
|
||||||
|
|
||||||
|
"
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_user_guess
|
||||||
|
while true
|
||||||
|
begin
|
||||||
|
number = Float(gets.chomp)
|
||||||
|
return number
|
||||||
|
rescue ArgumentError
|
||||||
|
# Ignored
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "!NUMBER EXPECTED - RETRY INPUT LINE"
|
||||||
|
print "? "
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def main
|
||||||
|
intro
|
||||||
|
|
||||||
|
loop do
|
||||||
|
car_speed = (Random.rand * 25 + 40).to_i
|
||||||
|
car_time = (Random.rand * 15 + 5).to_i
|
||||||
|
train_speed = (Random.rand * 19 + 20).to_i
|
||||||
|
|
||||||
|
print " A CAR TRAVELING #{car_speed} MPH CAN MAKE A CERTAIN TRIP IN
|
||||||
|
#{car_time} HOURS LESS THAN A TRAIN TRAVELING AT #{train_speed} MPH.
|
||||||
|
HOW LONG DOES THE TRIP TAKE BY CAR? "
|
||||||
|
guess = get_user_guess
|
||||||
|
|
||||||
|
answer = ((car_time * train_speed) / (car_speed - train_speed).to_f).round(5)
|
||||||
|
delta = (((answer - guess) * 100 / guess) + 0.5).abs.to_i
|
||||||
|
|
||||||
|
if delta > 5
|
||||||
|
puts "SORRY. YOU WERE OFF BY #{delta} PERCENT."
|
||||||
|
else
|
||||||
|
puts "GOOD! ANSWER WITHIN #{delta} PERCENT."
|
||||||
|
end
|
||||||
|
|
||||||
|
print "CORRECT ANSWER IS #{answer == answer.to_i ? answer.to_i : answer} HOURS.
|
||||||
|
|
||||||
|
ANOTHER PROBLEM (YES OR NO)? "
|
||||||
|
option = (gets || '').chomp.upcase
|
||||||
|
break unless option == 'YES'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
trap "SIGINT" do puts; exit 130 end
|
||||||
|
|
||||||
|
main
|
||||||
Reference in New Issue
Block a user