디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

AoC 2024 Day 3 풀이

딱님갤로그로 이동합니다. 2024.12.04 11:57:47
조회 59 추천 0 댓글 1

use std::fs;

const MUL: &str = "mul(";

const DO: &str = "do()";

const DONT: &str = "don't()";

const TEST1: &str = "xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))";

const TEST2: &str = "xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))";

fn part1(program: &str) -> usize {
    let mut i = 0usize;
    let mut res = 0usize;

    while i < program.len() {
        let suffix = &program[i..];
        let mut operand1 = 0usize;
        let mut operand2 = 0usize;

        if !suffix.starts_with(MUL) {
            i += 1;
            continue;
        }

        i += MUL.len();
        let suffix = &program[i..];

        // XXX: ugly
        if let Some(j) = suffix.find(',') {
            if let Ok(op1) = &suffix[..j].parse::<usize>() {
                operand1 = *op1;
                i += j + 1;
            } else {
                continue;
            }
        } else {
            continue;
        }

        let suffix = &program[i..];

        if let Some(j) = suffix.find(')') {
            if let Ok(op2) = &suffix[..j].parse::<usize>() {
                operand2 = *op2;
                i += j + 1;
            } else {
                continue;
            }
        } else {
            continue;
        }

        res += operand1 * operand2;
    }

    res
}

fn part2(program: &str) -> usize {
    let mut i = 0usize;
    let mut res = 0usize;

    let mut is_enabled = true;
    while i < program.len() {
        let suffix = &program[i..];
        let mut operand1 = 0usize;
        let mut operand2 = 0usize;

        if suffix.starts_with(DO) {
            is_enabled = true;
            i += DO.len();
            continue;
        } else if suffix.starts_with(DONT) {
            is_enabled = false;
            i += DONT.len();
            continue;
        }

        if !suffix.starts_with(MUL) {
            i += 1;
            continue;
        }

        i += MUL.len();
        let suffix = &program[i..];

        // XXX: ugly
        if let Some(j) = suffix.find(',') {
            if let Ok(op1) = &suffix[..j].parse::<usize>() {
                operand1 = *op1;
                i += j + 1;
            } else {
                continue;
            }
        } else {
            continue;
        }

        let suffix = &program[i..];

        if let Some(j) = suffix.find(')') {
            if let Ok(op2) = &suffix[..j].parse::<usize>() {
                operand2 = *op2;
                i += j + 1;
            } else {
                continue;
            }
        } else {
            continue;
        }

        if is_enabled {
            res += operand1 * operand2;
        }
    }

    res
}

fn main() {
    println!("{}", part1(TEST1));

    println!("{}", part2(TEST2));

    let program = fs::read_to_string("./inputs/day3.txt").unwrap();

    let sum: usize = program.lines().map(part1).sum();

    println!("{}", sum);

    let sum: usize = part2(&program);

    println!("{}", sum);
}


손수 파싱을 하시다


