Add day 7

This commit is contained in:
kageru 2021-12-07 11:57:45 +01:00
parent 728b95b9e1
commit 413339cdb8
2 changed files with 59 additions and 0 deletions

1
2021/inputs/day07 Normal file
View File

@ -0,0 +1 @@
1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,36,179,113,77,919,469,943,361,320,513,272,735,839,82,41,318,295,1758,280,1294,368,455,165,475,865,864,90,481,485,1517,554,32,104,1125,518,1280,165,423,209,188,1803,338,165,295,1082,715,343,15,316,71,310,282,239,779,314,759,1092,609,268,490,175,10,241,246,949,75,217,1,97,81,509,552,642,55,221,105,131,906,247,500,534,400,268,727,1395,47,570,318,38,370,2,1290,95,285,11,453,563,6,64,379,823,52,815,1678,86,543,378,732,188,106,68,173,400,23,295,548,484,74,574,656,1010,1607,1170,256,381,1452,400,136,68,1285,145,595,512,26,1745,737,757,193,361,1284,127,96,659,272,114,409,393,868,270,740,326,902,1862,524,799,632,465,714,1416,1,10,921,181,1302,7,430,294,241,694,29,402,71,263,585,193,194,808,175,1240,245,309,108,989,287,8,422,1760,80,120,5,551,596,15,455,134,970,106,1041,600,158,221,88,115,284,68,378,1023,815,251,238,287,280,406,1398,690,612,285,1167,235,10,915,13,1497,254,1317,1482,1119,1207,829,165,280,438,669,482,550,775,727,1760,473,550,992,33,215,681,1789,821,492,230,12,629,55,1218,342,292,35,503,739,594,243,24,678,101,800,138,1652,512,73,318,1611,9,47,1041,168,880,72,121,313,201,605,865,249,356,568,513,618,184,481,111,1602,660,206,529,745,492,207,537,493,457,28,633,59,214,653,1250,1001,133,140,1496,109,893,323,6,649,653,264,255,1549,1814,440,72,347,353,420,662,592,840,78,238,1165,485,1544,515,297,531,258,305,149,129,5,19,235,1658,222,217,1180,627,51,1056,186,1345,468,77,111,305,183,312,367,293,775,777,103,418,295,1066,108,1544,234,225,39,1233,626,163,643,371,191,1588,279,1560,754,1198,580,82,43,975,92,1118,29,87,1162,80,537,1216,1332,298,91,747,264,29,910,136,11,22,21,115,17,958,722,678,734,2,438,313,210,109,151,1072,1,1270,326,276,472,964,1349,1390,27,810,42,33,411,545,147,10,944,1023,704,652,912,13,324,91,34,539,174,776,41,378,320,61,169,454,10,9,223,126,1,684,721,475,482,132,278,1635,943,41,182,417,142,387,540,205,1409,392,420,1430,78,473,1160,347,890,716,62,205,258,676,500,60,290,566,942,363,104,19,490,731,885,837,345,776,193,1679,361,75,26,11,972,252,230,1243,1829,65,210,291,545,306,316,31,841,582,24,452,459,571,362,178,277,844,175,1010,339,55,360,413,1555,320,1050,28,1417,285,109,448,188,119,538,136,430,971,144,324,276,993,795,246,47,1258,638,1149,743,288,181,470,280,459,1392,2,570,147,143,32,70,904,554,84,1092,555,722,419,576,434,216,783,752,667,136,765,64,86,648,685,105,865,80,365,410,799,981,1546,1215,212,1406,716,1053,158,259,52,48,311,294,1186,716,484,343,101,13,712,767,168,39,108,245,64,728,236,870,976,328,65,252,322,148,506,1347,1478,417,853,362,356,3,739,323,1068,499,644,1432,50,836,136,140,1276,1307,212,748,767,1012,1237,32,304,243,26,239,69,1133,528,303,658,335,373,10,36,47,143,1476,476,991,668,1447,157,243,225,737,1733,43,772,814,1032,24,41,365,69,260,49,567,1113,67,5,122,520,11,349,11,519,127,383,481,605,1196,749,260,67,201,78,451,267,332,15,1855,554,144,94,20,13,761,61,25,237,3,196,695,1202,692,156,558,1410,240,526,68,223,743,5,1067,985,29,944,324,1040,69,1204,67,37,837,366,698,704,864,771,0,63,305,754,529,522,112,247,521,526,341,551,40,531,46,118,212,1024,305,440,238,339,581,201,840,41,811,115,236,1000,434,187,290,705,456,625,280,22,1203,861,35,380,101,923,462,570,479,860,450,40,676,959,391,396,194,52,862,217,725,14,273,63,475,43,496,1174,397,281,963,160,113,146,244,912,923,467,561,1180,354,802,188,214,2,100,1789,534,362,34,1148,998,231,460,28,117,471,412,651,513,305,986,121,175,447,566,76,1212,634,92,1523,671,802,36,81,791,503,1277,35,379,45,677,156,1,518,205,656,170,797,445,307,899,319,1104,806,842,272,1047,230,19,507,162,498,524,678,262,108,143,221,155,629,681,309,156,35,396,1440,796,302,6,857,1218,737,767,1465,8,236,550,20,334,371,282,381,167,211,398,937,185,282,389,464,343,160

58
2021/src/bin/day07.rs Normal file
View File

@ -0,0 +1,58 @@
#![feature(int_abs_diff)]
#![feature(test)]
extern crate test;
use aoc2021::common::*;
use itertools::{Itertools, MinMaxResult};
const DAY: usize = 7;
type Parsed = Vec<usize>;
fn parse_input(raw: &str) -> Parsed {
parse_nums_comma(raw)
}
fn min_max(parsed: &Vec<usize>) -> (usize, usize) {
match parsed.iter().minmax() {
MinMaxResult::MinMax(&min, &max) => (min, max),
_ => unreachable!("List not long enough"),
}
}
fn part1(parsed: &Parsed) -> usize {
let (min, max) = min_max(parsed);
(min..=max).map(|x| parsed.iter().map(|p| p.abs_diff(x)).sum()).min().unwrap()
}
fn sum_to(n: usize) -> usize {
(1..=n).sum()
}
fn part2(parsed: &Parsed) -> usize {
let (min, max) = min_max(parsed);
(min..=max).map(|x| parsed.iter().map(|p| p.abs_diff(x)).map(sum_to).sum()).min().unwrap()
}
fn main() {
let input = parse_input(&read_file(DAY));
println!("Part 1: {}", part1(&input));
println!("Part 2: {}", part2(&input));
}
#[cfg(test)]
mod tests {
use super::*;
use aoc2021::*;
const TEST_INPUT: &str = "16,1,2,0,4,2,7,1,2,14";
test!(part1() == 37);
test!(part2() == 168);
bench!(part1() == 328318);
bench!(part2() == 89791146);
bench_input!(Vec::len => 1000);
#[bench]
fn bench_sum_to(b: &mut test::Bencher) {
b.iter(|| assert_eq!(sum_to(test::black_box(1000000)), 500000500000))
}
}