From 545b8c9259feae8bf8ea90a0b9e4e2c44687ffc1 Mon Sep 17 00:00:00 2001 From: Andres Date: Thu, 12 Dec 2024 23:05:57 +0100 Subject: [PATCH] 2024 day 12 --- 2024/day-12/day12.test.ts | 41 ++++++++++ 2024/day-12/day12.ts | 162 +++++++++++++++++++++++++++++++++++++ 2024/day-12/input.txt | 140 ++++++++++++++++++++++++++++++++ 2024/day-12/test-input.txt | 6 ++ biome.json | 7 +- 5 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 2024/day-12/day12.test.ts create mode 100644 2024/day-12/day12.ts create mode 100644 2024/day-12/input.txt create mode 100644 2024/day-12/test-input.txt diff --git a/2024/day-12/day12.test.ts b/2024/day-12/day12.test.ts new file mode 100644 index 0000000..345d29b --- /dev/null +++ b/2024/day-12/day12.test.ts @@ -0,0 +1,41 @@ +import { expect, test } from "bun:test"; +import * as path from "node:path"; +import { part1, part2 } from "./day12.ts"; + +test("day 12, part 1", async () => { + const testInput = await Bun.file( + path.resolve(__dirname, "test-input.txt"), + ).text(); + const input = await Bun.file(path.resolve(__dirname, "input.txt")).text(); + + console.log("\n\n"); + + const testResult = part1(testInput); + console.log("Test data:", testResult); + expect(testResult).toEqual(1930); + + // const finalResult = part1(input); + // console.log("Full data:", finalResult); + // expect(finalResult).toEqual(1424472); + + console.log("\n\n"); +}); + +test("day 12, part 2", async () => { + const testInput = await Bun.file( + path.resolve(__dirname, "test-input.txt"), + ).text(); + const input = await Bun.file(path.resolve(__dirname, "input.txt")).text(); + + // const testResult = part2(testInput); + // console.log("\n\n"); + // console.log("Test data:", testResult); + // expect(testResult).toEqual(1206); + + const finalResult = part2(input); + console.log("Full data:", finalResult); + expect(finalResult).toEqual(0); + expect(finalResult).not.toEqual(866276); + + console.log("\n\n"); +}); diff --git a/2024/day-12/day12.ts b/2024/day-12/day12.ts new file mode 100644 index 0000000..a99f39d --- /dev/null +++ b/2024/day-12/day12.ts @@ -0,0 +1,162 @@ +import { sum } from "remeda"; + +export function part1(input: string) { + let final = 0; + + const startPoints: [number, number][] = []; + const lines = input.split("\n"); + const grid = lines.map((l) => l.split("")); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const letters = line.split(""); + for (let j = 0; j < letters.length; j++) { + const letter = letters[j]; + if (grid[i - 1]?.[j] !== letter && grid[i]?.[j - 1] !== letter) { + startPoints.push([i, j]); + } + } + } + + while (startPoints.length > 0) { + const th = startPoints.pop(); + const queue = [th]; + const seen = new Set(); + while (queue.length > 0) { + const current = queue.shift(); + if (!current) continue; + if (seen.has(current.join(","))) continue; + queue.push( + ...getNeighbors(grid, current).map( + (x) => [x[0], x[1]] as [number, number], + ), + ); + seen.add(current.join(",")); + } + const area = seen.size; + + let perimiter = 0; + seen.values().forEach((x) => { + const [a, b] = x.split(",").map(Number); + const neighbors = getNeighbors(grid, [a, b]); + perimiter += 4 - neighbors.length; + }); + + final += perimiter * area; + seen.values().forEach((x) => { + const index = startPoints.findIndex((y) => y.join(",") === x); + if (index !== -1) { + startPoints.splice(index, 1); + } + }); + } + + return final; +} + +export function part2(input: string) { + let final = 0; + + const startPoints: [number, number][] = []; + const lines = input.split("\n"); + const grid = lines.map((l) => l.split("")); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const letters = line.split(""); + for (let j = 0; j < letters.length; j++) { + const letter = letters[j]; + if (grid[i - 1]?.[j] !== letter && grid[i]?.[j - 1] !== letter) { + startPoints.push([i, j]); + } + } + } + + while (startPoints.length > 0) { + const th = startPoints.pop(); + const queue = [th]; + const seen = new Set(); + while (queue.length > 0) { + const current = queue.shift(); + if (!current) continue; + if (seen.has(current.join(","))) continue; + queue.push( + ...getNeighbors(grid, current).map( + (x) => [x[0], x[1]] as [number, number], + ), + ); + seen.add(current.join(",")); + } + + const area = seen.size; + const sides = getSides(seen); + final += sides * area; + seen.values().forEach((x) => { + const index = startPoints.findIndex((y) => y.join(",") === x); + if (index !== -1) { + startPoints.splice(index, 1); + } + }); + } + + return final; +} + +function getSides(region: Set) { + let sides = 0; + const cornerCandidates = new Set(); + for (const rc of region) { + const [r, c] = rc.split(",").map(Number); + for (const [cr, cc] of [ + [r - 0.5, c - 0.5], + [r + 0.5, c - 0.5], + [r + 0.5, c + 0.5], + [r - 0.5, c + 0.5], + ]) { + cornerCandidates.add([cr, cc].join(",")); + } + } + + for (const g of cornerCandidates.values().toArray().sort()) { + const [cr, cc] = g.split(",").map(Number); + const config = []; + for (const [sr, sc] of [ + [cr - 0.5, cc - 0.5], + [cr + 0.5, cc - 0.5], + [cr + 0.5, cc + 0.5], + [cr - 0.5, cc + 0.5], + ]) { + if (region.has([sr, sc].join(","))) { + config.push(1); + } else config.push(0); + } + const number = sum(config); + if (number === 3 || number === 1) { + sides++; + } + if (number === 2) { + if ( + (config[0] === 0 && config[2] === 0) || + (config[1] === 0 && config[3] === 0) + ) { + sides += 2; + } + } + } + return sides; +} + +function getNeighbors( + grid: string[][], + [x, y]: [number, number], +): [number, number][] { + const currentLetter = grid[x][y]; + const up = grid[x - 1]?.[y]; + const down = grid[x + 1]?.[y]; + const right = grid[x]?.[y + 1]; + const left = grid[x]?.[y - 1]; + return [ + up === currentLetter && [x - 1, y], + down === currentLetter && [x + 1, y], + right === currentLetter && [x, y + 1], + left === currentLetter && [x, y - 1], + ].filter(Boolean) as [number, number][]; +} diff --git a/2024/day-12/input.txt b/2024/day-12/input.txt new file mode 100644 index 0000000..04eaecb --- /dev/null +++ b/2024/day-12/input.txt @@ -0,0 +1,140 @@ +UCCCCCHHHGGGGHHHPPPPPPPPDGGDDDDBKKKKKKKKKKKKKKKWWWWWWWWWGGGLLLLLLLLLZZZRTDDTTKIIIMIXXXXXAAAAAAAAAAARRRRRRRRUZUUUUUUTTTTTTTTTTTTYYRRRRRRRRRRR +UUUCCHQHHHHHHHPPPPPPPPPDDDDDDDDDKKKKKKKKKKKKKKWWWWWWWWWWWWWWLLLLLLLMZZTTTTTTTTIIIIIIIXXAAAAAAAAAAAAARRRRRRRUUUUUUUUTTTTTTTTTTTTTRRRRRRRRRRRR +UUUCCHHHHHHHHHPPPPPPPPPDDDDDDDDDKKKKKKKKKKKKKKWWWWWWWWWWWLWWLLLLLJJQQTBTTTTTTIIIIIIIIIIYAAAAAAAAAAAAARRRRUUUUUUUUUUTTTTTTTTTTTTTERRIRRRRRRRR +UUUCHHHHHHHHYHPPPPPPPPDDDDDDDDDDKKKKKKKKKKKWWWWWWWWWWWWWWLLLLLLLLLQQQTTTTTTTTIIIIIIIIIIAAAAAAAAAAAAAARRRRRUUUUUUUUTTTTTTTTTTTTTTEEEIIIRRRRRR +UUUUUHHHHHHHHPPPPPPFFPPDDDDDDDDDKKKKKKKKKKKWWWWWWWWWWWWWWLLLLLLQQQQQQQTTTTTTIIIIIIIIIIIIIIAIAAAAAAAAARRRUUUUUUUUUUTTBTTTTTTTTYTEEEEIIRRRRRRR +UUUUFHHHHHHHHHPPPFFFCDDDDDDDDDDDDDDPKKKKKKKKKKWIIWWQQWLLLLLLLLLQQQQQQQTTTTTTTTIIIIIIIIIIIIAIAAAAAAAAARRRUUUUQQQQUUTUUUTVTTTTTTEEEIIIIIIRRRRR +UUUUUHHHHHHHHPPPPFFFFDDDDDDDDDDDDDPPPKKKKKKKKHWHIIWWWWLLLLLLLLLQQQQQTQTTTTTTTTIIIIIIIIIIIIIIAAAAAAAARRRRUUBBQQUUUUUUUUUVTTYTYTTEEIIIIIIIRRRR +UUUUUHHHHHHHMPMPPFFFFDDDDDDDDTTTDDPPPPKKKKKKHHHHHHHWWQLLLLLLLLLQQQQQTTTTTTTTTTIIIIIIIIIIIIIIAAAAAAARRRNRRUUBQQQUUUUUUUUUTYYTYTTEEEIIIIIRRRRR +UUUUUHHHHHMMMMMMMNNFFCDDDDDDDDDTPIPPPPPPPPKKHHHHHHHHWQLLLLLLLLLQQGGQQQTTTTTTTTTIIIIIIIIIIIIIAAAAAAFNNNNNRRQQQQQQUUUUUUUUTYYYYIIEIEIIIIIRRRRR +UUUUHHHHHBMMMMQMMNNDDDDDDPDDDDDTPPPPPPPPPKKHHHHHHHHHWQZZZLLLLLLLGGGQQTTTTTTTTCCIICCCIIIIIIIIIKAAAAANNNNNNQQQQQQQUUUUUUUUYYYYIIIIIIIIIICCCRRR +UUMUUUHHHHMMMMQMMNNNDDDDPPPPPPPTPPPPPPPKKKHHHHHHHHHHZZZZZZZLLLLGGGGGGGTGTTTTTCCCCCCIIIIIILIIIKKAAZZNNNNBNNQQQQQQUUUUUUUUYYYYIIIIIIIIIICCCRRR +UKMUUMHHHHMMMMMMMMMNNPPPPRPPPPPPPPPPPPPPKKKHHHHHHHHHHZZZZLLLZLZGGGGGGGGGGGKTCCCCCCCIIIFFFKKKKKGHAZZZZNNNNNQQQQQQUUUUUUUUYYYYIIIDIIIIIICCRRRR +UUMUMMHHHMMMMMMMMMMPPPPPPPPPPPPPPPPPPPPKKKHHHHHHHHHHHZZZZZLZZZZGGGGGGGGGGGGCCCCCCCIIIFFKKKQKKGGGGZZNNNNNNNQQQQQUUUUUUUUUUYYYIYYIICCCCCCCCCRR +AUMMMMMMMMMMMMMMMPPPPPPPPPPPPPPPPPPPPPKKKKHHHHHHHHHHZZZZZZZZZZZOOGGGGGGGGGGCCCCCCRRFFFFKKKKKKGGGGGGNNNNNNNQQQQUUUUUUUUUYYYYYYYYYCCCCCCCCCRRR +AAMMMMMMMMMMMMMMPPPPPPPPPPPPPPPPPPPPPPKKKKHHHHHHHHHHBBZZZZZZZZZZOOOOOGGRGGCCCCCRRRRFFFFFFKFGGGGGGGGNNNNNNNNQQQUUUUUUUUUYYYYYYYYYCCCCCCCCCRRR +MMMMMMMMMMMMMMMMPPPPPPPPPPPPPPPPPPPPPPKKKKKHHHHHHHHBBBBZBZZZZZZOOOOOUUURRRYCCCCRRRRRFFFFFKFFGGGGGGGNNNNNNNNNQQUUUUUUUYYYYYYYYYYCCCCCCCCCCCRR +FFMFFFMMMMMMMVVVPPPPPPPPPPPPPPPPPPPPPPKKKKHHHHHHHHHHBBBBBBZZZZZOOOOOUUURRRYYCCCRRRRRFFFFFFFGGGGGGNNNNNNNNNNNNNPPUUUUKKYYYYYYYYCCCCCCCCCCCRRR +FFFFFFFEEOMMMMVEFFFFPPPPPPPPPPPPVVPPPKKKKKHHHHHHHHBBBBBBJZZZZZZZOOOOUURRRYYGYCCRRRRRRFFFFFFFGGGGGGGNNNNNNNNNNPPPPPUKKKKYYYYYYYYCCCCCCCCCRRRR +FFFFFEEEEOMMDDEEFFFFFPPPPPPPPPVVVVPPPKKKKHHHHHHHHBBBBBBBBJZZZZZZOOOUURRYYYYYYYCCCRRRRRFFFFFFGGGGGGGNNNNNNNNNNNPPPPUKKKYYYYYYYYYCCCCCCCCCRRRR +FFFEEEEEEOOMEDEEFFFUFFFFPPPPPPVVVVPPPKKKKHHHHHBBBBBBBBBBBZZZZZUUUUUUURYYYYYYYYRRRRRRRFFFFFFFVGVGGGGGNNNNNNNNNKPPPPPPKKYYYYYYYYYCCCCCCCCCCCRR +FFEEEEEEEOOEEEEEFFFFFFFFPPPPIVVVVVVKKKKKKKHHHHHHHBBBBBBBBZZZUUUUUUUUUUAYYYYYYYYRRRRRRRFFFFFFVVVVGGGGGNNGNVNKNKKKPPPKKKKYYYYYYYCCCCCCCCCCRRRR +FFEEEEEEEEEEEEEEFFFFFFFFPPVVVVVVRVVKKKKKHHHHHHHBGBBBBBBBBBBUUUUUUUUUUUAAADDMMDORRRRRRRRFFFFFVVVVVVVGGGNGNVVKKKKKKKPPPEYYYYYYYYYCCCCCCRRRRRRR +FFEEEEEEEEEEEEEFFFFFFFFFVVVVVVVVVVVVKKKKHHHHHHHBBBBBBBBBBBBBUUUUUUUUUNUAUUDDDDDRRRRRRRRFFFFVVVVVVVVGGGNGKKKKKKKKEEEEEEEFYYYYYYCCCCCCCRRRRRRR +FFFFFFEEEEEEEEFFFFFFFFFFMVVVVVVVVVVGPPPKKKKKHHHEBBBBBBBBBBBBUUUUUUUUUUUUUDDDDDXXRARRRRRRFFFVVVVVVVCCCGNGGGGGKKKEEEEEEEEEYYEYYYHHCNCNNDDDDDDR +FFFFFFEEEEEEEFFFFFFFFFFFFVVVVVVVVVVVPPPPKQKHHHRBBBBBBBBBBBNUUUUUUUUUUUUUUUDDDDAXAADRRRRRFFFVVVVVVVCCCGGGGGTGKKEEEEEEEEEEEEEEHHHHNNNNNDDDDDRR +FFFFFEEEEEEEEFFFFFFFFFFFFVVVVVVVVVXXXXPPPQQRRHRBBBBBBBBBBBBBUUOUUUUUUDUDDDDDDAAAAADDRRRRRFFFVVVVVVVEEGGGGGTTTVVVEEEEEEEEEEGGGHHNFNNNNNNDOORO +FFFFFEEEEEEEEEEFFFFFFFFFFVVVVVVVVVXXXXQQQQQRRRRBBBBBBBBBBBBOUUOOOKUUDDDDDDDDDJAAAADDDRFFFFFVVVVVKVEEEEEEEGTTTVVEEEEEEEEEEEGGGNNNNNNNNNNNOOOO +FFTFFFEEEEETEEEEFFFFFFFFFVVVVVVVXXXXXQQQQQQRHHRRRRRRBBBOOBBOUOOOOKKKKDDDDDDDDDAAADDDDDDDDDDVVVVVKEEEEEEEITTTTTVEEEEEEEEEEGGGGGGNWNNNNNNOOOOO +TFTTTTEEEEEEEEEEFFFFFFFFFVVVVVVVXXXXQQQQQQQRRHHHHRRRRBOOBBOOUOOOOKKKKDDDDDDDDDDAADDDDDDDDDPVVIIVKEEEEEEEEETTTTTEEEEEEEEEEGGGGGGNNNNNDNNNOOOO +TTTTTTTETEEEEEEEFFFFFFFFCCVVVVVVXGGXQQQQQQQRHHHHHVVRRBOOOBOOOOOKKKKKKDDDDDDDDDDDDDDDDDDDDDDDIIIEEEEEEEEEEEETYTTTTYEEEEEEEGGGGGGCNNNNNNRRROOO +WTTTTTTTTTTTEWEMEFFFFFFFFVVGVVXXXGGXQQQQQQQHHHHHHVVVVVOOOOOOOOKKKKKJJDDDTDDDDDDDDDDDDDDDDDDIIIESEEEEEEEEEEEYYYYYYYYEEEEEEEGGGCCCCCNNNQRRROOO +TTTTTTTTTEEEEEEEEFFFFFFFHGGGVVGGGGGGHQQQQQQQHHHHCVVVVVOOOOOOZOZSKKKKKKDTTDDDDDDDDDDDDDDDDDDDIEEEEEEEEEEEEEEYYYYYYYYEEEEEEEGGGCCCCCCNRRRRROOO +TTTTTTTTTTTTEEEEFFFFFFFHHGGGGGGGGGGGHHQQQQQHHHHCCVVVYVVOOOOOZZZZHKKKKSSDDDDDDDDDDDDDDDDDDDDDDEEEYEEEEEEEEYYYYYYYYYYYYYECCCGGGCCYYYCCOORRROOO +ITTTTTTTTTTTEEEESFFHHHHHGGGGGGGGGGGGHHHQQQHHHHVVVVVVVVVVVOZOZZZHHHHKKSSDDDDDDDDDDDDDDDDDDDDDXEEYYYYYEEHHCCYYYYYYYYYYYYRRRRGGGCYYYYYYOOOROOOO +IITTTTTTTTTEEEEEEFFHPPPGGGGGGGGGGGGHHHHHHQHHHVVVVVVVVVVVVZZZZZZHHHHHKDDDDDDDDDDDDDDDDDDDDDDDDEYYYYYYYHHHCCYYYYYYYYYYYYRRRRGGGCYYYYYMMOOOOOOO +ITTTTTTTTTTTEEEEEFFPPPPPGGGGGGGGGGGHHHHHHHHHHHHVVVVVVVVVZZZZZZZHZZHHHDDDDDDDDDDDDDDDDDDDDDDDDDYYYYYYYHHHHHRYYYHHHYYYYYRRRRRCCCCYYYMMMMOOOOOO +IITTTTTTTTTTEEEEPPPPPPPPGGGGGGGGJJHHHHHHHHHHHHHVVVVVVVVVZZZZZZZHZZHHHDDDDDDDDDDDDDDDDDDDNDWWYYYYYYYYHHHHHHHYYYPPHHHYYYRRRRRRRRRYYYYMMMOOOOOO +ITTTTTTTTTTTTTPPPPPPPPPGGGGGGGGJJJJHHHHHHHHHHHHVVVVVVVVVVZZZZZZZZHHHHHHHDDDDDDDDDDDDDDDDDWWWWYYYYHYHPHHHHHYYYYHHHYYYYYRRRRRRRRRYYYYMMMMOOOOO +IITTTTTTTTTTTPPPPPPPPPDGGGGGGGGJJJJHHHHHHHBBBHVVVVVVVVVVZZZZZZZZZZHHHHWDDDDDDDDDDDDWWWWWWWWWWWYYYHHHHHHHHHHHXXHHHYYYYYRRRRRRRRRYYYNNNMNNNNNO +IITTTTTTTTTTTTPPPPPPPPPLGGGGGGJJJJJJHHHHHHBBBBAVVVVVVVVVZZZZZZZZZHHHWWWWDUCDDDDDDDDXXWWWZWZZZZZYHHHHHHHHHHHHHHHHHYYYYYRRRRRRRRRYYDNNNNNNNNOO +IIITTTTTTTTTTTKPPQPPLLLLGGGBJJJJJJJJJHHHHBBBBFBVVVVVVZZVZZZZZZZZZHHHWWWWICCDDDDGGGXXXXWZZZZZZZZYHHHHHHHHHHHHHHHHHYYYYYRRRRRRRRRRRRRRNNNNNGGO +GGGGTTTTLTTTTTKQPQQPPLLLHHGHHJJJJJJJJJHHBBBBBBBBBVVVVZZZZZZZZZZZZWWWWWWWWWCCCCGGXXSXXXZZZZZZZZZZHHHHHHHHHHHHHHHHHHYYYYRRRRRRRRRRRRRRNNNNUUGG +GGGGLLLLLLTTQQQQQQQQLLLLHHHHHJJJJJJJJJJUUSBBBBBBBVVVVZZZZZZZZZZZWWWWWWWWWCCCCGGGXXXXXXXZZZZZZZZZHQQQQHHHHHHHHHHHHYYYYYRRRRRRRRRRRRRRNNNNNNNG +LGLLLLLLLLTDQQQQQQQLLLLHHHHHHJJJJJJJUUUUUUUUBBBBBBBZZZZZZZZZDZZZWWWWWWWWCCCCCCGGXXXXXXXXXZZZZZZZZQQQQQHHHHHHHHEEHYYYYAARRRRRRRRRRRRRNNNNNGGG +LLLLLLLLLLLQCQQQQQQLLLLHHHHHHJJJJJJJUUUUUOUUUBBBBBBZZZZZUDDDDWWWWWWWWWWWCCCCCGGGXXXXXXXXMMMMMMQQQQQQQQQHHHHHHHHHWYYYFFARRRRRRRRRRRRRNNNGGGGG +LLLLDRLLLQQQQQQQQQLLLLHHHHHHHJJJRRJJUUUUUUUUUUBBBBBBBZZVDDDDDRWWWWWWWWWWCCCCCGGGVVVXXXXXMMMMMMQQQQQQQQQHHHHHHHHHHFFFFAARRRRRRRRRRRRRNNGGGGGG +LLLLRRRLLLQQQQQQQQQQLLHHHHHHHHHJRJJJUUUUUUUUUUUBBBBBBGZVDDDDWWWWWWWWWWWWCCCCGGVGVVVVXXXXMMMMMMMMMMQQQQQHQQHHHHHHHXFFFFARRRRRRRRRRRRRPNGXLGGG +SRLRRRLLLLLQQQQQQQQLLLHHHHHHHHHHRRJJJUUUUUUUUUUBBBBBBBBDDDDDWWWWWWWDWWWHCCCCGGVVVVVVVXXXMMMMMMMMMMQQQQQMQUHWHHHXXXXXRRRRRRRRRRRRRNNNNNLLLLLG +SRRRLLLLLLLQQQQQQQQCCHHHHHHHHHHHHJJUUUUUUUUUUUBBBBBBBBDDDDDDWDDWDDDDDWWDFFFGGGVVVVVVVXXXMMMMMMMMMMQQQQQQQXGXXXXXXXXXRRRRRRRRRRRRRNNNNNLUULLG +SRRLLLLNLQQQQQQQQCCCCCHHHHHHHHHHQUUUUUUUUUUUUUBBBBBBWWDDDDDDDDDDDGDDDWDDFFGGGGVVVVVVXXXXMMMMMMMMMMQQQFQQQXXXXXXXXXXFRRRRRRRRRRRRRNNNLLLLLLLL +SLLLLLLNLQQQQQQQQQQCCHHHHHHHPHHHHUUUUUUUUUUUUUBBBBBBBWWWDDDDGDGGDGDDDDDDDDQQGGKVVVVVXMMMMMMMMMMMMMQQQQQQQQQXXXXXXXXFRRRRRRRRRRROOOJNLLLLLLLL +SNLLLLLNNQQQQQQQQQQCHHHHHHHHHHHHCUUUUUUUUUUUUZBBBBBBWWWWWWDDGDTGGGGGDDDDDDQQGGGPPGVVVMMMMMMMMMMMMMQQQQQQQQXXXXXXXXFFRRRRRRRRRROOOOJJLLLLLLLL +SNNNNNNNNSQQBQQQQQQXHHHHHHBHHBBBUUUUUUUUUUUUZZZZBBWWWWWWWWWWGGGGGGGGDDDDDDQQQGGGGGGCMMMMMMMMMMMMMMZZQQQQQQXXXXXXXXXERRRRRRRRRRRRROJFFBLLLLLL +GKNNRNNNNNNBBQQQQQXXHHHHHHBBBBBBBBUUUUUUUPPPZZZZBBBWWWWWWWWWWGGGGGGYGDDQDQQQGGGGGGGGMMMMMMMMMMMMMMQQQQQQQQQXXXXXXXEERRRRRRRRRRRRRFFFFFLLLLLL +GNNNNNNNNNBBBQQQQBBXHHFFBBBBBBBBBBBBUUUUUPPPPPPPBBBBWWWWWWWWWGGGGGGGGDDQQQQGGGGGGGGGMMMMMMMMMMMMMMQQQQQQQQQXXXXXXXEERRRRRRRRRRRRRFFFFLLLLLLL +GNNNNNNNNNBBBBQQBBBXXFFFBBBBBBBBBBBUUUUUPPPPPPPPBBBMMMWWWWWWWGGGGGGGDDDQQQQGGGGGGGGGMMMMMMMMMMMMMMQQQQQQQQQXXXXXQXEERRRRRRRRRRRRRFFFFXLLELLL +GGYNNNNNNNNBBBQBBBBBBFFFBBBBBBBBBBUUUUPPPPPPPPPPPBBWWWWWWWGWWGGGGGGGGGGGQQQGGGGGGGGCMMMMMMMMBBBZQQQQQQQQQQQQXXCXXXXERRRRRRRRRRRRRFFFFFEEELLL +GGYYNNNNNNNBBBBBBBBBFFFFFBBBFBBBBBBBUUPPPPPPPPPPPBBWWWWWWWGGGGGGGGGGGGGGGQQQQGGGGGGCMMMMMMMMBBBMMQQQQQQQQEEXXEEZEEEEEEEEEEEEFRRRRFFFFFEEEELL +GGGGNNNNNNNBBBBBBBBFFFFFFBFFFBBBBBBBBPPPPPPPPPPPPPBWWWWWWWWGGGGGGGGGGGGQQQQGGGGGGGSSMMMMMMMMBBBMMQQQQEEQEEEXEEEEEEEEEEEEEEEEERRRRFFFFEEEEEEL +GGGGNNNNNNNBBBBBBBBFFFFFFFFFBBBOOBBBBPPPPPPPPPPPPPPWWWWWWWWGGGGGGGGGGGGGQQQQQQQGGSSSMMMMMMMMBBBMMQQQQEEEEEEEEEEEEEEEEEEEEEEEERRRRFFFFEEEEEEE +GGGGGNNNGGBBBBBBBBBFFFFFFFFFFOOOBBBOPPPPPPPPPPPPPWWWWWWWWWWWWGGGGGGGGGGQQQQSQSQSSSSSMMMMMMMMBBBQQQQQQQEEEEEEEEEEEEEEEEEEEEEEERRRRFFFEEEEEEEP +GGGGGGGGGGGGBBBBBBBBFFFFFFFFFFOOOOOPPPPPPPPPPPPPAAAAWWWWWWWWWWWWGGGGGGQQQQQSSSSSSSSSSMMMMMMMBBBQQQQQQEEEEEEEEEEEEEEEEEEEYEEEERRRREEEEEEEEECI +GGGGGGGGGGGGBBBBBBBBFFFFFFFFOOOOOOOPPPPPPPPPPPPAAAAAWWWWWWWWWWWWGWGGQQQQQQQQSSSSSSSSSMMMMMMMBBBUUQQQEEEEEEEEEEEEEEEEEEEEYBEEEEEEEEEFEEEERIII +GGGGGGGGGGGGBBBBBBBBBBFFFFFFOEOOOOOPPPPPPPPPPPPAAAAAWWWWWWWWWWWWWWGGGGQQQQQSSSSSSSSSSSSMBBBSBBBUUUUQEEEEEEEEEEEEEBBBEEEEEBEJEGGEEEEFFEEERIII +GGGGGGGGGGGGBBBBBBBBBBBBBFFFFEEOOOOPPPPPPPPPPPWAAAAAAWWWWWWWWWWWWWWUGGQQQQQSSSSSSSSUUUYBBBBUBBBUUUUUNEUUEEEEEEEEEBBBVEBEBBBJJJGEEEGFFERRRIII +GGGGGGGGGGGGGGBBBBBBBBOOOFFFIOOOOOOPPPPPPPPPPWWWWAATTTWWWWWWWWWWWWWWQQQQQQQQSQSSSSUUUUYTBBBBBBBUUUUUUUUZEEEEEEEEEBBBBEBBBBBJJJGEEGGFFERRRIII +GGGGGGGGGGGGGBBBBBBBBBBOOBOOOOOOOOOPPPPPPOKKHKKKHHHTHTTZZWWWWWWWWWWQQOQQQQQQQQQQSQUUUUYYBBBBUUUUUUUUZZZZEEEEEEEEEEEBBBBBBBBGGGGGGGGGGERRRIII +GGGGGGGGGGGGGBBBBBBBBBBBOOOOOOOOOOOPPPPPPKKKKKKKHHHHHHHBZZZZWWWEWWOOOOOQQQQQQQQQQQUYYYYYBBBBUUUUUUUUUZZZEEEEEEEEEEEEBBBBGGPGGGGGGGGGDERRRIII +GGGGGGGGGGGXXBBBBBBBBBBBOOOOOOOOOOOPPPPPPKKKKKKHHHHHHHZZZZFWWWWWWWOOOQQQQQQQQUUUUUUFYYYYYYYUUUUUUUUUZZZZEEEEEEIEBBBBBBBBBGGGGGGGGGGGGRRRRIII +GGGGGGGGGGXXXBBBBBBBBBBBBOOOOOOOOOOPPPPPPKKKKKHHHHHHHHHHZZZWWWWWWOOOQQQQQQQQQUUUUUUUYYYYYYYYYGUUUUZZZZZZZZEMMMEEBBBBBBBBBGGGGGGGGGGGGRRRRIRR +GGGGGGGGGGXGGBBBBBBBBBBBOOOWOOOOOOOOKKKKKKKKKKHHHHHHHHHHMMMWWMWWOOOOOQQQQQQQQQUUUUUUZZZYYYYYYZUZZZZZDZZDDDMMMMMMBBBBBBBBBGGGGGGGGGGGGGRGRRRR +GGGGAAGGGGGGGGBBBBBBBBBBOOWWOOOOOOOOOOKKKKKKKKKKHHHHHHHHMMMMWMWWWOOOOOQQQQQQUUUUUUZZZZZZZYYZZZZZZZZZDDDDDMMMMMBBBBBBBBBBBKGGGGGGGGGGGGGGGRRR +GGGGGGGGGGGGGBBBBBBBBBBBWWWWOOOOOUOOKKKKKKKKKKKHHHHHHHHHMMMMWMMMOOOOOOOOOQUUUUUUUUUZZZZZZZZZZZZZZZZZDDDDDMMMSSSSBSBBBBBBKKKKGGGGGGGGGGGGGRRR +GGGGGGGGGGGGGGBBBBBBBBBBBBWWWUUUOUOVVUUUKKKKKKHHHHHHHHHHHMMMMMMMOOOOOOOOOQUUUUUUUUUUUEZZZZZZZZZZZZDDDDDDDDMSSSSSSSBBBBBBKKKKGGGGGGGFFFGGGRRR +GGGGGGGGGGGGGGBBBBBBBBBBBBPWWPPUUUUUUUUUKKKKKKKKHHHHHHHQMMMMMMMMMMMMLOLLOONUUUUUUUUUUEZZZZZZZZZZZDDDDDDDDDMSSSSSSSBBBKBKKKKKKKGGGGGFFFGGGGRR +GGGGGGGGGGGGGGBBBBBBBBBBBBPPPPPUUUUUUUUUKKKKKKKKKHHQPPPQMMMMMMMMMMMLLLLLNNNNUUUUUUUUUEZZZZZZZZZZZZZDDDDDDDDSSSSSSSSXKKKKKKKKKKGGGGGFFFGGGGGR +GGGGGGGGGGGGGGBBBBBBBBBBBBPPPPPUUUUUUUUUKKKKKKKQKSQQPQPQQMMMMMMMMMMLLLNNNNNNNUUUUUUUUUZZZZZZZZZZZZYDDDDDDDSSSSSSSSSSSYYKKKKKKKKKGGGFFFGGRRRR +GGGGGGGGGGGGGBBBZBBBBBBPPPPPUPUUUUUUUUUUKKKKKKKQQQQQQQPQQMMMMZZZZMMLLLLNNNNNNUUUUUUSUUZZZZZZZZZZZZYYADDDANNSSSSSSSSJKYKKKKKKKKKKGGGFFFGGZRRR +GGGGGGGGGGGGGGBBZBBBBBBBUUPUUUUUUUUUUUUUUKKKKKKQQQQQQQQQQMZZZZZMMMZZLLZZZNNNUUUUUUUUUZZZZZZZZZZZZZZYAADAANNSSSSSSSSJKYYKKKKKKKKKZZZFFFQZZRRR +GGGGIGGGBBBBBBBBZZBBBBBBUUUUUUUUUUUVUVKKKKKKKKQQQQQQQQQQQQZZZZZZMZZZLLZZZNNUUUUUURDDUUZZZZZZZZZZZYYYYAAAANNNNSSSSSSSKKKKKKKKKKKZZZZFFFFFFFFR +GGGGGGGNNBBBBBBZZBBBBZBZZUUUUUUUUUVVVVKKKKKKKKQQQQQQQQQQQZZZZZZZZZZZZZZZZZNNUUDUUUDDZZZZZZZZZZZZZYYYYYAANNNNNNNNOSRRRKKKKKKKOKKKPZZFFFFFFFFR +GGNNNGGNNNNNBBZZZBBBBZZJZZZUUUUUUUUVVVVVKMMMKKQQQQQQQQTTQTTTZZZZZZZZZZZZZZZDDDDUUUDDDZZZZZZZBZZZZYYYYAANNNNNNNNNNRRRRKKKKYKKKKKPPZNFFFFFFFFR +NNNNNGNNNNNNBBBZZZBBBZZZZZZZUUUUUVVVVVVVVVMMKKQQQQQQQQTTTTTLLZZZZZZZZZZZMMMMLDDDDDDDDZYBBBBBBZZZZYYYYAANNNNNNNNRRRRRKKKKKKKKKKPPPZZFFFZZZZRR +NNNNNNNNNNNJBBZZZZZZZZZZZZUUUUUUUVVVVVVVVMMMMKUUQQQFFTTTTTTTTZZZZZZZZZZZMLLMLDDDDDDDDDBBBNBBBBZYYYYYYAAANNNNNNNNNNNNKKKKKKKKKKPPPZKZZZZZZRRR +NNNNNNNNNNNNBBZZZZZZZZZZZZUUUUUUUVVVVVVMVMMMMUUUUTTTTTTTTTTTTTZZZZZZZZBBLLLMLDDDDBDDBBBBBBBBBBBYYYYYYYYYNNNNNNNNGGGKKKKKKKKKPPPPPPZZZZZZZIRR +NNNNNNNNNNNQZZZZZZZZZZZZMUUUUUUUUVVVVVVVUMMMMMUUTTTTTTTTTTTTTZZZZZZZZZZBBLLLLDDDDBBBBBBBBBBBBBBYYYYYYYYYNNNNGGGGGGGKRKAAAKKPPSPPPPZZIZZIIIIR +NNNNNNNQQQQQQZZZZZZZZZZZMMUUUUUUUUVVVVVVUMMMMUUUTTTTTTTTTTTTTZZZZZZZZZZBBLLLLLDLDBBBBBBBBBBBBBBYVVVYYYYYNNNNGGGGGZGZRSSSSSSSSSPPPPPPZZIIIIII +NNNNNNNNQQOQJZZZZZZZZZMMMMMUUUUUUCVVVDDVUMMMUUUUTTTTTTTTTTTTTTZZZZZZZZZBBLLLLLLLVVVVBBBBBBBBBBVVVVVVYYYYVVGGGGGGGZZZZSSSSSSSSSSPPPPPZZIIIIID +NNNNNNNNNOOQJJJZZJZZZMMMMMMMUUUMUCCCSSSSSSSUUUUUTTTTTTTTTTTTTZZZZZZZZZZBLLLLLLLLVVVVBBBBBBBBBBVVVVVVVYYYVVVGGGGZZZZZZSSSSSSSSSSSSPPPPPIIIIII +NNNNNNNOOOAJJJJJJJJZZMMMMMMMMUMMUCCCSSSSSSSUUUUUTTTTTTTTTTTTTTTZZZZZZPZLLLLLLLLLVVVVVBBBBBBBBBBVVVVVVVVVVVVGGGGGGZZZSSZSSUSSSSSSSSSWWPIIIIII +NNNNNNNOOOJJJJJJJJJZZMMMMMMMMMMMUCCCSSSSSSSUUUUUTTTTTTTTTTTTTTTCZZZZZZLLLLLLKLLVVVVVVBBBBBBBBBVVVVVVVVVVVVVGGGGZZZZZSSZSQUSSSSSSSSWWWIIIIIII +NNNNNNNNOJJJJJJJJMMMMMMMMMMMMMMMMCOOSSSSSSSUUUUUUUUUTTTTWTTTTTTCCCZRCZAAALLLKVVVVVVVBBBBBBBBABVVVVVVVVVVVVGGGZZZZZZZSSZSZUSUHSSUSSSWWIIIIIII +NNNNNNNJJJJJJJJJJJJMMMMMMMMMMMMMOOOOSSSSSSSUUUUUUKUUTTTTTTTTTTTCCCCCCAAAAALKKKVVVVVVVVBBBBBBBVVVVVVVVVVVVVVVVZZZZZZZZZZZZUUUSSSSWWWWWWJJIIII +NNNNNNNNIJJJJJJJJJMMMMMMMMMMMMMMMMSSSSSSSSSUUKKKKKKUTTTZZTTTTTTTCCCCCCCAANNKKKVVVVVVVVVVBBBBVVVVVVVVVVVVVVVTVZZZZZZZZZZZUUUUWWSWWWWWWIWWWIWI +NNNNNNNIIJJJJJJJJJJMMMKMMMMMMMMMMMSSSSSSSSSUUUUKKKKKKZZZZZZCECTCCCCCCCLNNNNNNNNNVVVVVVVVVVBVVVVVVVVVVVVVVVVVVZZZZZZZZZZZUUUUWWWWWWWWWIWWWWWW +NNNNNNNIIJJJJJJJJJJMMMMMMMMMMMMMMMSSSSSSSSSLKUKKKKKKKZZZZZZCCCCCCCCCCCCDNNNNNNVVVVVVVVVVVVVVVVVVVVVVVVVVOOOVOOOZZZZZZZZUUUUUUWWWWWWWWWWWWWWW +NNNNNNIIIIJLJJJJJJMMMMMMMMMMMMMMMMSSSSSSSSSSSKKKKKKKKKZZZZZZCCCCCCCCCCCNNNNNNNVVVVVVVVVVVVVVVVVVVVVOOVVVOOOOOOOZZZZZZZUUUUUUUUUWWWWWWWWWWWWW +NNNNHHUIULLLJJJJJJMMMMMMMMMMMMMMMSSSSSSSSSSSSDKKKKKKKKZZZZZZZCCCCCCCCCCCNNNNVNVVVVVVVVVVVVVVZVOOOOOOVVVVOOOOOOOZZZZUUUUUUUUUUUUUWWWWWWWWWWWW +NNNUUUUUULLLLJJJJJMMMMMMMMMMMMMMMMSSSSSSSSSSSKKKKKKKKKKZZZZWWWCCCCCCCCCCCDNVVVVXXVVVVVVVVVIIIIOOOOOOVVVDOOOOOOOZZZZUUUUUUUUUUNNNNNNWWWWWWWWW +LLLUUUUULLLLJJJJMMMMMMMMMZZZZMMMZMSSSSSSSSSSSLKKKKKYKKZZZZZWWWWCCCCCCCCCEDVVVVVXXIIIVVVVVVZIIIOOOOOOVVVOOOOOOOOOOOOUUUUUUUUUUUNNNNNWWMWWWWWW +LLJUUUUULLLLLLJJJJMMMMMMMMZZZZZZZZSSSSSSLLLLLLLLKKAKKKKWZWWWWWWCCCCCCCCEEEEVVVVXXVIIIVVVIVIIIIIOOOOOVVOOOOOOOOOOOOOOUUUUUUUUUNNNNNWWWWWWWWWW +LLLLULUULLLLLLLZZZMMMEMMMOZZZZZZZZSSSSSLLLLLLLLLLKKCKKWWWWWWWWWWWWCCEEEEEEVVVVXXXVIIIIIIIIIIIIIIOOOOOOOOOOOOOOOOOOOOUUUUUUUUNNNNNNNNWWWWWWWW +LLLLULLLLLLLLLLLZEEMMEEMOOZZZZZZZZSSSSSLLLLLLLLCCCCCCKWWWWWWWWWWEEEEEEEEENNVZVJXXXIIIIIIIIIIIIIIIOOOOOOOOOOOOOOYYOOUUUUUUUUUNNNNNNNNWWWWWWWW +LLLLLLLLLLLLLLLLZEEEEEEMOOZZZZZZZZZSSSSLLLLLLLLLLCCCKKWWWWWWWWWWEEEEEEEEENNXXXXXXXIIIIIIIIIIIIIIIOOOOOOOOOOOOYYYYUUUUUYYUUUUUUNNNNNZZWWWWWWW +LLLLLLLLLLLLLLLLEEEEEEEMOZZZZZZZZZZZZZZLLLLLLLLLLCCCWWWWWWWWWWWWEEEEEEEEELLLLVXXVXIIIIIIIIIIIIIIIIOOOOOOOOOOOYYYYUUUYUYYUGUUNNNNNNNZZWWWWWWW +LLLLLLLLLDLLLLMMEOOOEEEOOOZZZZZZZZZZZZLLLLLLLLLLLCCCCCWWWWWWWWWWEEEEEEEEEVLLLVVVVCCCIIIIIIIIIIIIIIOOOOOOOOYIYYYYYYYYYUYYYNNNNNNNNZZZZZWWWWWL +LLLLLLLLLLLLMMMMVOVOEOOOOOZZZZZZZZZZZZLLLLLLLLLLLCCCCCWWWWWWWWWEEEEEEEEEVVLLLLLLCCCCCCIIIIIIIIIIIIOOOOOOOOIIYYYYYYYYYYYYYNNNNNNNNZZZZZZWWWWL +LLLLLLLLLLLLMMMMVVVOEOOOOOOZZZZZZZZZZWLLLLLLLLLLCCCCCCCWPPWWWWWEEEEEEEEEEVLLLLLLCCCSPCIIIIIIDIIIIIIOOOOOOOIIYYYYYYYYYYYYNNNNNNNNNNZZZZZZZZWL +LLLLLLLLLLLMMMVVVOOOOOGGGGGGZZZZZZZZZZLLLLLLLLLLLUUUCCCPPPPWWWWWEEEEEEEEELLLLLLLCSSSZZZZZZZZZZZIIIIIOOOOOZZIIYYYYYYYYYYYYYYNNNNNNNZZZZZZZZWL +LLLLLLLLLLLMMVVVVVOGGGGGGGGGZZZZZZZOOULLLSLLLLUUUUUUCCCPPPPPPPWWPEEEEEEELLLLLLLLSSSSZZZZZZZZZZZDIIIOOOOOOZZIIIYYYYYYYYYYYYNNNNNNNNZZZZZZZZZL +RRTTLLLLKKLVVVVVVVVWGGGGGGGGZZZZZZZZZUULUULLLLUUUUUCCCCPPPPPPPPPPEEERELELLLLLLLLLSSSZZZZZZZZZZZDIIIOOOOIIIIIIIIIYYYYYYYYYNNNNNNNNZZZZZZZZZZL +RTTTALLLKKLVVVVVVVVVGGGGGGGZZZZZZZZUQUUUUULUUUUUUUUUCCCPPPPPPPPHPPEEEULLLLLLLLLLLSSSZZZZZZZZZZZDXXOOOIIIIIIIIIIIYYYYYYYYYNNYNNNNNNNQZQZOFFPF +TTTTTLLLKKVVVVVVVVVGGGGGGGGGEEEZZZLUUUUUUUUUUUUUUUUUUCCCPPPPXPZHPGEUUULLLLLLLLLLLSSSZZZZZZZZZZZDDXXOXXXIIIIIIIIIYYYYYYYYYYYYQSSSNQQQQQQFFFFF +TTKTTTTTKKKVVVVVVVVGGGGGGGGEEEEEEZEEUUUUUUUUUUUUUUUUUCCCOPPXXPPHHHHHUULLLLLLLLLLSSSSZZZZZZZZZZZDDXXXXXIIIIIIIIIIYYYYYYYYYYYYYSSQQQQQQQQFFFFF +TTTTTTTTNNKVVVVVVVVGGGGGGGGGEEEEEEEEUUUUCCCCCCCCUUUUUCCOOOPXXHHHHHHKKLLLLLLLLLLLLSSSZZZZZZZZZZZDXXXXXRAAIIIIIIPIYYYYYYYYYYIIIMSMQQQQQQQFFNFF +TTTTTTTNNNKSVVVVVVVGGGGGGGGHHHHHHHEEUUUUCCCCCCCCUUWCCCCCOOOOXXXHHHGKKKKLULLLLALLLSSZZZZZZZZZZZZDDXRXXRAAAIIIIIIIYYYYYYYYIIIIIMMMQQQQQQQQFFFF +TTTTTTTTNNKSSVVSSVGGGGGGGGGHHHHHHHEECCCCCCCCCCCCUUWWCCCCOXOXXXXXXKKKKKKLLLOLLAALSSSZZZZZZZZZZZZDXXRRRRPAAIIIIIIIMMMYYYYYIMMIIMMMQQQQQQQFFFFF +TTTTTTTTRRSSSBVSVVGGGGGGGGGHHHHHHHEUCCCCCCCCCCCCKWWWWWWWOOOXXXXXXKKKKKKKLLLHLAAASSSZZZZZZZZZZZZDDDRRRRPPPFIIIIIIMMMMYYIIIMMMMMMMMQQQQBFFFFFF +TTTTTTTTRTSSSSSSVGGGGGGGGHHHHHHHHHEVCCCCCCCCCCCCNNWWWWWWWWWWXXXKKRKKKKKKKLLLLLAAASSZZZZZZZZDDDDDDRRRRPPPPPPIIIIIMMMMMIIMMMMMMMMMMQQQQBFBBBFF +TTTTTTTTRTSSSSSSSLLLGGGGGHHHHHHHHHEVCCCCCCCCCCCCNNWWWWWWWWWSXXXKKKKKKKKKKLLLLLAAAASZZZZZZZZDDDDDDRRRRRPPPPPRRRIMMMMMIIIIMMMMMMMMMQQQBBBBBBFF +TTTTTTTTTTSSSSSSPLLLLGGGLHHHHHHHHHAVVVVVVCCCCCCCNNNNWWWWWWSSXXXKKKKKKKKKKKLLAAAAAGGZZZZZZZZQQDRRDDRRRPPPRRRRRRMMMMMMMIIIMMMMMVVVVVVVVVVBFFFF +TTTTTTTTTTSSSSSSSLLLLLLLLHHHHHHHHHAVVVVVVCCCCCCCNNNNNNWWWWSXXXXXKKKKKKKKKKLKKKKKAAGGGGGGQQQQQQRRRRRRRRRPRRRRRMMMMMMMMIIIMMMMMVVVVVVVVVVBRRRR +TTTTTTTTTTSSSSSSLLLLLLLLLHHHHHHHHHVVVVVVVVVNNNNNNNNNNNNWWWSSXXXXSKKKKKKKKKKKKKKAAAGGGGGSSQQQQQQTRRRRRRRRRSSRRSNMMMMMMIIIMMMMMVVVVVVVVVVBRRRR +LLLLTTTTCCCCSSSSLLLLLLLLLHHHHHHHHHDVVVVVVVVNNNNNNNNNNNNNNSSSSSSSSKKKKKKKKKKKKKKKAAGSSSGSSQQQQQTTRRRRRSSSSSSRRSSMMMMMMIIIMMMMVVVVVVVVVVVBBRRR +LLLLLTTTTTSSSSSSLJLLLLLLLHHHHHHHHHDVVVVVVVVVNNNNNNNNNNNNSSSSSSSSSSSKKKDDKKKKKKKKKKSSSSSSSSQQQTTTRTTTTTSSSSSSSSSMMMMMMVVIMMMPVVVVVVVVVVVBBRRR +LLLLLTTTTLSSSSRJJJJLLLLLLHHHHHHHHHDVXVVVVVVVFFNNNNNNNNNSSSSSSSSSSSKKKKDDKKKKKKKKKKSSSSSSSSQQTTTTTTTTTUSSSSSSSSSMMMMMMVVVMMMMVVVVVVVVVAAAURRR +LLLLLLLLLLLLSJJJJRLLLLLZZHHHHHHHHHFFVVVVVVVVFFFFFFNNNNNSSSSSSSSSSSSSKDDDDDKKSSKSSKSSLSSSSQQTTTTTTTTTTUUUUSSSSSVVVVVVVVVVMMMSVVVVVYYYYARRRRRR +LLLLLLLLLLKKKJJJJRLLHHHHHHHHHHHHHHFFDMVVVVVQQFFFFFFNNNNSSSSSSSSSSSSSSSSMDDDDSSSSSSSSLSSLSQTTTTTTTTTTTUUUSSSSSSVVVVVVVVVVVMMJJJJYYYYYYAARRRRR +MLLLLLLLLLKKKJJJJJRLHHHHHHEDDDDDDDDDDMMVVVVQFFFFFFFFNNSSSSSSSSSSSSSSSSSMDDSSSSSSSSSSLLSLLQTTTTTTTTTEIIISSSSSSSSMVVVVVVVVJJMJJJYYYYAAAAAAAAVV +MLLLLLLLLLKJJJJJJJJRHHHHHHDDDDDDDDDDDDDDQQQQFFFFFFNNNFFMSSSSSSSSSSSSSSSDDDDDSSSSSSSLLLLLVTJTTTTTTTTEIIIISSSSSSSSVVVVVVVJJJJJJJJJYYAAAAAAAAAA +MMMLLLLLLLLJJJJJJJRREEEEEELDDDDDDDDDDDDDQQQQFFFFFFFFFFFSSSWWWWSSSSSSSSSFDDDSSSSSSSLLLLLLTTTTTTTTTTTEIIISSGGGWMMHMMMVVVVJJJJJJJJJJJJAAAAAAAAA +RMRLLLLLLLLJJJJJJRRREEEEEEDDDDDDDDDDDDDQQQQQFFFFFFFFFFFFSLWWWSSSSSSSSSFFFDDSSSSSSSSSLLLLLLTTTTTTTTEEIIIIGBGGGGMMMMMMMVJJJJJJJJJJJJAAAAAAAAAU +RRRBBLLLRRRJJJJJRRRREEEEEEEDDDDDDDDDDDDQQQQQQFFFFFFFFFFFSLLWWWSSSSSSFFFFDDNSSSSSSSSSLLLGLMMTKTTTTTEEIIIIGBBGGGGMMMMJJJJJJJJJJJJJJJAASAAAAAAU +RRRRLLLLRRJJJJJRRREEEEEEEEEDDDDDDDDDDDQQQQQQFFFFFFFFFFFFSLLLLLSSSSFFFFFNNNNNNSSSSSSSSLLLLMMTTTTTTTTTIIIGGGGGGGGGGGGGZJJJJAAJJJJJJAAAAAAAAAUU +RRRRRRRRRRRRJJJRRREEEEEEEEEDDDDDDEDDDQQQQQQQFFFFFFFFFFFLLLLLFFSSSSSFFFNNNNNNNSNSSSSSSLLLMMMIIIIITPTTIIIGGGGGGGGGGGGGOIIJJAAAAAAAAAAAAAAAAAUU +RRRRRRRRRRRRRJRRRRREEEEEEEDDDDDEEEEDQQQQQQQQFFFFFFFFFFFLLLLLFFSSSFFFFFNNNNNNWNNNSSSSSMMMMMMIIIIPPPTIIIGGGGGGGGGGGGGGOOOJOAAAWWWWAAAAAAAAAUUU +RRRRRRRRRRRRRRRRRRREEEEEEEDDDEDEEEQQQQQEQQQQSSFFFFFFFFFLFLLLFFFSSFFFNNNNNNNNNNNNSMMMSMMMMMMIIIIIPIIIIIGIIIGGGGGGGGGGOOOOOOAAAAWAAAAAAAAAAUUU +RRRRRRRRRRRRRRRRRRRRRREEEEEEEEEEEEQQQQEEQQQSSFFFFFFFFFDFFFLLLLFFFFFFNNNNNNNNNMMNMMMMSMMMMMIIIIIIPIIIIIIIIIGGGGGGGGGGGOOOOZANNWWWWAAAAAUUUUUU +RRRRRRRRRRRRRRRRRRRRRRREEEEEEEEEEEEEEEEEQSSSFFFFFFFFFFFFFFFLLFFFFPPPNNNNNNMNMMMMMMMMMMMMMMMIIIIIIIIIIIIIIIGGGGGGGGGGGOZZZZZNNWWWWAAAAUUUUUUU +RRRRRRRRRRRRRRRRRRRRRRREEEEEEEEEEEEEEEEQQSSSSSSSSFFFFFXFFNNNLFFFFPPPNNBBNMMMMMMMMMMMMMMMMMMIIIIIIIIIIIIIIIIIQGGGGGGGGZZZZZZNWWWWWWAUUUUUUUUU \ No newline at end of file diff --git a/2024/day-12/test-input.txt b/2024/day-12/test-input.txt new file mode 100644 index 0000000..c7541ac --- /dev/null +++ b/2024/day-12/test-input.txt @@ -0,0 +1,6 @@ +AAAAAA +AAABBA +AAABBA +ABBAAA +ABBAAA +AAAAAA \ No newline at end of file diff --git a/biome.json b/biome.json index 2eb0751..5a52098 100644 --- a/biome.json +++ b/biome.json @@ -19,7 +19,12 @@ "linter": { "enabled": true, "rules": { - "recommended": true + "recommended": true, + "complexity": { + "noForEach": { + "level": "off" + } + } } }, "javascript": {