3시간 걸림

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 과음으로 응급실에 가장 많이 갔을 것 같은 스타는? 운영자 25/03/03 - -
2822158 좆기도 애미애비 포함 다 죽었으면 좋겠다 ㅇㅇ 프갤러(211.193) 02.24 43 0
2822157 프로그래밍 기술은 도구이고, 프로그래밍 철학은 왜? 인듯 ㅆㅇㅆ(124.216) 02.24 61 0
2822156 리누스 토발즈도 C로 OOP 구현하는거보여줬고 존 카맥도 C++로 ㅆㅇㅆ(124.216) 02.24 74 0
2822155 내가 생각하는게 프로그래머의 실력은 프로그래밍 철학이 결정하는듯 ㅆㅇㅆ(124.216) 02.24 63 0
2822154 후임 경력 3년차인데 오늘 extern 알려줬다 [3] 프갤러(61.79) 02.24 91 0
2822152 고부가가치 [1] 프갤러(119.202) 02.24 55 0
2822151 블로그 만드는건 나중에 하고 이거 해결 방법이나 생각해야겠다 ㅆㅇㅆ(124.216) 02.24 51 0
2822150 [애니 뉴스] 문화의 성지! 디비 구성! 프갤러(121.172) 02.24 65 1
2822149 중딩 뉴비.. [3] 프갤러(106.101) 02.24 81 1
2822148 좆기도 새끼들 애미애비랑 싹다 죽었으면 좋겠다 ㅇㅇ 프갤러(211.193) 02.24 40 0
2822147 제네릭 쓸수있지만 안쓰고싶다 ㅆㅇㅆ(124.216) 02.24 54 0
2822146 엑셀 무료 다운 받을수 있는곳 없냐? [3] ㅋㅋ(211.224) 02.24 97 0
2822145 야구축구농구스포츠 하던 애들이, 컴퓨터는 야동볼때나 키다가 머스크멜론(218.234) 02.24 56 0
2822144 형들 90년생인데 Ai 전문가가 되고싶어 [3] 프갤러(116.126) 02.24 105 0
2822143 ecc 메모리님께서 오셨습니다 *루비*갤로그로 이동합니다. 02.24 46 0
2822142 혹시 40 프린이... 동남아 마피아 뭐 그런거 아냐?? [1] *루비*갤로그로 이동합니다. 02.24 58 0
2822141 아.. 지독한 감기.. *루비*갤로그로 이동합니다. 02.24 46 0
2822140 열람은 ㅈㄴ하는데 면접만 4번갓네 시벌 [16] ㅇㅇ갤로그로 이동합니다. 02.24 398 1
2822138 조코딩 AI 매매 프로그램 [5] 프갤러(211.245) 02.24 130 0
2822137 WSL2 Ubuntu 22.04이미지에 왜 플러터 윈도우 DLL가 있냐 프갤러(121.131) 02.24 48 0
2822136 일본 기업이 정직원 해고 하는 방법 머스크멜론(218.234) 02.24 71 0
2822135 진짜 디시를 끊어야해 쉬는날에도 무조건 바깥에서 하던 ㅇㅇ(211.219) 02.24 49 0
2822134 코딩 공부를 게을리 한 적이 없는데도 코딩은 어렵기도 하고 쉽기도 하고 ㅆㅇㅆ(124.216) 02.24 55 0
2822133 코딩공부를 왜 멈췄을까 ㅇㅇ갤로그로 이동합니다. 02.24 69 0
2822132 디시 글 미디엄에 블로그 파서 옮겨써야지 [3] ㅆㅇㅆ(124.216) 02.24 85 0
2822131 나는 여자와 이야기할 수 있을까 [8] ㅆㅇㅆ(124.216) 02.24 99 0
2822129 코딩은 어렵구니 [1] ㅆㅇㅆ(124.216) 02.24 67 0
2822128 이론공부하는데 괜히 이 메커니즘 재밌어서 공유함 [6] 프갤러(211.210) 02.24 105 1
2822127 난 왜 학교다닐때 [5] 프갤러(119.202) 02.24 114 0
2822126 목요일 아침면접보고 아직까지 연락 없으면 [3] 프갤러(222.251) 02.24 70 0
2822125 나 카레 만들었는데 어떰? [3] 매큐이로갤로그로 이동합니다. 02.24 75 0
2822124 [애니 뉴스] 문화의 성지- 애니뉴스! 프갤러(121.172) 02.24 52 1
2822123 코드는 예술이다. 프갤러(119.202) 02.24 72 0
2822122 프로그래밍 러닝커브 그래프로 그려봤음 프갤러(121.139) 02.24 71 1
2822121 독일 보수우파정권 수립 ! [2] ♥냥덩이♥갤로그로 이동합니다. 02.24 56 0
2822120 윾데미 강의 2개를 샀는데, 안보고 있음 머스크멜론(218.234) 02.24 49 0
2822118 근데 노노제네릭파는 왜 제네릭 싫어하는거임? [6] 프갤러(211.210) 02.24 115 0
2822117 요즘 코딩공부를 게을리하고 있다. [9] 40대프린이(220.126) 02.24 128 0
2822116 복수전공이나 부전공으로 딴 학위는 취업에 유불리 클려나? [3] ㅇㅇ갤로그로 이동합니다. 02.24 107 0
2822115 인터넷 개통햇다. 프갤러(121.139) 02.24 38 0
2822114 나 나가는 자리 대타 구인 스펙 적어주는데 현타오네 ㅇㅅㅇ 프갤러(121.131) 02.24 64 0
2822112 비야네의 싯불불이나 스위니의 블프나 [3] 프갤러(119.202) 02.24 58 0
2822111 웹게임 (좀비 킬2) [1] wind갤로그로 이동합니다. 02.24 56 0
2822110 챗티아빠 샘씨도 게이였노 [4] 헬마스터갤로그로 이동합니다. 02.24 64 0
2822109 차단 기네 넥도리아(61.83) 02.24 38 0
2822108 개발자도 ebs 극한직업 한 번 나와줘야됨 [1] ㅇㅇ(117.111) 02.24 99 0
2822107 화교분탕들의 집요한 메건 연애썰 날조-남돌 ㅇㅇ(175.223) 02.24 55 0
2822106 회사에서 고학력자 우대하는 이유가 뭐임? [7] ㅇㅇ갤로그로 이동합니다. 02.24 122 0
2822105 서울광역시 세종특별시 수도이전개헌 가즈아. 프갤러(211.219) 02.24 48 1
2822104 나빼고 다 더미데이터면 우짜지 ㅇㅅㅇ [6] 익명의따당이갤로그로 이동합니다. 02.24 104 0
뉴스 술 취해 5살 딸 데리고 무단횡단 한 아빠... 오은영 “끔찍” 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2