day 3 jesus

This commit is contained in:
Elizabeth Hunt 2023-12-02 22:41:44 -07:00
parent cfd970e216
commit c97078c1dc
Signed by: simponic
GPG Key ID: 52B3774857EB24B1
7 changed files with 355 additions and 0 deletions

View File

@ -0,0 +1,26 @@
import { expect, test } from "bun:test";
import { main as part1 } from "./part_1";
import { main as part2 } from "./part_2";
const example = `467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..`.split("\n");
test("part1", async () => {
const answer = 4361;
const res = await part1(example);
expect(res).toEqual(answer);
});
test("part2", async () => {
const answer = 467835;
const res = await part2(example);
expect(res).toEqual(answer);
});

View File

View File

@ -0,0 +1,7 @@
=== COMPUTATION ===
=== /COMPUTATION ===
=== ANSWER TO P1 ===
528819

View File

@ -0,0 +1,7 @@
=== COMPUTATION ===
=== /COMPUTATION ===
=== ANSWER TO P2 ===
80403602

79
aoc_2023/day-03/part_1.ts Normal file
View File

@ -0,0 +1,79 @@
import { JSONSet, Vec2 } from "@/utils";
const isNumeric = (symbol: string) => symbol <= "9" && symbol >= "0";
export const main = async (lines: string[]): Promise<number | string> => {
const adjacentPoints: Vec2[] = [];
const dimy = lines.length;
for (let y = 0; y < lines.length; y++) {
const dimx = lines[y].length;
for (let x = 0; x < dimx; x++) {
const symbol = lines[y][x];
if (symbol != "." && !isNumeric(symbol)) {
for (let dy = -1; dy <= 1; dy++) {
for (let dx = -1; dx <= 1; dx++) {
const newX = dx + x;
const newY = dy + y;
if (
!(dy === dx && dy === 0) &&
newX >= 0 &&
newX < dimx &&
newY < dimy &&
newY >= 0
) {
adjacentPoints.push({ x: x + dx, y: y + dy });
}
}
}
}
}
}
let sum = 0;
const visitedPoints: JSONSet<Vec2> = new JSONSet();
for (const { x, y } of adjacentPoints) {
const symbol = lines[y][x];
if (!isNumeric(symbol)) continue;
let num = "";
if (!visitedPoints.has({ x, y })) {
let x_i = x;
while (x_i >= 0 && isNumeric(lines[y][x_i])) {
x_i--;
}
x_i = Math.max(0, x_i + 1);
while (x_i < lines[y].length && isNumeric(lines[y][x_i])) {
num += lines[y][x_i];
visitedPoints.add({ x: x_i, y });
x_i++;
}
}
if (num.trim() !== "") {
sum += parseInt(num.trim());
}
}
return sum;
};
//
const isrun = process.argv.length > 1 && process.argv[1] === import.meta.path;
if (isrun) {
const file = Bun.file("./problem.txt");
const text = await file.text();
const lines = text.split("\n").filter((x) => x && x.length);
console.log("=== COMPUTATION ===\n");
const answer = await main(lines);
console.log("\n=== /COMPUTATION ===\n");
console.log("=== ANSWER TO P1 ===");
console.log(answer);
}

96
aoc_2023/day-03/part_2.ts Normal file
View File

@ -0,0 +1,96 @@
import { JSONSet, Vec2 } from "@/utils";
const isNumeric = (symbol: string) => symbol <= "9" && symbol >= "0";
export const main = async (lines: string[]): Promise<number | string> => {
const adjacentPoints: (Vec2 & { ratio: number })[] = [];
let ratioId = 0;
const dimy = lines.length;
for (let y = 0; y < lines.length; y++) {
const dimx = lines[y].length;
for (let x = 0; x < dimx; x++) {
const symbol = lines[y][x];
if (symbol === "*") {
ratioId++;
for (let dy = -1; dy <= 1; dy++) {
for (let dx = -1; dx <= 1; dx++) {
const newX = dx + x;
const newY = dy + y;
if (
!(dy === dx && dy === 0) &&
newX >= 0 &&
newX < dimx &&
newY < dimy &&
newY >= 0
) {
adjacentPoints.push({
x: x + dx,
y: y + dy,
ratio: ratioId,
});
}
}
}
}
}
}
const visitedPoints: JSONSet<Vec2> = new JSONSet();
const ratioNums: Map<number, number[]> = new Map();
for (const { x, y, ratio } of adjacentPoints) {
const symbol = lines[y][x];
if (!isNumeric(symbol)) continue;
let num = "";
if (!visitedPoints.has({ x, y })) {
let x_i = x;
while (x_i >= 0 && isNumeric(lines[y][x_i])) {
x_i--;
}
x_i = Math.max(0, x_i + 1);
while (x_i < lines[y].length && isNumeric(lines[y][x_i])) {
num += lines[y][x_i];
visitedPoints.add({ x: x_i, y });
x_i++;
}
}
if (num.trim() !== "") {
const n = parseInt(num.trim());
const curr = ratioNums.get(ratio) ?? [];
ratioNums.set(ratio, curr.concat([n]));
}
}
return Array.from(ratioNums.keys())
.map((ratioId) => {
const arr = ratioNums.get(ratioId)!;
if (arr.length > 1) {
return arr.reduce((acc, x) => acc * x, 1);
}
return 0;
})
.reduce((acc, x) => acc + x, 0);
};
//
const isrun = process.argv.length > 1 && process.argv[1] === import.meta.path;
if (isrun) {
const file = Bun.file("./problem.txt");
const text = await file.text();
const lines = text.split("\n").filter((x) => x && x.length);
console.log("=== COMPUTATION ===\n");
const answer = await main(lines);
console.log("\n=== /COMPUTATION ===\n");
console.log("=== ANSWER TO P2 ===");
console.log(answer);
}

