Part 1
This commit is contained in:
parent
00411149e6
commit
26b610936f
4 changed files with 324 additions and 0 deletions
1
day_3/answer1
Normal file
1
day_3/answer1
Normal file
|
@ -0,0 +1 @@
|
|||
507214
|
159
day_3/aoc2023p1.c
Normal file
159
day_3/aoc2023p1.c
Normal file
|
@ -0,0 +1,159 @@
|
|||
#define BREAK_MY_SHIT
|
||||
|
||||
#ifdef BREAK_MY_SHIT
|
||||
#include <linux/module.h> /* Needed by all modules */
|
||||
#include <linux/kernel.h> /* Needed for KERN_INFO */
|
||||
#include <linux/init.h> /* Needed for the macros */
|
||||
#include <linux/ctype.h>
|
||||
|
||||
MODULE_LICENSE("Proprietary and Confidential; All Rights Reserved");
|
||||
MODULE_AUTHOR("Urmomlel");
|
||||
MODULE_DESCRIPTION("Vanguard Anticheat");
|
||||
MODULE_VERSION("-6.9");
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#define __init
|
||||
#define __exit
|
||||
#define KERN_INFO
|
||||
#define printk printf
|
||||
#endif
|
||||
|
||||
#include "input.h"
|
||||
// #include "hint.h"
|
||||
|
||||
// Skip over all non numeric characters
|
||||
// Return index of first numeric character found
|
||||
int find_int(const char *line) {
|
||||
int i = 0;
|
||||
for(; *line; ++line) {
|
||||
if(isdigit(*line))
|
||||
return i;
|
||||
i++;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Convert string to int, return digits consumed
|
||||
int get_int(const char *line, int *num_out) {
|
||||
int i = 0;
|
||||
*num_out = 0;
|
||||
|
||||
// Handle the edge case that will never happen (tm)
|
||||
if(!isdigit(*line))
|
||||
return -1;
|
||||
|
||||
for(; *line; ++line,++i) {
|
||||
if(!isdigit(*line))
|
||||
break;
|
||||
|
||||
*num_out *= 10;
|
||||
*num_out += *line - 0x30;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
// Search around an int for "components"
|
||||
// x x x x x x x
|
||||
// x [start n n n end] x <-- y
|
||||
// x x x x x x x
|
||||
// x is searched area
|
||||
// [start n end] is where the "part number" is
|
||||
// Return 1 if found
|
||||
int search_component(int y, int start, int end) {
|
||||
int left = start - 1;
|
||||
int right = end + 1;
|
||||
int top = y - 1;
|
||||
int bottom = y + 1;
|
||||
|
||||
// Spot check the immediate left and right characters
|
||||
if(left >= 0 && input[y][left] != '.') return 1;
|
||||
if(right < input_width && input[y][right] != '.') return 1;
|
||||
|
||||
// Check top row
|
||||
// We can clamp left and right now
|
||||
if(left < 0) left = 0;
|
||||
if(right >= input_width) right = input_width - 1;
|
||||
|
||||
// Check top row if it is valid
|
||||
if(top > 0) {
|
||||
for(int i = left; i <= right; i++)
|
||||
if(input[top][i] != '.') return 1;
|
||||
}
|
||||
// Check bottom row if it is valid
|
||||
if(bottom < input_height) {
|
||||
for(int i = left; i <= right; i++)
|
||||
if(input[bottom][i] != '.') return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init aoc_start(void) {
|
||||
printk(KERN_INFO "aoc_start\n");
|
||||
|
||||
int part_number_count = 0;
|
||||
|
||||
for(int y = 0; y < input_height; y++) {
|
||||
const char *line = input[y];
|
||||
int head = 0;
|
||||
while(1) {
|
||||
// Find a number
|
||||
printk("line[head] %s\n", &line[head]);
|
||||
int skipped = find_int(&line[head]);
|
||||
printk("skipped %d\n", skipped);
|
||||
if(skipped == -1) break;
|
||||
head += skipped;
|
||||
// Save start index so we can pass it to search later
|
||||
int start = head;
|
||||
|
||||
// Read the int
|
||||
int number = 0;
|
||||
printk("line[start] %s\n", &line[head]);
|
||||
int number_num_chars = get_int(&line[head], &number);
|
||||
if(number_num_chars < 0) {
|
||||
printk("Bad shit happened\n");
|
||||
return -1;
|
||||
}
|
||||
head += number_num_chars;
|
||||
|
||||
printk("number %d\n", number);
|
||||
printk("n_number %d\n", number_num_chars);
|
||||
|
||||
printk("context:\n");
|
||||
if(y-1 > 0)
|
||||
printk("%s\n", input[y-1]);
|
||||
printk("%s\n", input[y]);
|
||||
if(y+1 < input_height)
|
||||
printk("%s\n", input[y+1]);
|
||||
int valid = search_component(y, start, head - 1);
|
||||
printk("valid %d\n", valid);
|
||||
|
||||
if(valid)
|
||||
part_number_count += number;
|
||||
}
|
||||
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
printk("Part number count: %d\n", part_number_count);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit aoc_end(void) {
|
||||
printk(KERN_INFO "aoc_end\n");
|
||||
}
|
||||
|
||||
#ifdef BREAK_MY_SHIT
|
||||
module_init(aoc_start);
|
||||
module_exit(aoc_end);
|
||||
#else
|
||||
int main() {
|
||||
aoc_start();
|
||||
aoc_end();
|
||||
}
|
||||
#endif
|
17
day_3/hint.h
Normal file
17
day_3/hint.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
static const char *input[] = {
|
||||
"467..114..",
|
||||
"...*......",
|
||||
"..35..633.",
|
||||
"......#...",
|
||||
"617*......",
|
||||
".....+.58.",
|
||||
"..592.....",
|
||||
"......755.",
|
||||
"...$.*....",
|
||||
".664.598..",
|
||||
};
|
||||
|
||||
static const int input_height = sizeof(input) / sizeof(input[0]);
|
||||
// python hax:
|
||||
// len(one_line_of_this_bullshit)
|
||||
static const int input_width = 10;
|
147
day_3/input.h
Normal file
147
day_3/input.h
Normal file
|
@ -0,0 +1,147 @@
|
|||
static const char *input[] = {
|
||||
".....489............................152....503.........................180......200.........147.......13.......................239..........",
|
||||
"......*.....186.48....681...732........*..................935.........*.....................*......................512............*..874....",
|
||||
"..806.540......*.........*............249......904...358....*......957..867..863..........857.....264..............@....89=......97..*......",
|
||||
"......................793........................*...=.....142...........*..*....%...................@......+...............36.......547....",
|
||||
"...........=335..............906*634..932........201...157.............423..72..103.798.......732........161...............*................",
|
||||
"..........................*..........*....662.................88....................$..............=........................439.126...269...",
|
||||
"...905&...74.............795...128...872....*....*.....521.........../......806&.........456.....93..869.........168..............*.........",
|
||||
"........../..=662.824.........+............863..47........-.700.....437..........316..........................96.*......348*632....138.$932.",
|
||||
"........-..........*.......................................................465....*.........243......&........*...94..+..........*..........",
|
||||
"..41...532.......511.....-......$........&....216.................................330...715..../...309........415.....388.....873.287.265...",
|
||||
"....*...................338...496.......18......*............48........873................@.............493.................................",
|
||||
"..849.............................136.#......787.........787..$....152..*........187..../.....738......*....................&85..960...749..",
|
||||
"..............395.................*...478...........................*....860.......*...613./.........194........................*.....%.....",
|
||||
".....+799.........132..188........691..........689/...176..........274........569..840.....8....#........................451...71...........",
|
||||
"..............93..&....*........@........#..................892..............................275.....862*180../.....355..*.............796..",
|
||||
".......400......*......676.....342.......930...389...925.......*...........580..3......395....................27....*....888..........#.....",
|
||||
".....%......205..888................60...........=..*.......540........742.*..........*.......858..................589.......679..490.......",
|
||||
"...462..125*....................691..@.221=.........28...................*..31.615..827..............876...................-.........*762...",
|
||||
".............501............$..=...............*.........&.............842......@.......308................601...........546................",
|
||||
"......428...*.............417.....760....25.....809......119.......................589.../.........610......../..%256...................858.",
|
||||
"......*...623...186................*......*..........895.......................$......#...........@...................337........285........",
|
||||
"....626.#......@.....787.....#...........294./..........*........619..........902........924....................665..*.............*........",
|
||||
".........406...............10......+..........985...+....944.....*........296................169....@....686......*..............290..767...",
|
||||
".......................738..........977....*.......873.......665.381..17....%.....246....576..*...861...*.......104.....208..........=......",
|
||||
".919............#...............973.....320.529................*......*.......676*.............89.......112............-....988.........858.",
|
||||
"....*....431..63..-646.........*........................863.649..494..896.......................................759..........+..............",
|
||||
"...331.....*.........../969....571.........355............*.....-.........#.....804@........-......................*...875......68..........",
|
||||
"........558..412.............................*....758..272..............207..............466..........245.......664...@...........*..447....",
|
||||
"...............*..-368.......................345./.........%..@....450..........................175......*.%...............106...44.@.......",
|
||||
"........*290...........10...323..........................318..664...+..470....-...@...../718.......$...986..571.............*...............",
|
||||
".....148......387/.....%...=....287........=784.........................*..580....260...............................440....377..-......316..",
|
||||
"................................&........................$....../840....................708......../.......149..................849.........",
|
||||
"....613..........926.......-......951....*.......185..62..265...........................-....@783...479........531..................302.....",
|
||||
".89...&.....237.........949...........561.211...*......*......689...&.......@..412.......................214......*.........334.590....*908.",
|
||||
"...*......../.....454........245.781.............649.489..560...-..109.....27....*.........511..............*....567....495*......*./.......",
|
||||
"..502...36....285...#.441...+.......*.....................&............246...........@.....*...........-929.165.................338..581....",
|
||||
".......+.................*......324..846..................................=....974...979..778....981...................174.811*.............",
|
||||
"...............*........752.701..*............76.....985.....@...588.&278..........................-................=./........720....371...",
|
||||
"....319.606...566..../........+...63..........*........=....543...$..............................%.............3..64........................",
|
||||
"......$............472..................107.129............................818........&724....454..378..........#....978.........210@.......",
|
||||
"..............................*295......*.......................803*143.......*.......................*.................*395.............489",
|
||||
"...........974...959=......772.........646..........752....=.................165.........+...305.......331..............................*...",
|
||||
"..243%........*.......169/.........66......#............554.............@..............48...................616....981..117........113.45...",
|
||||
"...........694....685......312......*.......94......840.........487.....519.655......................$365..*............*............*......",
|
||||
"........#......#....*..............541.960.............*..........*............-....758*...................636.......868...............%....",
|
||||
".........400....538..454.@............../......138....402.....775.959...................210.990......%...................338*33.......585...",
|
||||
"....891...................278........*........*................*...........=................-...997.43....@.................................",
|
||||
"...................................76.182..775...107..........536.......302.......982.883......$.......650..........470...988...............",
|
||||
"...810.......694....757*842.........................*..................................-.......................956.....*.....*173...........",
|
||||
"............................223......212..427......748...593......554*528...462...........-.....569........67.....*....620..................",
|
||||
".....349.....461....=........*.../....=......%.673.....#....*560........................694.534.*.........=......661............326...123...",
|
||||
".879.#.......*....610...#.357..398.............*....933.............555.........45*..........*............................477....*.....*....",
|
||||
"...*.....12..240......164.............862.......17...........650...................627...40.347...640........448.#583.340.......253.918.....",
|
||||
"...913....*......425@......492=....&....-...931.............=....220..........................................+............288..............",
|
||||
".........999....................447.........*.....222...360.............124-........+....................596........574...........233*543...",
|
||||
"..............234...215..793.............492.......#......%.=....255.........613...75.............754....../...........=......./............",
|
||||
"..............*....#.........................52.............226....*....750..............631....@.............678..............671...741....",
|
||||
"..298-...5..158...........%307......+........+........165*..........836....$............*.......159..938.......*...%.....644................",
|
||||
"....................................839...................131..................+.......210..872.........*...121..818.....*....252.........99",
|
||||
"......139.....609...............................%...720..................607=...407.........*...........962..............395.........359....",
|
||||
".989..*..........-..........-....506....359..465......*........*288..........................324...368#.....%..602..551..................922",
|
||||
".....282.................989....*......*.........52....818..834........693.689.............................845.#.......*......158...&.......",
|
||||
".../.....357....410....*.....128.....153........*.....................*......*.....................656.915............267....*......234.155.",
|
||||
"229........*......+...488..&....................689.....71.....331..209.....521..305..365.95..........*......................35.........=...",
|
||||
"............355...........126.794*599.....................*....../..................$.......&.328...........659.........527.....252.........",
|
||||
".869................675....................923@......*.....293.=.....342..............466........*.........*...................-....&857....",
|
||||
"...................*.............364..............827.191.......631..*......=......@..............492....615...............921..............",
|
||||
"............172..124...142.966........*591..........................337....852....103..*275...+..............................*.........647..",
|
||||
".....233....*..........*...........172.................276...672............................132.....&............764*607...693...411........",
|
||||
".......*..919...301.563.................71../......73...*..../.........170......973..74*............474............................/........",
|
||||
"647.405.................321.479...........*.980......*....................*.............563..877...........934.......449..701-..............",
|
||||
"...........................*............555...........727........328.......521...................#562........*..357.=..........893..........",
|
||||
"611..561......400..............&...........................700.....................570.494....63............165..=.....481......*...........",
|
||||
"...*.*..........=.525......317.277...............738*596......*139....528...@475....*....*......*.........*............*.........62.........",
|
||||
"186..149..........*.../...............357...504*....................=....*........212.....235....125...173.253..../.....992.975*............",
|
||||
"..........430...770....20....865......*.........705....904..-........941..216.....................................275...........763.405.....",
|
||||
".........&.........................362......#..........*.....646................258.....898....241....................*..............*......",
|
||||
"....13.....510...935...........367..........546....98.869........217.....................*....*....431...566.........152..............69....",
|
||||
"...%................*.......$...-.......213.......*.........%..........683............#..265................../866...............161........",
|
||||
".........962...938...259..290......177....=.......948........582........+..843.......584.........%680..782%................./437........657.",
|
||||
"797/.388*........*..................*........627.........................../.............897..........................@.................*...",
|
||||
".................848......-..724....76.........&..........228.335...912*.................*................122.......149..828..........289...",
|
||||
".......................748..*.........................722.......$.....................774...431&.........................*....739..=........",
|
||||
"...80...935.*621.............57......#...........484...$.......................380.72............599%..670.............233......*..26.......",
|
||||
".........+........................812...$..........*...............259*470......*...%..408..............*..251....618........356............",
|
||||
"...............*381...726...............972.109..260.....934.%878................92.....*...760......926..*..........*66....................",
|
||||
"..703.......592............384.......................433..=..................814......764........809......636...534...........$.......944...",
|
||||
".....*..275.....................83.........623...695..*............516..30.....$.................&...............*.............507....*.....",
|
||||
"...254...*......#...74............%.............*....496.9.........*........................727....335...662......473...530$..........942...",
|
||||
".......420.......66.*....679.332@...413..........417......*..188.609....908......*587........%........&.....&.411...............640.........",
|
||||
"...382.....462......871...*.............951...............25..............-...860................604............*....699..814....*..........",
|
||||
"....&.......#..............574........................................................503.723*......$.....-...527...*.......*.683....249.395",
|
||||
"..............781............................21.....721*206.990.97...............87...........971......273..........951..736........*.......",
|
||||
".............*..........948..808..158..........%...............*................&......*537.......................=............-....529.....",
|
||||
"164*....18..753............/..*............................96.......................316........382........946...685.........455.............",
|
||||
"....672...........*205.........695...........................$...279....#625....138..................115....*.........566..........410......",
|
||||
"...............605.....17.............705..$177.......424...........*.........................737......*...297...........-..................",
|
||||
"..780..............858*........24.......$.............*.......+......432.........................*....406......137..779*...$...695..........",
|
||||
"....%.%192..........................734...860.........160...562..62........362.....896%........42..............*..........265.$.............",
|
||||
"............107/.......719..983............*..............................%.........................................................997.....",
|
||||
"..........................*....*377...118...589..................926...&.......11........501.......$............490..996..*.............%...",
|
||||
".........../....769........210........*................999......@.....372.11*...*.......*.....295..71......969@.-...*......223.....840..869.",
|
||||
"........742.....................554...148..........812....*.........+..........727....875......#........./.........857.875...........*......",
|
||||
"...611...........150*693...164....+........................636..327.73................................329...............*....25....747.942..",
|
||||
"........336...............*............808...*.....894...........*.......707*640.................538@................*...308............*...",
|
||||
".........$..............#..817..424*89...&.117......../.....2..243.....................................279*143..866..458............623.170.",
|
||||
".....301.......199...871..........................728......-.......742.252...876......./192........................................@........",
|
||||
".......*.825..+..........284-.....271................*........418....&.......*...............+.......781-..........92#...222............%452",
|
||||
"....786....*.....................#.................272..................133....653.........82..................554................*156......",
|
||||
"............838..917-..868*492.............156...........970..............*.....*..337...............100........*..397*177.....442.....&....",
|
||||
"..951..........................193..........%..............*.562=......505............+....203.971...........843...........%............753.",
|
||||
"...*............498....754......*......562....262........668................781................*.....*621.........115.....249...............",
|
||||
"....470......@........*......75.227......*...*...............57+........769....+....-.......839...968.....876......*..............491.......",
|
||||
"..........807..297..305..883..........470...505.....245...........682......*......415....................*.........982...........&.....180..",
|
||||
"................*...........*.............$.........*.......205......*135.......................%.....286..............418.............$....",
|
||||
"....362.444.....815..........722....336...37.........283...*..............329................433..........@153..........*.....435...........",
|
||||
"....*......*.........237...............*.....247...........108.....906.......=......611.............................608..814.-..............",
|
||||
"......285.......865.*..........62.973...781.....*..982.............*......60.......$.......722......=..834.%.....85*............215.........",
|
||||
"........*....%.......780.996..%....*..............%..........7..855..515.+.....990........*........600...+.765............911.....*.........",
|
||||
"......130..932.180.......*......143.........../..............*.......*..........&..149....301................................-...77.........",
|
||||
"...........................272.................868............943.976................*............944.........996....71.....................",
|
||||
"....511...............995#..-........&.................462.............-.601...931....889.&52.............................................27",
|
||||
"......#...55......................807.......424..968.................738...*......$..................598-.....77...408......%.......458.....",
|
||||
"....................88...272*................-....../....................544.......................$.........*.........11+...313....+.......",
|
||||
"108............819...*.......594..883..../............215..22.....................566*799........217....197..176...721......................",
|
||||
".....332.......*.....846..-.......#...157................@......454....698...622..........430........47*............................../.....",
|
||||
".............194..........239..................713*331..............51*.............800.....-..600.............&479..........-........805...",
|
||||
"......637*.....................847...........................274.#..........594...........................533........883....722....*........",
|
||||
"..........61...310.12......*..........923...............174....*.299.......-................132............&.........*..........876.331.....",
|
||||
"...............*.....*...435.864......+.......................11.....890....................$..........%............862.....968.............",
|
||||
"...../......404......398..........540.....................*............$.........287....................311.....515............*............",
|
||||
".....564.....................807...*...567.............985.100.....%.....................227..................$.*.........*........974.156..",
|
||||
"..............156.953...........$........$.....................695.329..................=.............836..176..128....864..216#....*.......",
|
||||
".767-...#.......%....*741...........-169........452/............*.............+...........174.....813....*..........%..............230......",
|
||||
"........17...............................159..........377=....659..........725....$......*........$...971.........907.766...................",
|
||||
"...............408.914........788...%......@...................................660.....138....333..........48..............=380...104.......",
|
||||
".............$........-......*.......480...............194..*527........*....................*...............*578..961...........*..........",
|
||||
"...444..428..470..........128...............684.399.....*............105.680......7*583............................*.......*....53....*.....",
|
||||
".....*.*...........223..........&19..........*.....*...246.....*........................526*939..........*....33..51....403..........706....",
|
||||
"...832..383...287.........................216....103...........710..................958...................288...............................",
|
||||
};
|
||||
|
||||
static const int input_height = sizeof(input) / sizeof(input[0]);
|
||||
// python hax:
|
||||
// len(one_line_of_this_bullshit)
|
||||
static const int input_width = 140;
|
Loading…
Reference in a new issue