Initial commit
This commit is contained in:
commit
87035de28c
4 changed files with 93 additions and 0 deletions
58
source/app.d
Normal file
58
source/app.d
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import std.conv;
|
||||
import std.getopt;
|
||||
import std.stdio;
|
||||
import std.string;
|
||||
import quantities.runtime;
|
||||
import quantities.si;
|
||||
|
||||
// Aaceleration limits (in g):
|
||||
const double lossOfConsciousness = 15.0;
|
||||
const double internalInjuries = 25.0;
|
||||
const double fatal = 40.0;
|
||||
const double puree = 100.0;
|
||||
|
||||
const Acceleration g = 9.8 * metre / second /second; // about 35.3 km/h/s
|
||||
const Mass typicalHuman = 80 * kilogram;
|
||||
|
||||
double getVelocity() {
|
||||
string v = "";
|
||||
while (!isNumeric(v)) {
|
||||
write("How fast was The Flash going? Enter a speed, as km/h: ");
|
||||
v = readln().strip();
|
||||
}
|
||||
return to!double(v);
|
||||
}
|
||||
|
||||
void main(string[] argv) {
|
||||
double velocity = 0;
|
||||
auto args = getopt(argv,
|
||||
"velocity|v", "How fast The Flash was going", &velocity
|
||||
);
|
||||
if (args.helpWanted) {
|
||||
defaultGetoptPrinter("A stupid superhero physics calculator.", args.options);
|
||||
return;
|
||||
}
|
||||
writeln("Hello, welcome to the stupid superhero physics calculator.");
|
||||
if (!velocity) velocity = getVelocity();
|
||||
|
||||
// v = vᵢ + at; vᵢ = 0, ∴ v = at, a = v/t
|
||||
Speed v = parseSI!Speed(format!"%s km/h"(velocity));
|
||||
Time t = 0.1 * second;
|
||||
Acceleration a = v / t;
|
||||
// F = ma
|
||||
Force f = typicalHuman * a;
|
||||
double accel_g = a / g;
|
||||
|
||||
writefln("The Flash goes from stand-still to %s in a tenth of a second, thus accelerating at %.1f g.", "%.0f km/h".siFormat(v), accel_g);
|
||||
writefln("This would exert a force of %s on a typical human body.", "%.1f kN".siFormat(f));
|
||||
|
||||
if (accel_g > puree) {
|
||||
writefln("Accelerating humans at over %.0f g requires hosing down afterwards.", puree);
|
||||
} else if (accel_g > fatal) {
|
||||
writefln("Accelerating humans at over %.0f g is usually fatal.", fatal);
|
||||
} else if (accel_g > internalInjuries) {
|
||||
writefln("Accelerating humans at over %.0f g results in injuries including internal bleeding.", internalInjuries);
|
||||
} else if (accel_g > lossOfConsciousness) {
|
||||
writefln("Accelerating humans at over %.0f g results in loss of consciousness.", lossOfConsciousness);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue