From e40ed4e55d603cd9b19eaa6dab5bb897b699c471 Mon Sep 17 00:00:00 2001 From: RFigCon Date: Mon, 25 Sep 2023 02:49:58 +0100 Subject: [PATCH] train in Lua and D --- 00_Alternate_Languages/91_Train/D/README.md | 3 ++ 00_Alternate_Languages/91_Train/D/train.d | 50 +++++++++++++++++ 91_Train/lua/train.lua | 59 +++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 00_Alternate_Languages/91_Train/D/README.md create mode 100644 00_Alternate_Languages/91_Train/D/train.d create mode 100644 91_Train/lua/train.lua diff --git a/00_Alternate_Languages/91_Train/D/README.md b/00_Alternate_Languages/91_Train/D/README.md new file mode 100644 index 00000000..6c77f0a9 --- /dev/null +++ b/00_Alternate_Languages/91_Train/D/README.md @@ -0,0 +1,3 @@ +Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html). + +Conversion to [MiniScript](https://dlang.org). \ No newline at end of file diff --git a/00_Alternate_Languages/91_Train/D/train.d b/00_Alternate_Languages/91_Train/D/train.d new file mode 100644 index 00000000..b4e595a0 --- /dev/null +++ b/00_Alternate_Languages/91_Train/D/train.d @@ -0,0 +1,50 @@ +import std.stdio; +import std.random : uniform; + +float abs(float num) { + if(num<0){ + return num*-1; + } + + return num; +} + +void main() { + + writeln("\nTIME - SPEED DISTANCE EXERCISE"); + + bool keep_playing = true; + float error_margin = 5.0; + + while(keep_playing){ + int car_speed = uniform!"[]"(40,65); //Random number between 40 and 65 + int delta_time = uniform!"(]"(4,20); //Between 5 and 20 + int train_speed = uniform!"[)"(20,40); //Between 20 and 39; This is the default if not specified: uniform(x,y) + + writeln("\nA CAR TRAVELING AT ", car_speed, " MPH CAN MAKE A CERTAIN TRIP IN ", delta_time, + " HOURS LESS THAN A TRAIN TRAVELING AT ", train_speed, "MPH." ); + + float input; + write("HOW LONG DOES THE TRIP TAKE BY CAR? "); + readf!"%f\n"(input); + + float car_time = cast(float)delta_time * train_speed / (car_speed - train_speed); + int percent = cast(int)( abs(car_time-input) * 100 / car_time + .5); + + if(percent > error_margin){ + writeln("SORRY. YOU WERE OFF BY ", percent, " PERCENT."); + }else{ + writeln("GOOD! ANSWER WITHIN ", percent, " PERCENT."); + } + writeln("CORRECT ANSWER IS ", car_time, " HOURS."); + + string answer; + write("\nANOTHER PROBLEM (YES OR NO)? "); + readf!"%s\n"(answer); + + if( !(answer == "YES" || answer == "Y" || answer == "yes" || answer == "y") ){ + keep_playing = false; + } + } + +} \ No newline at end of file diff --git a/91_Train/lua/train.lua b/91_Train/lua/train.lua new file mode 100644 index 00000000..0d11e73c --- /dev/null +++ b/91_Train/lua/train.lua @@ -0,0 +1,59 @@ +print [[ + TRAIN + CREATIVE COMPUTING MORRISTOWN, NEW JERSY + + + + TIME - SPEED DISTANCE EXERCISE]] + +math.randomseed(os.time()) + +local error_margin = 5.0 + +function play() + local car_speed = math.random(40, 65) + local delta_time = math.random(5, 20) + local train_speed = math.random(20, 39) + + print( string.format("\nA CAR TRAVELING AT %u MPH CAN MAKE A CERTAIN TRIP IN %u HOURS LESS THAN A TRAIN TRAVELING AT %u MPH.", car_speed, delta_time, train_speed) ) + + local try = true + local input + while try do + io.write("HOW LONG DOES THE TRIP TAKE BY CAR? ") + input = io.read("n") + if input == nil then + print("PLEASE INSERT A NUMBER") + else + try = false + end + io.read() + end + + local car_time = delta_time * train_speed / (car_speed - train_speed) + local percent = ( math.abs(car_time-input) * 100 / car_time + .5) + + if percent > error_margin then + print( string.format("SORRY. YOU WERE OFF BY %f PERCENT.", percent) ) + else + print( string.format("GOOD! ANSWER WITHIN %f PERCENT.", percent) ) + end + + print( string.format("CORRECT ANSWER IS %f HOURS.", car_time) ) +end + +function game_loop() + local keep_playing = true + while keep_playing do + play() + io.write("\nANOTHER PROBLEM (YES OR NO)? ") + answer = io.read("l") + + if not (answer == "YES" or answer == "Y" or answer == "yes" or answer == "y") then + keep_playing = false + end + end + +end + +game_loop() \ No newline at end of file