140
aoc_2023/day-03/problem.txt Normal file
View File

@ -0,0 +1,140 @@
.479........155..............944.....622..............31.........264.......................532..........................254.........528.....
..............-...............%.....+...................=....111*.................495.......+.......558..................../..........*.....
....................791*..62.....$.............847........&........-..........618.*...........818....&..642.........................789.....
....520.58......405......#....542.../587.............*....198.......846.........*..............*.......*....................647.............
.........*........./.964..........................474.302.....................786...43..............505..436...................*.....#51....
......832....@..........*.951*....984*111..801................../.....................-.......@............%.198......322.186...262.........
..........490........690......346.........................702&.566.%....................192...190.87............*.....-....=..%.........344.
....*.........................................816*588..............152..535................*.......*...........425...........53.............
..36.290.831....374................579.536.....................408.......*..733....998....169...146.....%179..........658...............260.
...........+..../...........795/.....*.*.....................%........776......*..............................790.871./.............281*....
....................78.............716..400....319........167.................399..@.............................*.........$...599..........
............719.......*........640................%..376...............800........211......#478......326*93........889..684....*.....285....
.....852.......-.......462..................374/....%..................*........$..............................603..*..........369..&.......
........@.........960..................................*...........966.321...925............926...................*.947..&.............574..
..............%.....$.........$......*.......479....909.339..........*..............803........*17......284$...657.......587......*.........
...........772............&....345..93...465*................419......676...............-.@521.....-...........................399.662......
.................17+..2..531.......................79........*...589......198*734....534.........614..................109...................
.......301............=............................&..321..895..*..........................344.................694............717...511*....
..........%...707*370.....................473.428........*.....509......=889.....353%.........*................*.......299.......*..........
........................973.....................*.......877............................&855.955.670.@682.150....958.............197....555..
................314....*....504*352........602...468..............688.....10-....................#.......*...........306*.............*.....
.....................987.......................5.............811..*...../.......515..217...........705....462..880.......374......16...42...
....#......402.$............804..295...406.....&..150........*....22..429...268............324........-.....................................
.....270..*.....982...644.../.....+....*.........%.............................-..........#.............-...87.......................505....
938.................=...*.....=98.......370................19@.@867.............................396...272...*......760.......627.#...*......
..........593.....793....503.........34...............................406.....456...............+.........303........*...........142.432....
...........*..........&........707..*................563.....837.........+......*.....230..169.......................138....420.............
..572....689..........503.......#...................*...........*449..........39.........*./......77.......%....404......#..$............739
...............137...................#.....624.....883..../............................891.......@..........310.*.....404...................
...287.......*..%............*961.488.........@...........544..........130$................$.......531.72.......424............766..........
...*......476......316....722............780........613........../533...............96......553.91*......*.835*........*690...*.............
.350...........%...............470.950...*.............*......................%.....*...728............359.....141..326.......658..832...330
..........772...127..................-...335......./...539........362......101.....959.............221..................512.........*.......
..........*..........798.......138..............207.....................................999...574.....*..........484....&............364....
.......@...919.........*......*.....202.971...............488.................@349........*......*..........404...=........&..448..$........
.....246........211...426......206...*.....*557..........*....27..659@....588.............367...........961...*..........583.....*..280.....
...........724.....*......324*.....788..........685....788......@........*....532.................85.......*.139....75.........196..........
.......377....@..521..........391................./...........@.........987...*.....................*810.214........*.....-........490......
......................................&....679.........776....447...457......25..............................467..173....241................
................43........898.412...742......%....*540.*.............*..............825..259...997.514.........*............................
.......%775..52*...........*..*.........809....871.....384.....295..470............$.......-.....*....*..&.....114.....................=....
...147...........69=...........914..144*....=..............%.....*......$875.....+............=......278.441.........859.346.281........40..
......*....................-...............89...........578....519.............676..........473..361..................*....*..+.............
..78+..42......$...750..465.....218...833.......137...=.............538.783...........*962.........*............*...421.502....../..42......
..............457.....*.........+........*.....*....825.....26*....-.........238...205.....539.109.348........837..............842...*......
........#..............175..............925....399.............560.......88.*..............*.....*.................................636......
......693.......................447.................137............-679......479........619...283...............$458.544.-802.848@..........
...%.........................&...$....&.+39............*.........................%..618..................*141........+......................
....471...502....252....663..986...633..............530..117............598.....220...................542......568.......#219..532..15......
.........*.....-........-...........................................840.$.............717..$...................../............#......*......
.......351......993......................................573...865...*....$......848.......239.....134....826........409..338...$64..231....
...........................................=...809.925..*.........*...43..277.....@............571.=........................................
..........+698..355.....-...594....%...#.55.......*......847..409...............@...............*.....*78..........................#363.497.
...................#..261.......591..695....-....................=.....678.......714.......364.804.156...................676...605..........
587.881.....356............192.............957...963.447.................#...63.............*................344.....373........*...........
..................524..568....&...691...........*.......*...169*218..10....................10.........399.46*............../488.491.16......
.....824@.....772..$.....&..........*.265...............964............#...............................*........359...556............=.897..
.............*................293.345.*...161*.....................671.............%414.726.347.....564....................420..............
.............155.......483....................546........-.....794....*......968.........*...............591.......................$........
.....806.../.......120.*.......813....................481...........593.........*....667.815.....682........*.%579.......#298....668.188....
.......*.718.......*....469...*.........251...52*919.......846..................887....*......../........637...........................*....
.....81.......132.51..........236........-................*.......$.167....338......963..258......844.........884.......*980........#...816.
..........475.........150..........316........389......590......291..-.....*....662......*...........................143..........284.......
.......................&.......*..*....390.......+.559..................116.............926........779..................................233.
500...%......................821..594....*.........*................220...........830*...............*..........89...915.......230.363......
...*...623....337.......................40..........827..............*................828....$294....392....*....*.....%..............*.....
.993............*....565........................638...............307.............95.......#..............535.105.........632..938.166..$939
.....$..444@...378...*.......4...283...971@.......*...................689..937...*.......736......@...................991..@....*...........
....639....../.....886...........*..............668...88........472...+...*....742...493.........674....*......#........*.....*.78..-350....
...........290.........*.....%...110........447.......#....-.......*....838..........................167..911.487.....880..493..............
199...745......189=.389.....676......+........*..=........442....810........................................*.......................795.....
...................................337........76..728..=......61.....769.............................386.....627..604............$.....*623.
....=925................................=...............282.............*...597.....851..841...............2......*..........991..139.......
.......................443....=..........829....................524...816......*......*.*.....752....=468..*...805.....388@...@.......387...
....14...........*........*...325.................676..............-.........192...859..712....+..........585...............................
....*.............892...513..........286.984...................301....859.....................................900.................788%......
...19................................@............424/....155..*...........124.....*......844.......693.......*.............................
......469..................706.786.............67........*.............115*.....631.164..#............*..852..277.960.................11....
.....@.......796...850..........*..................354...471.......................................152.........................870...*...824
................*....*....832..822..............................=114.....881....-.........357*.....................................606..*...
..574............956.124........................943....278..................&.163...................=199................................761.
........329.623............308.....210..........*.........*....#...3........................792...........11...676..........................
.795.68....*........................@.......280..........965.943...............814.....182.*.....454..202*..............971.47.704.....444..
....*.........407..............558.............#.........................913.....%....%.....801.................652......*....*.....-..*....
..........552*.................*.........487......321.......852.217.......+..........................=.943..628.......303..........350.288..
.......@.....................80..................*.....$......*....*..............806*.......&....190...&.................806.235...........
.......264.538......729.................997....688..435....510......82.285............316.639....................246.......%...*.......#....
....@.........+.964...............795..+.......................862...............................945.726-....../..../...........210.....700.
..452.............*...201.....891*.............49.............*........182......483.399.847.......*.............868....204.220.......-......
.................466..*.............819...=.......184....$...114........+..........*........619....974....603................*.....854......
.......................624.........*.....42...499*......743.........586.................950....-.............................927............
........$........379&.......855..252..#.....................120%......*..$...618.......*..................619..........636..................
....408.462.............528*...........869....145.15.606............581..297...*.....35..-...........218...*.......4*....%.......175........
.....*........................$20................*..............................901......388...........$.............25...........*......157
..904........659............$.....762........808...%..........*18.............................#.878..........44..693............611..566*...
......977.......*.=.......597..-.*..........*.....538.209..............+.....$703......#....347....*652........*..........504...............
.............668...462........59.2...370...587........*.............819..............152......................919.......+..*................
.....817................688&.......................848..................639...347...........*671.......240........900..122.951..............
....*..........268/..........*821...........449..........817........86...*...............431......404..&...660....*..................691....
....611.............661....59........256.........$.......*...........+.548.........746.............+...........975...669.577...353....*.....
580.........307......&................*...........634.100....339......................*.................................*..........387......
.....594.......*........&445...........675....+.............*......857......*........192.251..........504...................../.........534.
.923..........954.............329.150......727....80.......474........$..385.............=...515*97..#......876.573...199.....921...........
...*.....236...............74........*..............*..............................919.........................*.......*..803....../460.....
.94......*.........133.......@........894.826........316............&.........%........349..752/.%.....735...........838.....*..............
...............425.*............985*........%......&........77....653....622...659.964..*.........147.-....................-.671............
......252...........898.....640.....841.........988..........*.............*.......*...805....................=...&.....410..........$743...
.........*.....................*985.........407........$756..506.........-.332....934..................253..972...903........887.199........
......#...548........608*471.........142.....*...685...............729.172......-............................................&....#.....-558
.....855..........%...........82.......*..729.......*.509.....850..@......./.910.......202........447..#........481......908........*.......
.............$.641...758..846.*.....225...............*...374...........158........231.......775....*..837...............$...........549....
.......587.615.......*.........844.......59......135..88.....*................437...*...........*.374................186....%829.167........
...691*............573..............293.*...........*.....940....105..38..........98........%.64.........432*737........*...........*.......
..........727..........@.682........=....50......324................*.......446...........51.....360....................175....227..426.....
566..186./......*277..18....*779..*.........+...........226..........184.....=......696..........+............344...550...........*.....65..
.......*..................&........728....521.....277.........&.123........+........*....+......................*....@...20.....385....*....
.....85........37....=....438.442.............522...*...757.248....*577.27..466..862...503.406*767........*736...164.......*...........233..
.................#....640.....*........834...........23...*...............*............................404...........-......785.............
.........*..................89..877*....#..572..........22............891..........295.354*864...875............=..&..706.........-.........
.......307............59............510...*....187.*247............+........#..741*..............$.......$608.316.355......*.....916....858.
..................745......705*590.......815..@...........296.....540...=..742........843.*44.......718.................309.............*...
....................*............................*888.......%..........278..............@.......878*.........797..$366..................95..
......890....*96.894......765......170/.......260.......149.......................759........................*.................940..........
.......*....................*..#...................57*....-.........................&..858................312......881.........$.......627..
....149......392..633.....581.947.#...955...151*......44.................942..............+..........14........210*.....................*...
............/......*..889.........792...........201............#.....450*............................*...*................127.........921...
....567#........253...*......................................817...........85*106......239*.......920..16.969......%......*...............76
.........*537..........583.512*...............*393.43...............513#...........906..............................562.681....*713.........
......260.....48..560..........376.........140............................151......*........823*.....921..........&.........224.............
...............*...%......=.................................716.........*..=...769.....@........65........13....29.................509......
.............61..........836..&29......357............106......*199...996.......*....545.................=...........@106......420*.........
....#...........#487.433...............#....81........*.......................488........382.....&.............#............................
..33............................908$........*........133....470&......-...........894...%......70..............626........253.*915..........
..................139*134.185...........49..142..../...............685..312...95..+..................985...#.......831.....@................
........*..................&.....................487..........822*........@....*.....................*....919......*...................*....
98......931......*98..................................@..710$...................522...915.583.72......592..........169.......353....365.678.
..............559......570...........................485..............#....582.......*.......*............*..................*....=.........
.......+...38..........*...506.........811.....+188......766...623..363....*......*.914............#.@..92.365.........../...694..312..156..
........59...*.......405...*..........*......%..........&.........*.........515.586.......239@...571.80..................852...........*....
....737.....608..........362...336....642....606..................262......................................209.........................617..