fruitbat

real bat dragon

old enough | gay for @comforttiger
last.fm recent played



oh no

use std::path::PathBuf;

fn first_number(line: impl Iterator<Item = char>) -> char {
    for char in line {
        if char.is_ascii_digit() {
            return char;
        }
    }
    return 'c';
}

pub fn task1(file: &PathBuf) {
    let list = std::fs::read_to_string(file).unwrap();
    let list = list.split("\n");
    let list = list
        .into_iter()
        .filter(|line| line.chars().count() > 0)
        .map(|line| {
            line.chars()
                .into_iter()
                .filter(|digit| digit.is_ascii_digit())
        })
        .map(|line| (first_number(line.clone()), first_number(line.rev())))
        .map(|chars| {
            let number: u64 = format!("{}{}", chars.0, chars.1).parse().unwrap();
            number
        })
        .collect::<Vec<u64>>();

    let mut result = 0;
    for number in list {
        result += number;
    }

    println!("{result}")
}

pub fn task2(file: &PathBuf) {
    let list = std::fs::read_to_string(file).unwrap();
    let list = list.split("\n");
    let list = list
        .into_iter()
        .filter(|line| line.chars().count() > 0)
        .map(|line| {
            let line = line
                .replace("one", "o1e")
                .replace("two", "t2o")
                .replace("three", "t3e")
                .replace("five", "f5e")
                .replace("six", "s6x")
                .replace("seven", "s7n")
                .replace("eight", "e8t")
                .replace("nine", "n9e");
            let line = line
                .replace("one", "1")
                .replace("two", "2")
                .replace("three", "3")
                .replace("four", "4")
                .replace("five", "5")
                .replace("six", "6")
                .replace("seven", "7")
                .replace("eight", "8")
                .replace("nine", "9");
            line
        })
        .map(|line| {
            line.chars()
                .into_iter()
                .filter(|digit| digit.is_ascii_digit())
                .collect::<Vec<_>>()
        })
        .map(|line| {
            (
                first_number(line.clone().into_iter()),
                first_number(line.into_iter().rev()),
            )
        })
        .map(|chars| {
            let number: u64 = format!("{}{}", chars.0, chars.1).parse().unwrap();
            number
        })
        .collect::<Vec<u64>>();

    let mut result = 0;
    for number in list {
        result += number;
    }

    println!("{result}")
}


You must log in to comment.
Pinned Tags