From ba9ca01206467088129dbf4e968ae3124f425584 Mon Sep 17 00:00:00 2001 From: "stephan.com" Date: Tue, 8 Feb 2022 17:41:28 -0800 Subject: [PATCH] 52-Kinema: ruby --- 52_Kinema/ruby/kinema.rb | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 52_Kinema/ruby/kinema.rb diff --git a/52_Kinema/ruby/kinema.rb b/52_Kinema/ruby/kinema.rb new file mode 100644 index 00000000..27ed2aa2 --- /dev/null +++ b/52_Kinema/ruby/kinema.rb @@ -0,0 +1,45 @@ +#!/usr/bin/env ruby + +# Kinema +# reinterpreted from BASIC by stephan.com + +EPSILON = 0.15 + +def close?(guess, answer) + (guess-answer).abs < answer * EPSILON +end + +def ask(text, answer) + puts text + guess = gets.strip.to_f + if close?(guess, answer) + puts 'Close enough' + @score += 1 + else + puts 'Not even close....' + end + + puts "Correct answer is #{answer}" +end + +puts 'Kinema'.center(80) +puts 'Adapted by stephan.com'.center(80) +puts; puts; puts; + +loop do + puts; puts + @score = 0 + v = 5 + rand(35) + + puts "A ball is thrown upwards at #{v} meters per second" + + ask 'How high will it go? (in meters)', 0.05 * v * v + ask 'How long until it returns? (in seconds)', v/5.0 + + t = 1 + rand(2*v)/10.0 + ask "What will its velocity be after #{t} seconds?", v - 10 * t + puts + print "#{@score} right out of 3." + print " not bad" if @score > 1 + puts +end