diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/expansion/Cargo.lock b/expansion/Cargo.lock new file mode 100644 index 0000000..77a7d6a --- /dev/null +++ b/expansion/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "expansion" +version = "0.1.0" diff --git a/expansion/Cargo.toml b/expansion/Cargo.toml new file mode 100644 index 0000000..33dd1f2 --- /dev/null +++ b/expansion/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "expansion" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/expansion/src/main.rs b/expansion/src/main.rs new file mode 100644 index 0000000..6a745c8 --- /dev/null +++ b/expansion/src/main.rs @@ -0,0 +1,61 @@ +use std::io; + +const EXPONENTS: &str = "⁰¹²³⁴⁵⁶⁷⁸⁹"; + +fn choose(n: u64, r: u64) -> u64 { + if r > n-r { + return choose(n, n-r); + } + let mut result = 1; + for i in 0..r { + result = result * (n - i) / (i + 1); + } + result +} + +fn superscript(n: i64) -> String { + let n = n.to_string(); + + let mut combined = String::new(); + for c in n.chars() { + if c == '-' { + combined.push_str("-"); + } else { + let pos = c.to_digit(10).unwrap(); + combined.push(EXPONENTS.chars().nth(pos as usize).unwrap()) + } + } + + combined +} + +fn main() { + println!("Enter a, b, and k, separated by a space:"); + let mut s = String::new(); + io::stdin().read_line(&mut s).unwrap(); + + let nums: Vec = s.split_whitespace().map(|d| d.parse::().unwrap()).collect(); + + let a = nums[0]; + let b = nums[1]; + let k = nums[2]; + + let mut pow_a: u32 = k.try_into().unwrap(); + let mut pow_b: u32 = 0; + + let mut expansion: Vec = vec![]; + + for i in 0..k+1 { + let mut end = String::new(); + if pow_b != k as u32 { + end = format!("x{}", superscript(pow_a.into())); + pow_a -= 1; + } + + expansion.push(format!("{} {}", choose(k as u64, i as u64) * (a.pow(pow_a) * b.pow(pow_b)) as u64, end)); + + pow_b += 1; + } + + println!("{}", expansion.join(" + ")); +}