Quest 4: Teeth of the Wind

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

Link to participate: https://everybody.codes/

  • hades@programming.devOPM
    link
    fedilink
    arrow-up
    2
    ·
    16 hours ago

    Rust

    use num::{BigInt, Integer};
    
    pub fn solve_part_1(input: &str) -> String {
        let gears: Vec<i64> = input.trim().lines().map(|g| g.parse().unwrap()).collect();
        (2025 * gears[0] / gears.last().unwrap()).to_string()
    }
    
    pub fn solve_part_2(input: &str) -> String {
        let gears: Vec<i64> = input.trim().lines().map(|g| g.parse().unwrap()).collect();
        let res = (BigInt::parse_bytes(b"10000000000000", 10).unwrap() * gears.last().unwrap())
            .div_ceil(&(BigInt::ZERO + gears[0]));
        res.to_string()
    }
    
    pub fn solve_part_3(input: &str) -> String {
        let mut lines = input.trim().lines();
        let first_gear = BigInt::parse_bytes(lines.next().unwrap().as_bytes(), 10).unwrap();
        let mut nominator: BigInt = first_gear * 100;
        let mut denominator: BigInt = BigInt::ZERO + 1;
        for line in lines {
            let mut split = line.split("|");
            denominator *= BigInt::parse_bytes(split.next().unwrap().as_bytes(), 10).unwrap();
            match split.next() {
                Some(size) => {
                    nominator *= BigInt::parse_bytes(size.as_bytes(), 10).unwrap();
                }
                None => {
                    break;
                }
            }
        }
        (nominator / denominator).to_string()
    }