From cfad5fed99bf9af10882c4d3d2c053d38fdd3579 Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Mon, 20 Mar 2023 07:12:25 +0000 Subject: [PATCH] 018 ok --- 018/main.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 018/tr.txt | 15 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 018/main.rs create mode 100644 018/tr.txt diff --git a/018/main.rs b/018/main.rs new file mode 100644 index 0000000..c822230 --- /dev/null +++ b/018/main.rs @@ -0,0 +1,48 @@ +use std::fs::File; +use std::io::{ self, BufRead }; + +struct Tr { + nums: Vec>, + sums: Vec> +} + +impl Tr { + pub fn new() -> Tr { + let mut nums: Vec> = Vec::new(); + let mut sums: Vec> = Vec::new(); + let file = File::open("tr.txt").unwrap(); + let lines = io::BufReader::new(file).lines(); + for ln in lines { + //let sline = ln.split(' '); + let ns: Vec = ln.unwrap().split(' ').map(|x| x.parse::().unwrap()).collect(); + sums.push(vec!(0; ns.len())); + nums.push(ns); + } + return Tr { nums: nums, sums }; + } + pub fn get(&self, r: usize, c: usize) -> u8 { + return self.nums[r][c]; + } + pub fn compute(&mut self) { + self.sums[0][0] = self.get(0, 0) as u32; + for c in 1..self.nums.len() { + for r in 0..self.nums[c].len() { + let left_top_candidate = if r > 0 { self.sums[c-1][r-1] } else { 0 }; + let right_top_candidate = if r < self.sums[c-1].len() { self.sums[c-1][r] } else { 0 }; + self.sums[c][r] = left_top_candidate.max(right_top_candidate) + self.get(c, r) as u32 + } + } + } + pub fn best_bottom_sum(&self) -> u32 { + self.sums.last().unwrap().iter().max().unwrap().clone() + } +} + + +fn main() { + let mut tr = Tr::new(); + tr.compute(); + //let n = tr.get(2,2); + let best_sum = tr.best_bottom_sum(); + println!("best: {}", best_sum); +} diff --git a/018/tr.txt b/018/tr.txt new file mode 100644 index 0000000..e236c2f --- /dev/null +++ b/018/tr.txt @@ -0,0 +1,15 @@ +75 +95 64 +17 47 82 +18 35 87 10 +20 04 82 47 65 +19 01 23 75 03 34 +88 02 77 73 07 63 67 +99 65 04 28 06 16 70 92 +41 41 26 56 83 40 80 70 33 +41 48 72 33 47 32 37 16 94 29 +53 71 44 65 25 43 91 52 97 51 14 +70 11 33 28 77 73 17 78 39 68 17 57 +91 71 52 38 17 14 91 43 58 50 27 29 48 +63 66 04 68 89 53 67 30 73 16 69 87 40 31 +04 62 98 27 23 09 70 98 73 93 38 53 60 04 23