commit 619aaa3505ef641ee136bfa8e4800750483f4c85 Author: Mitchell M Date: Thu Jan 15 18:41:21 2026 -0600 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..a8cdb8f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "plaster_calc" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..9e250c2 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "plaster_calc" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..7165889 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,62 @@ +use std::env; +use std::process; + +const GRAMS_PER_OUNCE: f64 = 28.349523125; + +fn main() { + let args: Vec = env::args().collect(); + + if args.len() != 2 { + eprintln!("Usage: {} ", args[0]); + process::exit(1); + } + + let part_volume_cm3: f64 = match args[1].parse() { + Ok(v) => v, + Err(_) => { + eprintln!("Error: volume must be a number"); + process::exit(1); + } + }; + + println!("\n=== Full scale ({:.2}cm^3) ===", part_volume_cm3); + print_volume_stats(part_volume_cm3); + + let scaled_volume = part_volume_cm3 / 8.0; + println!("\n=== 1/8 scale ({:.2}cm^3) ===", scaled_volume); + print_volume_stats(scaled_volume); +} + +fn print_volume_stats(part_volume_cm3: f64) { + // about 1.5 parts water produces 2 parts mix + let water_volume = part_volume_cm3 * (1.5 / 2.0); + + // density of water ≈ 1 g/cm^3 + let water_mass_g = water_volume; + + // 16 parts plaster : 10 parts water (by weight) + let plaster_mass_g = water_mass_g * (16.0 / 10.0); + + let water_mass_oz = water_mass_g / GRAMS_PER_OUNCE; + let plaster_mass_oz = plaster_mass_g / GRAMS_PER_OUNCE; + + println!("Water: {:.2} g ({:.2} oz)", water_mass_g, water_mass_oz); + println!( + "Plaster: {:.2} g ({:.2} oz)", + plaster_mass_g, plaster_mass_oz + ); + + // add 10% slack + let water_slack_g = water_mass_g * 1.10; + let plaster_slack_g = plaster_mass_g * 1.10; + + let water_slack_oz = water_slack_g / GRAMS_PER_OUNCE; + let plaster_slack_oz = plaster_slack_g / GRAMS_PER_OUNCE; + + println!("With 10% slack:"); + println!("Water: {:.2} g ({:.2} oz)", water_slack_g, water_slack_oz); + println!( + "Plaster: {:.2} g ({:.2} oz)", + plaster_slack_g, plaster_slack_oz + ); +}