diff options
author | Christian Segundo | 2023-12-03 11:36:43 +0100 |
---|---|---|
committer | Christian Segundo | 2023-12-03 11:41:30 +0100 |
commit | af54dee0ed31b94cb56bc95c0aacc750743d6a2c (patch) | |
tree | f80c844e383356fed0be4f6b196d2d9e60046a7f | |
parent | 73353e0e5e01f0702c0a8aa99397474c40af2a4c (diff) | |
download | advent-of-dotslash-2023-af54dee0ed31b94cb56bc95c0aacc750743d6a2c.tar.gz |
add day 3
-rwxr-xr-x | 03.lua | 110 | ||||
-rw-r--r-- | 03.txt | 140 |
2 files changed, 250 insertions, 0 deletions
@@ -0,0 +1,110 @@ +#!/usr/bin/env lua + +local function expand(l, i) + local p = { i, i } + while p[1] > 1 and string.gmatch(l:sub(p[1] - 1, p[1] - 1), "%d")() ~= nil do + p[1] = p[1] - 1 + end + while p[2] < #l and string.gmatch(l:sub(p[2] + 1, p[2] + 1), "%d")() ~= nil do + p[2] = p[2] + 1 + end + return p +end + +local function replace(l, s, e) + local t = {} + for token in string.gmatch(l, ".") do + table.insert(t, token) + end + for i = 1, #t do + if i >= s and i <= e then + t[i] = "." + end + end + return table.concat(t) +end + +local function copy(v) + local j = {} + for i = 1, #v do + j[i] = v[i] + end + return j +end + +local function adj(i, j) + return { + { i - 1, j }, + { i + 1, j }, + { i, j - 1 }, + { i, j + 1 }, + { i - 1, j - 1 }, + { i - 1, j + 1 }, + { i + 1, j - 1 }, + { i + 1, j + 1 }, + } +end + +local function p1(l) + local v = copy(l) + local s = 0 + for i = 1, #v do + for j = 1, #v[i] do + if string.gmatch(v[i]:sub(j, j), "[*#+$=@%%/&-]")() ~= nil then + local p = adj(i, j) + for k = 1, #p do + if + (p[k][1] < 1 or p[k][2] < 1 or p[k][1] > #v or p[k][2] > #v[p[k][1]]) + or (string.gmatch(v[p[k][1]]:sub(p[k][2], p[k][2]), "%d")() == nil) + then + goto nextkp1 + end + local pos = expand(v[p[k][1]], p[k][2]) + s = s + tonumber(v[p[k][1]]:sub(pos[1], pos[2])) + v[p[k][1]] = replace(v[p[k][1]], pos[1], pos[2]) + ::nextkp1:: + end + end + end + end + return s +end + +local function p2(l) + local v = copy(l) + local s = 0 + for i = 1, #v do + for j = 1, #v[i] do + if string.gmatch(v[i]:sub(j, j), "[*]")() ~= nil then + local p = adj(i, j) + local n = {} + for k = 1, #p do + if + (p[k][1] < 1 or p[k][2] < 1 or p[k][1] > #v or p[k][2] > #v[p[k][1]]) + or (string.gmatch(v[p[k][1]]:sub(p[k][2], p[k][2]), "%d")() == nil) + then + goto nextkp2 + end + local pos = expand(v[p[k][1]], p[k][2]) + table.insert(n, tonumber(v[p[k][1]]:sub(pos[1], pos[2]))) + v[p[k][1]] = replace(v[p[k][1]], pos[1], pos[2]) + ::nextkp2:: + end + if #n == 2 then + s = s + n[1] * n[2] + end + end + end + end + return s +end + +local f = io.open("03.txt", "r") +local content = f:read("*all") +f:close() +local l = {} +for line in string.gmatch(content, "[(%w%p)]+") do + table.insert(l, line) +end +print(p1(l)) +print(p2(l)) @@ -0,0 +1,140 @@ +...................15....904...........850.................329...................13....................................871....816....697.... +...........53.497........................%....906...610.......*.............735#..&...*......558...68...............68..*......&....*....... +..........*....$....................132.........*..........844....875................350............*...............*..336.364...649........ +.......726.......341..................*...186...358..................*244........57.......@.........738......*.....663.................584.. +.............952.*......33......660..704............949......................518*....234.967....551........971..&.......................*... +.......738...*....222......................706.......*..825.............474%...........*...........*.405.........779..............542...405. +.74.........366....................192..........542.737....*760...................623/..730.....718.../.....................$17......%...... +...*126.....................%........*.504...=..*.........................................................974............................... +........331/..901.........337..........*...461.698...............*461.....814............................*............975...............165. +..../.........*.....................262.......................313........*........530.56.....567.......897.....*.........*.9................ +....953....355...@703..................................609..............462.......%........./...............108.557...501.../...724......... +..............................................=.........%.......46......................533....670...............................*..%630.... +.........................91...382*204.........154..%.............+.524.995..............=.....*...........7..........692.92*56...73......... +.685....*....70.189.......*.........................773...830/....../....*........=.........565.............464................$....738..130 +.........938..*........993..............*.................................243...340...753...........*...882...............108.647....*...... +..............762..........348.......280...............364*526...........................*........552.....=....25..682....*.........164..... +.....948..............813../....644......62........................................#.....657......................*......................... +......*...........................*.................$745.......739.....*...399...30............&..@...........924.117..........309.......... +...883....544.....33.........585=.428.146................288.....*..853....*...........*891.409....429..460...*..........997....*........187 +.............*818........829..........*....846..............................248.....574..................*....789.......*.....965....-..*... +......=.....................*..........370.......850+.............313...........................573....621...............268.......58..800.. +....67....287.............481..709...............................*.......#74...................*.................965........................ +............@.291.............*.........607*....950.475..309...66..932........395..374..........155.891....472..*......774.............&.... +....207..........%..262......543..887/......711....*.......+......*............*...*........823............*...93...........377.....764..... +.....*...968.951.......#................................$.........453...366..736.972........*.............697........*618...&............... +....984..*...............-.......................884..23......492.....*..*................70..523.....25........$.....................370... +..................870...187.......548#.522..458.....*..........*....956......535....../.........*.525*........197....@..*266...123.....*.... +.........501.....*..........................&.....323........257........956..*........80..946.592.................211.........*.........311. +.....380*.....867...653..347....................*........93=...........*......515..........-...................................678.......... +..........876......&....*.......&631.950.647...631...@...........=...705..914................739..............319......713.........*97.#918. +.....805...*..........118................-.........790....559..51........../........*.........*......550......*........./.......647......... +......-..428.....599......813................413..................280............840.654.......91.....*...........236.......$............... +.............=...%.......*.....77...................#.492............................................96..........@.......175....%........... +......*427..569..........47......................999......314.....636*253.................764.................27......-..........415..386... +...142................$................@..320........969...................882*311...............#..751...........=....649...........*...... +.........*723..993.976....638........475................=..800.......................*764.710...574....*964....831..........473......531.... +...%..486...................*....#..................................831...........375........*........................=824......21.......... +559.........................441...316................................./....................618.407.......83.......972...............91...... +......*.....25..741...................%...............*63.546$..905......27........861.756........*.......*..........*...28...57............ +.......794....*./........782...236....47...........937...........*..755....*505..............23.948.......560.532...421....*..#.........405. +............566.................*........-850..872.......90....229...+..........978..684............225..................675.....591...*.... +.............................296..243...........+....691...................311.........$......321......@......827....$13.......$....&..530.. +.....664..422$....613.....@.........%.401/.$974.....-.........%.145....729......*........./.......106............%.......=.....611.......... +.......$.........*.......857...147*.............591........+.46..*.....=........306.67*...818.............................261....../........ +............823...785..............340.........-....564..777......456.......%....................891.................560...........642..181. +.....394.....*................226..........423..............................539.................*............640&.............535........... +.......@.....626..317..329....*...92........+..................374....827............*.683+....771....529.........303..........*............ +.........172.....-........*......*.....332...........288..229..+.........*.786=....468.............*....*...........*....461...249..=....... +....974...*............901..@....130..*..............$...*..........4.573................163......429....808.464*47..231....@......964...... +........183.................582........11...............310.....774.*.....567.............*....36........................................... +.......................939.....................*826............@.....892..........481......266.*...-253.........106.830....235......*..841.. +727.........177#.........&.......507........301..........................550..242*.....+./.....686.......@.446.*.....*.......*....894..*.... +....67...............468.....&......&..596......................817.600...............85.5.............973...$.805...513......378.......388. +...........*247.........*.....974.........*263....329....476....*............721............723.....................................358..... +........784.....434.....667.......................*............615.195.612...............................540#........347...........*........ +...............*.................76......121...659........@555..........-.............201......................866............628.505.509... +.............515........../.................#....................281..%...656............*670.419.......799.......*...510.786...*.......&... +....993.................540.373....709.............705............*...132..#........298$......*...232....*..@..878.......*....528...#....... +....$.........615.............*..........948..........*........565................%..........465..#.....497.67....................631....... +.........138....#....417......123...........*.......546...821...................114..=............................258.859=.380-............. +.....734*.............../.............833..399..........................+............780...288..............117..@...................925.... +................*860..........228........*...............................956....390*........=..........%...*..........839...373......*...... +..802........369........641.............763.....154.24...............302............620..............150.403.......*.........*....647....... +...................................&........466*.....@..................*827....530.............................129.628.....923.........=866 +..........&......&.............824.573.................669.........................$.....374..627...........698.....................759..... +.......499....%.812.857*653...................668..........879.......974................../......*926...852.........................-....832 +...646......284..............708...369...........*808................-.......705.......@...............%.............492.462............*... +....................959......#.......*....872..........................102....*.........80..839....996..............*.....%........83...49.. +.785............363..*.............49.......*.......667.....797....224.......586..............&....*...34..673.......650.................... +....*..*132....*.....225...................631..350..*.........*....*.............941....=.......52....*.................406...546.......... +.543............760.........305..325...330.......+.................621...........*.......63..#.......268..239...................#........... +........658..................*............*...........735......820.....145....419...........91..489.........*......404.......*....#......... +..........=....415+.....38$....844...+..366.............*.......*......*..............................43....945.....#.....563.205..211..183. +......267.......................*...519.....730........836..........277...........808...........504...&................................#.... +.....*..................705/....575..........*....../..........$866.........=.......*...975......#.......183.931........%.......611......... +.......135.......284........................246.653.972..............365..191.....376...*.....&.........*......*.........994...@.....11..... +...440../.........*.............................*..............415.....................985..838......677.......109...................*...... +...@............224....399.727$......68#..........................$......432.....214$.....................#.................591....686...... +..........&.......................................658........143....779.+....942......$.............885....567..........$................... +.461.......33....277.407......108..............47.*.............*...........*.......$.811............................390.................... +..........................907*.....#397..307...*....197.12.....3...738....254.85..393...............713..700..741...........176.....883..... +..316........180...........................*.758...................-...........................................*............*............... +....*..../........871...338..165.........683............455...701*......................540....255.......$....858........277....28....+..... +...660.469..912...#..........%......743.........439.....-.........206......363..........*.......*.......640............................144.. +..............*.........443...............610.............803.............*.............879...658............$................189........... +...........172......794........98..............646......................662..............................*....49.-210.523.257....*.......... +...87..662.....#.......*667....%..408..........*............220...524............=.....742..39..160....64.636..........*..*....974..378..... +...*.....*.....42..&.............=....371*.....804.................*..#....../.240.....*........................395%..461..818.....*........ +....706.398........452....500.............406..........57*380....365.42...635.......131...........18.....538.....................403........ +..............143........*.........80............740..........................*245......784........-...........708...................&.297.. +.230...........*.......373..341...........................$438.......*.................=.............874&..959*...........192......829.#.... +...#..........476..647.....*......................................431.728..........................................50.....$................. +........334...........*731.930......=........966........*323...................301.....%....404...............879....*372.....208.134....... +...........*.....................163..........*......509......................%.....&..785.......................*...............*.......... +...768..329....199........................................797......*368..........873..........26.565....651.....664......111..........217... +................*.....26.......705*76....415.............*................................749..........*..................#......545-..%.... +....-....473..517......*...............5*....449..........68........................751.......*399......401................................. +.730......#.........240...&..65.718.87......*.....532..............-....567............*....................675.......67..463............... +.....289#....509........200......*...*....852....................885...+....663..72..507......998.&954..213....$.....*.........672.......... +..............................403.....129........377-....................../....&.................................473...........*........... +.........855=.........250...................961........860*916.......981..........326.........633..404................676.%566..120......... +892...........532.............754.......866*....790..................#........819*..............*.........%.44..=......*............29...... +....@527.......*..................600............../...$568.....800.....................179..528........613.....358...949................... +................302...807............*..895.................+.....@.....-...........................980...........................736....... +........217...=......*............879.....+.-..........%.....793.......442.......422............209*.......&.......969....240.378...*....... +....340*.....145...%.596....................23....703...217................372..........610.................129.......*........../.....=.... +.................790.....&............904............=............795......*.......385=...+.....88*143...............891....406.......79.... +............*749.........31..............*....318.................+.......317.................................%419.............*392......... +....854..797......*..500...............614.1...*..............803.....451............330.159.143.598.......+......./827...............717... +...@............924.*........................245............-.&..........*...606................*...........461............604....#....*.... +....................73....160..406.150...............933.957...................%.......419.........665..*.........-.......*.....721..573.... +....*915.........40................*...%.............*........584.......929......377....*..404.935....&..870.....93........395.............. +.781.............@...........632.......710....769.323............$.........*.........904.....*...*.....................859.................. +.....=.......................*...646............-.........................52................149...414....................*........%......... +...51....524.625..........328...*.................................295.734......@..........................856.291.695....367..218..787..8... +.........../.*................339........................576/.417*...........445...@........................%....................-.......... +....869.85...316.....308...............345.......749.............................264.............775..777...............................89.. +.......*...............#.........$....*..........*....../.....786.713*52.................357.......&./.........#......971....74.305....-.... +............................325..770..167..@.....265..+..883................................+...57..........312.......*........*............ +......+.....266.....788.111....*..........342........588.......939..393*717.............488....*....................401....249...255........ +.......308..*............#.....816....465..........*.....492..@.............581.........-.......397..709*.................$.....*........... +.............511.....881...+.........+..........178..524*..............150..../..720.......843...........964....129.../......908............ +.......749.............*.526.$............800............................*.........*...500....*.../.................487..........200........ +..668......*639......932......139.726................#...51..436$..................775...*...834..874.......%..............859+......439.... +........810........................*.......805.......100..*...........999.....743......169............477...961......973............$....... +.574...........6*262........398....204......*.....%.......525...........*.........................412..*.........376...*.@43....=......=.... +....*836....................................25...619............658.....172.......................*...408...........*........%...776..802... +.............307.......&........537..988..............128..-.....*..........................118...327......296.......967..991............... +.....899...$...*....788.....829......=....................559.722.......519.........385$...+..................*.323*..............*123...... +........*.930...674...........*..........447.......801..............957....................................111......767..34....556.......... +..565.644..............18.....472.........*...8........................*........258........901.................296.......*..........*....... +....*............995=....*................649.*...151.........437%...445.747......-.........&......#......%.....*.........800....357.240.... +....476.491/.931.......121..732*940..682......975..$.....*..................+.358.............../.363....152.264........$................... +.............=....730*..................*584...........234.........996.................*.....701........................499............649.. +......................672......@.............................958.....&.+...........983.673........233.@981........760....................... +..942.993@......293...........939..&....@.........867..92.....*........679.........................*.............*.......27...998........... +....#.......230.$...................36.24....809..#....*...660.....$.......748..199.-.............717...@......................../.......... +......*95..............647...$..............-.........461..........757...........*...68...............728..210*680..708......$.....246...... +...355.........*..........*.538...%..............................-...............977....209*.......................*.........141.....*...... +...............680.....670.........784........171..799.........317..........................844........166........289.................463... |