Initial commit
commit
191721ca7d
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* IntComp.c - Advent of Code 2019 Day 2 Intcode Computer
|
||||
*
|
||||
* Copyright 2019 Jacob Sims <jtsims@pm.me>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf(stderr, "Usage: ./IntComp filename [name verb]\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *filename = argv[1];
|
||||
|
||||
FILE *input = fopen(filename, "r");
|
||||
if (input == NULL)
|
||||
{
|
||||
fprintf(stderr, "Could not open %s\n", filename);
|
||||
return 2;
|
||||
}
|
||||
|
||||
char *buf = NULL;
|
||||
size_t n = 0;
|
||||
|
||||
int memory[500];
|
||||
|
||||
int address = 0;
|
||||
|
||||
// Read the program into memory
|
||||
while (getdelim(&buf, &n, ',', input) != -1)
|
||||
{
|
||||
memory[address] = strtod(buf, NULL);
|
||||
address++;
|
||||
}
|
||||
fclose(input);
|
||||
|
||||
// Add noun and verb values, if necessary
|
||||
if (argc == 4 && !strcmp(filename, "main.txt"))
|
||||
{
|
||||
int noun = strtod(argv[2], NULL);
|
||||
int verb = strtod(argv[3], NULL);
|
||||
|
||||
opcode[1] = noun;
|
||||
opcode[2] = verb;
|
||||
}
|
||||
|
||||
// Run the program
|
||||
for (int i = 0; memory[i] != 99; i += 4)
|
||||
{
|
||||
int param1 = memory[memory[i + 1]];
|
||||
int param2 = memory[memory[i + 2]];
|
||||
int storeparam = memory[i + 3];
|
||||
|
||||
switch (memory[i])
|
||||
{
|
||||
case 1:
|
||||
memory[storeparam] = param1 + param2;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
memory[storeparam] = param1 * param2;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "Unknown instruction\n");
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
// Printf the output
|
||||
printf("Address 0: %i\n", memory[0]);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* AoC1.c - Advent of Code 2019 Day 1
|
||||
*
|
||||
* Given a certain mass, the amount of fuel required is calculated by
|
||||
* floor dividing (dividing and rounding down) the mass by 3 then
|
||||
* subtracting two. The masses in question are in 'mass-input.txt' in
|
||||
* newline-divided format. The result is all of these masses' fuel
|
||||
* requirements added together.
|
||||
*
|
||||
* Provides the correct answer.
|
||||
*
|
||||
* Jacob Sims (jtsims@pm.me) 2019-12-03
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int calculateFuel(int to_lift);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
FILE *input = fopen("mass-input.txt", "r");
|
||||
if (input == NULL)
|
||||
{
|
||||
fprintf(stderr, "Could not open input file\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *buf = NULL;
|
||||
size_t n = 0;
|
||||
|
||||
int reqfuel;
|
||||
int mass;
|
||||
|
||||
while (getline(&buf, &n, input) != -1)
|
||||
{
|
||||
mass = strtod(buf, NULL);
|
||||
reqfuel += calculateFuel(mass);
|
||||
}
|
||||
fclose(input);
|
||||
free(buf);
|
||||
|
||||
printf("Total fuel: %i\n", reqfuel);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int calculateFuel(int to_lift)
|
||||
{
|
||||
int fuel = (to_lift / 3) - 2;
|
||||
return fuel <= 0 ? 0 : fuel + calculateFuel(fuel);
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
83453
|
||||
89672
|
||||
81336
|
||||
74923
|
||||
71474
|
||||
117060
|
||||
55483
|
||||
116329
|
||||
123515
|
||||
99383
|
||||
80314
|
||||
108221
|
||||
128335
|
||||
72860
|
||||
139235
|
||||
127843
|
||||
140120
|
||||
63561
|
||||
68854
|
||||
109062
|
||||
146211
|
||||
59096
|
||||
123085
|
||||
105763
|
||||
127657
|
||||
142212
|
||||
111007
|
||||
100166
|
||||
63641
|
||||
59010
|
||||
108575
|
||||
93619
|
||||
144095
|
||||
74561
|
||||
95059
|
||||
145318
|
||||
81404
|
||||
96567
|
||||
91799
|
||||
92987
|
||||
107137
|
||||
87678
|
||||
126842
|
||||
85594
|
||||
116330
|
||||
104714
|
||||
128117
|
||||
132641
|
||||
75602
|
||||
90747
|
||||
69038
|
||||
67322
|
||||
146147
|
||||
147535
|
||||
83266
|
||||
85908
|
||||
124634
|
||||
51681
|
||||
104430
|
||||
56202
|
||||
68631
|
||||
69970
|
||||
116985
|
||||
140878
|
||||
125357
|
||||
126229
|
||||
66379
|
||||
103213
|
||||
108210
|
||||
73855
|
||||
130992
|
||||
113363
|
||||
82298
|
||||
111468
|
||||
110751
|
||||
52272
|
||||
103661
|
||||
122262
|
||||
114363
|
||||
80881
|
||||
65183
|
||||
125291
|
||||
100119
|
||||
56995
|
||||
101634
|
||||
55467
|
||||
136284
|
||||
107433
|
||||
95647
|
||||
71462
|
||||
133265
|
||||
104554
|
||||
62499
|
||||
61347
|
||||
68675
|
||||
123501
|
||||
113954
|
||||
135798
|
||||
80825
|
||||
128235
|
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* AoC2.c - Advent of Code 2019 Day 2 Intcode Computer
|
||||
*
|
||||
* Copyright 2019 Jacob Sims <jtsims@pm.me>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
int compute(int *program, int noun, int verb);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf(stderr, "Usage: ./aoc filename\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *filename = argv[1];
|
||||
|
||||
FILE *input = fopen(filename, "r");
|
||||
if (input == NULL)
|
||||
{
|
||||
fprintf(stderr, "Could not open %s\n", filename);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
char *buf;
|
||||
size_t n;
|
||||
|
||||
int address;
|
||||
|
||||
int memory[500];
|
||||
|
||||
for (int verb = 0; verb < 100; verb++)
|
||||
{
|
||||
for (int noun = 0; noun < 100; noun++)
|
||||
{
|
||||
buf = NULL;
|
||||
n = 0;
|
||||
address = 0;
|
||||
fseek(input, 0, SEEK_SET);
|
||||
|
||||
while (getdelim(&buf, &n, ',', input) != -1)
|
||||
{
|
||||
memory[address] = strtod(buf, NULL);
|
||||
address++;
|
||||
}
|
||||
|
||||
if (compute(memory, noun, verb) == 19690720)
|
||||
{
|
||||
printf("Noun: %i\nVerb: %i\n", noun, verb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(input);
|
||||
free(buf);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int compute(int *program, int noun, int verb)
|
||||
{
|
||||
program[1] = noun;
|
||||
program[2] = verb;
|
||||
|
||||
// Run the program
|
||||
for (int i = 0; program[i] != 99; i += 4)
|
||||
{
|
||||
int param1 = program[program[i + 1]];
|
||||
int param2 = program[program[i + 2]];
|
||||
int storeparam = program[i + 3];
|
||||
|
||||
switch (program[i])
|
||||
{
|
||||
case 1:
|
||||
program[storeparam] = param1 + param2;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
program[storeparam] = param1 * param2;
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Unknown instruction\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return program[0];
|
||||
}
|
@ -0,0 +1 @@
|
||||
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,6,19,23,2,23,6,27,1,5,27,31,1,10,31,35,2,6,35,39,1,39,13,43,1,43,9,47,2,47,10,51,1,5,51,55,1,55,10,59,2,59,6,63,2,6,63,67,1,5,67,71,2,9,71,75,1,75,6,79,1,6,79,83,2,83,9,87,2,87,13,91,1,10,91,95,1,95,13,99,2,13,99,103,1,103,10,107,2,107,10,111,1,111,9,115,1,115,2,119,1,9,119,0,99,2,0,14,0
|
@ -0,0 +1 @@
|
||||
1,0,0,0,99
|
@ -0,0 +1 @@
|
||||
2,3,0,3,99
|
@ -0,0 +1 @@
|
||||
2,4,4,5,99,0
|
@ -0,0 +1 @@
|
||||
1,1,1,4,99,5,6,0,99
|
@ -0,0 +1,148 @@
|
||||
/*
|
||||
* AoC3.c - Advent of Code 2019 Day 3
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
struct step
|
||||
{
|
||||
char direction;
|
||||
int distance;
|
||||
};
|
||||
|
||||
struct coord
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
#define TOTAL_STEPS 301
|
||||
#define TOTAL_COORDS 131072
|
||||
|
||||
void readIn(struct step *to_fill, FILE *input);
|
||||
/* returns length of line */
|
||||
int calculatePath(struct step *line, struct coord *coordlist, size_t size);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
/* open files, create arrays, and read in */
|
||||
FILE *input1 = fopen("directions1.txt", "r");
|
||||
if (input1 == NULL)
|
||||
{
|
||||
fprintf(stderr, "Cannot open first input file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
FILE *input2 = fopen("directions2.txt", "r");
|
||||
if (input2 == NULL)
|
||||
{
|
||||
fprintf(stderr, "Cannot open second input file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
struct step line1[TOTAL_STEPS];
|
||||
struct step line2[TOTAL_STEPS];
|
||||
|
||||
readIn(line1, input1);
|
||||
readIn(line2, input2);
|
||||
|
||||
fclose(input1);
|
||||
fclose(input2);
|
||||
|
||||
struct coord *coordlist1 = malloc(sizeof(struct coord) * TOTAL_COORDS);
|
||||
struct coord *coordlist2 = malloc(sizeof(struct coord) * TOTAL_COORDS);
|
||||
if (coordlist1 == NULL || coordlist2 == NULL)
|
||||
{
|
||||
fprintf(stderr, "Insufficient memory for allocation\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
/*int length1 = */calculatePath(line1, coordlist1, TOTAL_COORDS);
|
||||
/*int length2 = */calculatePath(line2, coordlist2, TOTAL_COORDS);
|
||||
|
||||
for (int i = 0; i < 27603; i++)
|
||||
{
|
||||
printf("List 1 step %d x: %d\n", i, coordlist1[i].x);
|
||||
printf("List 1 step %d y: %d\n", i, coordlist1[i].y);
|
||||
printf("List 2 step %d x: %d\n", i, coordlist2[i].x);
|
||||
printf("List 2 step %d y: %d\n", i, coordlist2[i].y);
|
||||
}
|
||||
|
||||
free(coordlist1);
|
||||
free(coordlist2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* reads in a coordinate CSV file */
|
||||
void readIn(struct step *to_fill, FILE *input)
|
||||
{
|
||||
int index = 0;
|
||||
size_t n = 0;
|
||||
char *buf = NULL;
|
||||
|
||||
struct step *ptr = to_fill;
|
||||
|
||||
// iterate over CSV file
|
||||
while (getdelim(&buf, &n, ',', input) != -1)
|
||||
{
|
||||
// interprete a value by dividing it into direction and distance
|
||||
sscanf(buf, "%[DLRU]%d", &ptr[index].direction, &ptr[index].distance);
|
||||
index++;
|
||||
}
|
||||
free(buf);
|
||||
}
|
||||
|
||||
/* compute and store the entire path of one line */
|
||||
int calculatePath(struct step *line, struct coord *coordlist, size_t size)
|
||||
{
|
||||
// tracker variables
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int preceding_steps = 0;
|
||||
int distance;
|
||||
|
||||
// iterate over each direction-distance pair
|
||||
for (int i = 0; i < TOTAL_STEPS; i++)
|
||||
{
|
||||
distance = line[i].distance;
|
||||
|
||||
if ((distance + preceding_steps) >= size)
|
||||
{
|
||||
size *= 2;
|
||||
coordlist = (struct coord *)realloc(coordlist, sizeof(struct coord) * size);
|
||||
}
|
||||
|
||||
// store every coordinate following the path of this straight line
|
||||
for (int k = 0; k < distance; k++)
|
||||
{
|
||||
coordlist[k + preceding_steps].x = x;
|
||||
coordlist[k + preceding_steps].y = y;
|
||||
|
||||
// check direction and iterate appropriate value
|
||||
switch (line[i].direction)
|
||||
{
|
||||
case 'R':
|
||||
x++;
|
||||
break;
|
||||
case 'L':
|
||||
x--;
|
||||
break;
|
||||
case 'U':
|
||||
y++;
|
||||
break;
|
||||
case 'D':
|
||||
y--;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Path computation error; no valid direction\n");
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
preceding_steps += distance;
|
||||
}
|
||||
return preceding_steps;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* AoC3.c - Advent of Code 2019 Day 3
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
struct step
|
||||
{
|
||||
char direction;
|
||||
int distance;
|
||||
};
|
||||
// total steps: 301 for each line
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
FILE *input = fopen("directions.txt", "r");
|
||||
if (input == NULL)
|
||||
{
|
||||
fprintf(stderr, "Cannot open input file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
size_t n = 0;
|
||||
char *buf = NULL;
|
||||
|
||||
int total_steps = 500;
|
||||
struct step line1[total_steps];
|
||||
struct step line2[total_steps];
|
||||
struct step *ptr = line1;
|
||||
int index = 0;
|
||||
|
||||
while(getdelim(&buf, &n, ',', input) != -1)
|
||||
{
|
||||
sscanf(buf, "%[DLRU]%d", &ptr[index].direction, &ptr[index].distance);
|
||||
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
if (buf[i] == '\n')
|
||||
{
|
||||
buf[i] = ' ';
|
||||
ptr = line2;
|
||||
index = 0;
|
||||
sscanf(buf, "%[DLRU]%d", &ptr[index].direction, &ptr[index].distance);
|
||||
break;
|
||||
}
|
||||
buf[i] = ' ';
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
fclose(input);
|
||||
free(buf);
|
||||
|
||||
for (int i = 0; i < 301; i++)
|
||||
{
|
||||
printf("Line 1 direction: %c\n", (char) line1[i].direction);
|
||||
printf("Line 1 distance: %i\n", line1[i].distance);
|
||||
printf("Line 2 direction: %c\n", (char) line2[i].direction);
|
||||
printf("Line 2 distance: %i\n", line2[i].distance);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
R990,U475,L435,D978,L801,D835,L377,D836,L157,D84,R329,D342,R931,D522,L724,U891,L508,U274,L146,U844,R686,D441,R192,U992,L781,D119,R436,D286,R787,D85,L801,U417,R619,D710,R42,U261,R296,U697,L354,D843,R613,U880,R789,D134,R636,D738,L939,D459,L338,D905,R811,D950,L44,U992,R845,U771,L563,D76,L69,U839,L57,D311,L615,D931,L437,D201,L879,D1,R978,U415,R548,D398,L560,D112,L894,D668,L708,D104,R622,D768,R901,D746,L793,D26,R357,U216,L216,D33,L653,U782,R989,U678,L7,D649,R860,D281,L988,U362,L525,U652,R620,D376,L983,U759,R828,D669,L297,U207,R68,U77,R255,U269,L661,U310,L309,D490,L55,U471,R260,D912,R691,D62,L63,D581,L289,D366,L862,D360,L485,U946,R937,D470,L792,D614,R936,D963,R611,D151,R908,D195,R615,U768,L166,D314,R640,U47,L161,U872,R50,U694,L917,D149,L92,U244,L337,U479,R755,U746,L196,D759,L936,U61,L744,D774,R53,U439,L185,D504,R769,D696,L285,D396,R791,U21,L35,D877,L9,U398,R447,U101,R590,U862,L351,D210,L935,U938,R131,U758,R99,U192,L20,U142,L946,D981,R998,U214,R174,U710,L719,D879,L411,U839,L381,U924,L221,D397,R380,U715,R139,D367,R253,D973,L9,U624,L426,D885,R200,U940,R214,D75,R717,D2,R578,U161,R421,U326,L561,U311,L701,U259,R836,D920,R35,D432,R610,D63,R664,D39,L119,D47,L605,D228,L364,D14,L226,D365,R796,D233,R476,U145,L926,D907,R681,U267,R844,U735,L948,U344,L629,U31,L383,U694,L666,U158,R841,D27,L150,D950,L335,U275,L184,D157,R504,D602,R605,D185,L215,D420,R700,U809,L139,D937,L248,U693,L56,U92,L914,U743,R445,U417,L504,U23,R332,U865,R747,D553,R595,U845,R693,U915,R81
|
||||
L1004,U406,L974,D745,R504,D705,R430,D726,R839,D550,L913,D584,R109,U148,L866,U664,R341,U449,L626,D492,R716,U596,L977,D987,L47,U612,L478,U928,L66,D752,R665,U415,R543,U887,R315,D866,R227,D615,R478,U180,R255,D316,L955,U657,R752,U561,R786,U7,R918,D755,R506,U131,L875,D849,R823,D755,L604,U944,R186,D326,L172,U993,L259,D765,R427,D193,R663,U470,L294,D437,R645,U10,L926,D814,L536,D598,R886,D290,L226,U156,R754,D105,L604,D136,L883,U87,R839,D807,R724,U184,L746,D79,R474,U186,R727,U9,L69,U565,R459,D852,R61,U370,L890,D439,L431,U846,R460,U358,R51,D407,R55,U179,L385,D652,R193,D52,L569,U980,L185,U813,R636,D275,L585,U590,R215,U947,R851,D127,L249,U954,L884,D235,R3,U735,R994,D883,L386,D506,L963,D751,L989,U733,L221,U890,L711,D32,L74,U437,L700,D977,L49,U478,R438,D27,R945,D670,L230,U863,L616,U461,R267,D25,L646,D681,R426,D918,L791,U712,L730,U715,L67,U359,R915,D524,L722,U374,L582,U529,L802,D865,L596,D5,R323,U235,R405,D62,R304,U996,L939,U420,L62,D299,R802,D803,L376,U430,L810,D334,L67,U395,L818,U953,L817,D411,L225,U383,R247,D234,L430,U315,L418,U254,L964,D372,R979,D301,R577,U440,R924,D220,L121,D785,L609,U20,R861,U288,R388,D410,L278,D748,L800,U755,L919,D985,L785,U676,R916,D528,L507,D469,L582,D8,L900,U512,L764,D124,L10,U567,L379,D231,R841,D244,R479,U145,L769,D845,R651,U712,L920,U791,R95,D958,L608,D755,R967,U855,R563,D921,L37,U699,L944,U718,R959,D195,L922,U726,R378,U258,R340,D62,L555,D135,L690,U269,L273,D851,L60,D851,R1,D315,R117,D855,L275,D288,R25,U503,R569,D596,L823,U687,L450
|
@ -0,0 +1 @@
|
||||
R990,U475,L435,D978,L801,D835,L377,D836,L157,D84,R329,D342,R931,D522,L724,U891,L508,U274,L146,U844,R686,D441,R192,U992,L781,D119,R436,D286,R787,D85,L801,U417,R619,D710,R42,U261,R296,U697,L354,D843,R613,U880,R789,D134,R636,D738,L939,D459,L338,D905,R811,D950,L44,U992,R845,U771,L563,D76,L69,U839,L57,D311,L615,D931,L437,D201,L879,D1,R978,U415,R548,D398,L560,D112,L894,D668,L708,D104,R622,D768,R901,D746,L793,D26,R357,U216,L216,D33,L653,U782,R989,U678,L7,D649,R860,D281,L988,U362,L525,U652,R620,D376,L983,U759,R828,D669,L297,U207,R68,U77,R255,U269,L661,U310,L309,D490,L55,U471,R260,D912,R691,D62,L63,D581,L289,D366,L862,D360,L485,U946,R937,D470,L792,D614,R936,D963,R611,D151,R908,D195,R615,U768,L166,D314,R640,U47,L161,U872,R50,U694,L917,D149,L92,U244,L337,U479,R755,U746,L196,D759,L936,U61,L744,D774,R53,U439,L185,D504,R769,D696,L285,D396,R791,U21,L35,D877,L9,U398,R447,U101,R590,U862,L351,D210,L935,U938,R131,U758,R99,U192,L20,U142,L946,D981,R998,U214,R174,U710,L719,D879,L411,U839,L381,U924,L221,D397,R380,U715,R139,D367,R253,D973,L9,U624,L426,D885,R200,U940,R214,D75,R717,D2,R578,U161,R421,U326,L561,U311,L701,U259,R836,D920,R35,D432,R610,D63,R664,D39,L119,D47,L605,D228,L364,D14,L226,D365,R796,D233,R476,U145,L926,D907,R681,U267,R844,U735,L948,U344,L629,U31,L383,U694,L666,U158,R841,D27,L150,D950,L335,U275,L184,D157,R504,D602,R605,D185,L215,D420,R700,U809,L139,D937,L248,U693,L56,U92,L914,U743,R445,U417,L504,U23,R332,U865,R747,D553,R595,U845,R693,U915,R81
|
@ -0,0 +1 @@
|
||||
L1004,U406,L974,D745,R504,D705,R430,D726,R839,D550,L913,D584,R109,U148,L866,U664,R341,U449,L626,D492,R716,U596,L977,D987,L47,U612,L478,U928,L66,D752,R665,U415,R543,U887,R315,D866,R227,D615,R478,U180,R255,D316,L955,U657,R752,U561,R786,U7,R918,D755,R506,U131,L875,D849,R823,D755,L604,U944,R186,D326,L172,U993,L259,D765,R427,D193,R663,U470,L294,D437,R645,U10,L926,D814,L536,D598,R886,D290,L226,U156,R754,D105,L604,D136,L883,U87,R839,D807,R724,U184,L746,D79,R474,U186,R727,U9,L69,U565,R459,D852,R61,U370,L890,D439,L431,U846,R460,U358,R51,D407,R55,U179,L385,D652,R193,D52,L569,U980,L185,U813,R636,D275,L585,U590,R215,U947,R851,D127,L249,U954,L884,D235,R3,U735,R994,D883,L386,D506,L963,D751,L989,U733,L221,U890,L711,D32,L74,U437,L700,D977,L49,U478,R438,D27,R945,D670,L230,U863,L616,U461,R267,D25,L646,D681,R426,D918,L791,U712,L730,U715,L67,U359,R915,D524,L722,U374,L582,U529,L802,D865,L596,D5,R323,U235,R405,D62,R304,U996,L939,U420,L62,D299,R802,D803,L376,U430,L810,D334,L67,U395,L818,U953,L817,D411,L225,U383,R247,D234,L430,U315,L418,U254,L964,D372,R979,D301,R577,U440,R924,D220,L121,D785,L609,U20,R861,U288,R388,D410,L278,D748,L800,U755,L919,D985,L785,U676,R916,D528,L507,D469,L582,D8,L900,U512,L764,D124,L10,U567,L379,D231,R841,D244,R479,U145,L769,D845,R651,U712,L920,U791,R95,D958,L608,D755,R967,U855,R563,D921,L37,U699,L944,U718,R959,D195,L922,U726,R378,U258,R340,D62,L555,D135,L690,U269,L273,D851,L60,D851,R1,D315,R117,D855,L275,D288,R25,U503,R569,D596,L823,U687,L450
|
@ -0,0 +1,200 @@
|
||||
261
|
||||
1773
|
||||
1839
|
||||
1551
|
||||
1781
|
||||
1276
|
||||
1372
|
||||
1668
|
||||
1823
|
||||
1870
|
||||
1672
|
||||
1821
|
||||
1327
|
||||
1902
|
||||
1949
|
||||
1389
|
||||
1720
|
||||
1437
|
||||
1716
|
||||
1360
|
||||
1893
|
||||
1410
|
||||
1881
|
||||
1927
|
||||
1639
|
||||
1514
|
||||
1753
|
||||
1625
|
||||
1249
|
||||
1696
|
||||
1698
|
||||
1699
|
||||
2004
|
||||
1742
|
||||
1903
|
||||
473
|
||||
1948
|
||||
1830
|
||||
1973
|
||||
2005
|
||||
1468
|
||||
1824
|
||||
1809
|
||||
1493
|
||||
2009
|
||||
1848
|
||||
1306
|
||||
1519
|
||||
1618
|
||||
1905
|
||||
1402
|
||||
1705
|
||||
1910
|
||||
1609
|
||||
1571
|
||||
1557
|
||||
1420
|
||||
608
|
||||
1471
|
||||
1383
|
||||
1442
|
||||
1447
|
||||
1985
|
||||
1486
|
||||
1629
|
||||
1450
|
||||
1767
|
||||
1407
|
||||
1626
|
||||
1623
|
||||
1467
|
||||
1224
|
||||
1269
|
||||
1325
|
||||
1674
|
||||
1945
|
||||
1733
|
||||
1913
|
||||
1451
|
||||
1853
|
||||
1875
|
||||
405
|
||||
1500
|
||||
1634
|
||||
1570
|
||||
1868
|
||||
1510
|
||||
1069
|
||||
1296
|
||||
1852
|
||||
1287
|
||||
1274
|
||||
832
|
||||
1373
|
||||
1142
|
||||
1838
|
||||
1854
|
||||
1480
|
||||
1628
|
||||
1632
|
||||
1597
|
||||
1761
|
||||
1717
|
||||
1684
|
||||
1956
|
||||
1351
|
||||
1622
|
||||
1941
|
||||
1704
|
||||
1926
|
||||
1873
|
||||
1393
|
||||
1850
|
||||
1898
|
||||
1960
|
||||
1673
|
||||
1736
|
||||
1901
|
||||
1806
|
||||
1768
|
||||
1670
|
||||
1989
|
||||
1214
|
||||
1851
|
||||
1715
|
||||
1461
|
||||
1277
|
||||
951
|
||||
1482
|
||||
1464
|
||||
1883
|
||||
1976
|
||||
1602
|
||||
1606
|
||||
1258
|
||||
1801
|
||||
1593
|
||||
1332
|
||||
1386
|
||||
1309
|
||||
1388
|
||||
1762
|
||||
1533
|
||||
1805
|
||||
1462
|
||||
375
|
||||
1555
|
||||
1357
|
||||
1578
|
||||
1552
|
||||
1473
|
||||
1834
|
||||
1262
|
||||
1466
|
||||
1925
|
||||
1955
|
||||
1575
|
||||
1975
|
||||
1964
|
||||
1440
|
||||
1667
|
||||
1922
|
||||
1454
|
||||
1813
|
||||
1968
|
||||
1836
|
||||
1982
|
||||
1326
|
||||
1811
|
||||
900
|
||||
1588
|
||||
1529
|
||||
1997
|
||||
1345
|
||||
1859
|
||||
1458
|
||||
1764
|
||||
1509
|
||||
1397
|
||||
1237
|
||||
1627
|
||||
1564
|
||||
1814
|
||||
1842
|
||||
1679
|
||||
1289
|
||||
1957
|
||||
1819
|
||||
801
|
||||
1350
|
||||
1841
|
||||
1803
|
||||
1718
|
||||
1966
|
||||
1272
|
||||
1636
|
||||
1352
|
||||
1496
|
||||
1455
|
||||
1488
|
@ -0,0 +1,41 @@
|
||||
import std.conv;
|
||||
import std.file;
|
||||
import std.stdio;
|
||||
import std.string;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length < 2) {
|
||||
writeln("Usage: ./day1 input.file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
|
||||
if (!exists(fileName)) {
|
||||
writeln(fileName, " does not exist.");
|
||||
return 2;
|
||||
}
|
||||
|
||||
string[] entries = readText(args[1]).splitLines();
|
||||
int sum;
|
||||
foreach (a; entries) {
|
||||
int x = a.to!int;
|
||||
|
||||
foreach (b; entries) {
|
||||
int y = b.to!int;
|
||||
|
||||
if (x == y)
|
||||
continue;
|
||||
else
|
||||
sum = x + y;
|
||||
|
||||
if (sum == 2020) {
|
||||
writeln("Solution: ", a, " * ", b, " = ", x * y);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return 3;
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
import std.conv;
|
||||
import std.file;
|
||||
import std.stdio;
|
||||
import std.string;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length < 2) {
|
||||
writeln("Usage: ./day1 input.file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
|
||||
if (!exists(fileName)) {
|
||||
writeln(fileName, " does not exist.");
|
||||
return 2;
|
||||
}
|
||||
|
||||
string[] entries = readText(args[1]).splitLines();
|
||||
int sum;
|
||||
foreach (a; entries) {
|
||||
int x = a.to!int;
|
||||
|
||||
foreach (b; entries) {
|
||||
int y = b.to!int;
|
||||
|
||||
if (x == y)
|
||||
continue;
|
||||
|
||||
foreach (c; entries) {
|
||||
int z = c.to!int;
|
||||
if (y == z || x == z)
|
||||
continue;
|
||||
else
|
||||
sum = x + y + z;
|
||||
|
||||
if (sum == 2020) {
|
||||
writeln("Solution: ", a, " * ", b, " * ", c, " = ", x * y * z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 3;
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
97
|
||||
62
|
||||
23
|
||||
32
|
||||
51
|
||||
19
|
||||
98
|
||||
26
|
||||
90
|
||||
134
|
||||
73
|
||||
151
|
||||
116
|
||||
76
|
||||
6
|
||||
94
|
||||
113
|
||||
127
|
||||
119
|
||||
44
|
||||
115
|
||||
50
|
||||
143
|
||||
150
|
||||
86
|
||||
91
|
||||
36
|
||||
104
|
||||
131
|
||||
101
|
||||
38
|
||||
66
|
||||
46
|
||||
96
|
||||
54
|
||||
70
|
||||
8
|
||||
30
|
||||
1
|
||||
108
|
||||
69
|
||||
139
|
||||
24
|
||||
29
|
||||
77
|
||||
124
|
||||
107
|
||||
14
|
||||
137
|
||||
16
|
||||
140
|
||||
80
|
||||
68
|
||||
25
|
||||
31
|
||||
59
|
||||
45
|
||||
126
|
||||
148
|
||||
67
|
||||
13
|
||||
125
|
||||
53
|
||||
57
|
||||
41
|
||||
47
|
||||
35
|
||||
145
|
||||
120
|
||||
12
|
||||
37
|
||||
5
|
||||
110
|
||||
138
|
||||
130
|
||||
2
|
||||
63
|
||||
83
|
||||
22
|
||||
79
|
||||
52
|
||||
7
|
||||
95
|
||||
58
|
||||
149
|
||||
123
|
||||
89
|
||||
109
|
||||
15
|
||||
144
|
||||
114
|
||||
9
|
||||
78
|
@ -0,0 +1,37 @@
|
||||
import std.algorithm.sorting : sort;
|
||||
import std.array : split;
|
||||
import std.conv : to;
|
||||
import std.file : exists, readText;
|
||||
import std.stdio : stderr, writeln;
|
||||
import std.string : splitLines;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length != 2) {
|
||||
stderr.writeln("Usage: ./p1 file.name");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
if (!exists(fileName)) {
|
||||
stderr.writeln(fileName, " does not exist");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string[] fileLines = fileName.readText.splitLines();
|
||||
ulong[] nums;
|
||||
foreach (line; fileLines)
|
||||
nums ~= line.to!ulong;
|
||||
nums.sort();
|
||||
nums ~= nums[$-1] + 3;
|
||||
|
||||
ulong[ulong] numDifferences;
|
||||
ulong last;
|
||||
foreach (val; nums) {
|
||||
numDifferences[val - last]++;
|
||||
last = val;
|
||||
}
|
||||
|
||||
writeln("Result: ", numDifferences[1]*numDifferences[3]);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/* The runtime for this is impractical - use the memoized version */
|
||||
|
||||
import std.algorithm.searching : canFind;
|
||||
import std.algorithm.sorting : sort;
|
||||
import std.array : split;
|
||||
import std.conv : to;
|
||||
import std.file : exists, readText;
|
||||
import std.stdio : stderr, writeln;
|
||||
import std.string : splitLines;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length != 2) {
|
||||
stderr.writeln("Usage: ./p2 file.name");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
if (!exists(fileName)) {
|
||||
stderr.writeln(fileName, " does not exist");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string[] fileLines = fileName.readText.splitLines();
|
||||
ulong[] nums = [0];
|
||||
foreach (line; fileLines)
|
||||
nums ~= line.to!ulong;
|
||||
nums.sort();
|
||||
nums ~= nums[$-1] + 3;
|
||||
|
||||
ulong numPaths = createArrangements(nums, nums[0]);
|
||||
|
||||
writeln("Result: ", numPaths);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ulong createArrangements(ulong[] nums, ulong val) {
|
||||
ulong toRet;
|
||||
foreach (mod; 1 .. 4) {
|
||||
ulong toFind = val+mod;
|
||||
if (toFind == nums[$-1])
|
||||
return toRet + 1;
|
||||
else if (nums.canFind(toFind))
|
||||
toRet += createArrangements(nums, toFind);
|
||||
}
|
||||
return toRet;
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
import std.algorithm.searching : canFind;
|
||||
import std.algorithm.sorting : sort;
|
||||
import std.array : split;
|
||||
import std.conv : to;
|
||||
import std.file : exists, readText;
|
||||
import std.functional : memoize;
|
||||
import std.stdio : stderr, writeln;
|
||||
import std.string : splitLines;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length != 2) {
|
||||
stderr.writeln("Usage: ./p2 file.name");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
if (!exists(fileName)) {
|
||||
stderr.writeln(fileName, " does not exist");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string[] fileLines = fileName.readText.splitLines();
|
||||
ulong[] nums = [0];
|
||||
foreach (line; fileLines)
|
||||
nums ~= line.to!ulong;
|
||||
nums.sort();
|
||||
nums ~= nums[$-1] + 3;
|
||||
|
||||
ulong numPaths = createArrangements(nums, nums[0]);
|
||||
|
||||
writeln("Result: ", numPaths);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ulong createArrangements(ulong[] nums, ulong val) {
|
||||
ulong toRet;
|
||||
foreach (mod; 1 .. 4) {
|
||||
ulong toFind = val+mod;
|
||||
if (toFind == nums[$-1])
|
||||
return toRet + 1;
|
||||
else if (nums.canFind(toFind))
|
||||
toRet += memoize!createArrangements(nums, toFind);
|
||||
}
|
||||
return toRet;
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
16
|
||||
10
|
||||
15
|
||||
5
|
||||
1
|
||||
11
|
||||
7
|
||||
19
|
||||
6
|
||||
12
|
||||
4
|
@ -0,0 +1,31 @@
|
||||
28
|
||||
33
|
||||
18
|
||||
42
|
||||
31
|
||||
14
|
||||
46
|
||||
20
|
||||
48
|
||||
47
|
||||
24
|
||||
23
|
||||
49
|
||||
45
|
||||
19
|
||||
38
|
||||
39
|
||||
11
|
||||
1
|
||||
32
|
||||
25
|
||||
35
|
||||
8
|
||||
17
|
||||
7
|
||||
9
|
||||
4
|
||||
2
|
||||
34
|
||||
10
|
||||
3
|
@ -0,0 +1,94 @@
|
||||
LLLLLLLLLLL..LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLL..LLLLL
|
||||
LLLLL..L.LLL.L.LLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLL..LLLL
|
||||
LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL
|
||||
LLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL
|
||||
LLLL.L.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLL..LLLLLLL
|
||||
..LLL...L....LL...LLLL.....LL.L.LL.....LL.....L...L.L....LLL..L....L......L........L...L.L..
|
||||
LLLLLL.LLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL..LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL..LLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LL.LL
|
||||
LLLLLLLLL.LL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL..LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLL.LLL.LL.LLLLLL..LLL.LLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLLL.LL..LLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL
|
||||
LL.L.LLL.L.L..LLL....LL..L.L..LL.L.LL....LL....LL..LLL.......L....LLL...LL...L....L.....LL..
|
||||
LLLLLL.LLLLL.LLLLLL.LLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLL..LLLL.LLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LL.LLL.L.LLL.LLLL.LLLLLLL
|
||||
LLLLL..LLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL..LLLLL.LLLLL
|
||||
LL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LL.LLLL.LL.LLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLL.L.LLL
|
||||
....L...L.L...L..L..LL.........L.L...L.....L...LLLLL...LL.....LLL..LL..L.L...LL......LL..L..
|
||||
LLLLLL.LLLLL.LLL.LL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLL.L.LLLLLL.LLLLL.LLL.L.LL.LLLLLLLLLLLLLLL..LLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLLLLLLLL.LL.LLLLL.LLLLLL.LLLLLLLLL.LL.LLL.LLLLL.L.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLL.LL.LLL.L.LLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLL.LLLL.LLLLLLLLL.LLLL.L.LLLLLLL.LLLLLLLLLL.L.LLLLLL.LLLLL
|
||||
L..LL......L...L.L..L..LLL........LLL....L.L.L.L..........L.L...L..LL.L.......L...L.LL.LL...
|
||||
LLLLLLLLLLLL.LLL.LL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLL.L.LLLLLLL.LLLLLL.LLLLL.LLLL.L.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLLLLLLL.L.LL.LL.LL.LLL.LLLLL.LLLLLLLLLLLL
|
||||
LLLLLL.LLLLL.LLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLL.LLLLL.LLLL.L.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL..LLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLL.LL.LL.LLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLL
|
||||
LLLLLL.LLLL..LLLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
.L.......L...L.LLL...LL....L...L.......L......L..L...L.....L.....LL..L...L..L.L.......L.....
|
||||
LL.LLL.LLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLL.L
|
||||
LLLLLLLLLL.L.LLLLLL.L.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLL.L.L.LLL.LLLLLL.LLLLL.LLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
.........L..LL...L..LLL.L.L.L.LL....LLLL...L....L...L.LL....LL.LL.L......L.L.LLLLL.L.LL....L
|
||||
LLLLLL.LLLLL.LLLLLL.LLLL..LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLLLL.LLLLL
|
||||
LL.LLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.L..LLLLLLLLL...LLL..LLLLLLL.LLLLLLLLLLLL
|
||||
L.LLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LL.LLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LL.LLL.LLLLL.L.LLLLLL.LLLLLL.L.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLL..LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLL..LLLLLL.LL.LLLLLL.LLLLL.L..LLLLL.LLLL...LLLLLLLLLLL
|
||||
LLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLL..LLLLLLLLLLLL
|
||||
..L..........LLLL...LL....LLLLL....L...L...L...L.......L.LL..L....L....L.L..L....LL......L..
|
||||
LLLLLL.LLLLL.L.LLLL.LLLL..LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LL.LLL.LLLLL.LLLLL..LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLL..LLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLLLLLL.LLLLLL.LLL..LLLLLLLLLLLLLLLLL
|
||||
LLLL.LLLLLLL.LLLLLL.LLL.L.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL..LLLLL.LLLLL
|
||||
LL.LLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.L.L.LLLLLLLLLLLLLLL.LLL.LLLLL.LLLLLL.L.LLLLL...LLLL.LLLLLLLLLLLLLLLLLL
|
||||
.L...L...........L.LLL..L.......L.....LL......L.LLL........LL..L...L......L.L....L.LLL.LL..L
|
||||
LLLLLL.LLLLL.L.LLLL.LLLLL.LLLLLLLL.LL.LLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LL.LL.LLLLLLLL.LLL.LL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.L.LLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.L.LLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.L.LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLL..LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLL.LL.L.LLLL.LLLLLLLLLLLLLLLL..LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLL.LLL.L.LLLLLL..LLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL
|
||||
..L..L..L...L..L.L.....LL..L..L..LLLL..L.......L.LL...L..LL..LLL...L....L..L.L.....L..LL...L
|
||||
LLLLLL.LLLLLLLLLLLL.LL.LL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL..LLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLL.LLLLLL..LLLLLL.LLLLL
|
||||
LLLLLL.LL.LL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLL
|
||||
LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLL..LLLLLL.LLLLL..LLLLLLLLLLL
|
||||
LL..L.L......L.......L........L.LL.....LL......L...L..L.L...L.LL..L..L......L.L..LL...LL...L
|
||||
LLLLLL.LL.LL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.L..LLLLLL.LLLLLL.LLLLLLL.LLLLLL..L.LLLLLLLLLLLL.LL
|
||||
LLLLLL.LL.LL.LLLLLL.LLLLLLLL.LLLLL.LLLLLL.LL.LLLLLL.LLLLLL.LLL.LLL.LL.LLL..LLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLL.LLLLLL.LLL.LLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL..LLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.L.LLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLL.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLL..LLLLL
|
||||
LLLL.L.LLLLL..LLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLL.L.LLLLL.LLLLLL.LLLLL.LLLL.LLLLLLL
|
||||
LLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLL..L.LLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL..LLLLL.LLLLLL.LLLLL
|
||||
L....L.L.L..LLL.....L....LL...LL....LLLL....LLL.L.......L.....LL.....L..L.LL..LL....L...LL.L
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LL.LLL.L.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LL.LLLLL.L.LLLLLL.LLLLL.LLLLLL.LLLL.
|
||||
LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.L.LLL
|
||||
LLLLLL.LLLLL.LLLL.L.LLLLLLLLLLLLLL.LLLLLL..LLLLLLLL.L.LLLL.LLL.LLL.LLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLL.L.L.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLL...LLLLL.L.LLLL.LLLLLLLLLLLL..LLLL
|
||||
LLLLLL.LL.LL.LLLLLLLLLLLLLLLLLL.LL.LLLLLL.LLLLLLLL..LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL
|
||||
LLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLL.LL.LLLLLL.LLLLLLLLLL.LLL.LLLLLL..LLLL.LLLLLLLLLLLL
|
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.
|
||||
* If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.
|
||||
* Otherwise, the seat's state does not change.
|
||||
*/
|
||||
|
||||
import std.file : exists, readText;
|
||||
import std.stdio: stderr, writeln;
|
||||
import std.string : splitLines;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length != 2) {
|
||||
stderr.writeln("Usage: ./p1 file.name");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
if (!exists(fileName)) {
|
||||
stderr.writeln(fileName, " does not exist");
|
||||
return 2;
|
||||
}
|
||||
|
||||
string[] fileText = fileName.readText.splitLines();
|
||||
char[][] map;
|
||||
foreach (i, line; fileText) {
|
||||
char[] toAdd;
|
||||
foreach (j, c; line) {
|
||||
toAdd ~= c;
|
||||
}
|
||||
map ~= toAdd;
|
||||
}
|
||||
while (iterGen(map)) {}
|
||||
ulong counter;
|
||||
foreach (line; map) {
|
||||
foreach (c; line) {
|
||||
if (c == '#')
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
writeln("Occupied seats: ", counter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool iterGen(ref char[][] baseMap) {
|
||||
bool changed;
|
||||
char[][] map;
|
||||
|
||||
foreach (i, row; baseMap) {
|
||||
char[] toAdd;
|
||||
foreach (j, c; row) {
|
||||
if (c == '.') {
|
||||
toAdd ~= '.';
|
||||
continue;
|
||||
}
|
||||
|
||||
ubyte neighbors;
|
||||
if (i > 0) {
|
||||
if (j > 0)
|
||||
neighbors += baseMap[i-1][j-1] == '#' ? 1 : 0;
|
||||
|
||||
neighbors += baseMap[i-1][j] == '#' ? 1 : 0;
|
||||
|
||||
if (j < row.length-1)
|
||||
neighbors += baseMap[i-1][j+1] == '#' ? 1 : 0;
|
||||
}
|
||||
|
||||
if (i < baseMap.length-1) {
|
||||
if (j > 0)
|
||||
neighbors += baseMap[i+1][j-1] == '#' ? 1 : 0;
|
||||
|
||||
neighbors += baseMap[i+1][j] == '#' ? 1 : 0;
|
||||
|
||||
if (j < row.length-1)
|
||||
neighbors += baseMap[i+1][j+1] == '#' ? 1 : 0;
|
||||
}
|
||||
|
||||
if (j > 0)
|
||||
neighbors += baseMap[i][j-1] == '#' ? 1 : 0;
|
||||
|
||||
if (j < row.length-1)
|
||||
neighbors += baseMap[i][j+1] == '#' ? 1 : 0;
|
||||
|
||||
if (c == 'L' && neighbors == 0) {
|
||||
toAdd ~= '#';
|
||||
changed = true;
|
||||
} else if (c == '#' && neighbors >= 4) {
|
||||
toAdd ~= 'L';
|
||||
changed = true;
|
||||
} else {
|
||||
toAdd ~= c;
|
||||
}
|
||||
}
|
||||
map ~= toAdd;
|
||||
}
|
||||
|
||||
baseMap = map;
|
||||
|
||||
return changed;
|
||||
}
|
@ -0,0 +1,141 @@
|
||||
/*
|
||||
* If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.
|
||||
* If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.
|
||||
* Otherwise, the seat's state does not change.
|
||||
*/
|
||||
|
||||
import std.algorithm.comparison : min;
|
||||
import std.file : exists, readText;
|
||||
import std.stdio: stderr, writeln;
|
||||
import std.string : splitLines;
|
||||
|
||||
int main(string[] args) {
|
||||
if (args.length != 2) {
|
||||
stderr.writeln("Usage: ./p2 file.name");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string fileName = args[1];
|
||||
if (!exists(fileName)) {
|
||||
stderr.writeln(fileName, " does not exist");
|
||||
return 2;
|
||||
}
|
||||
|
||||
string[] fileText = fileName.readText.splitLines();
|
||||
char[][] map;
|
||||
foreach (i, line; fileText) {
|
||||
char[] toAdd;
|
||||
foreach (j, c; line) {
|
||||
toAdd ~= c;
|
||||
}
|
||||
map ~= toAdd;
|
||||
}
|
||||
while (iterGen(map)) {}
|
||||
ulong counter;
|
||||
foreach (line; map) {
|
||||
writeln(line);
|
||||
foreach (c; line) {
|
||||
if (c == '#')
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
writeln("Occupied seats: ", counter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool iterGen(ref char[][] baseMap) {
|
||||
bool changed;
|
||||
char[][] map;
|
||||
|
||||
foreach (i, row; baseMap) {
|
||||
char[] toAdd;
|
||||
foreach (j, c; row) {
|
||||
if (c == '.') {
|
||||
toAdd ~= '.';
|
||||
continue;
|
||||
}
|
||||
|
||||
ubyte neighbors;
|
||||
|
||||
// Go straight up
|
||||
foreach (mod; 1 .. i+1) {
|
||||
char testC = baseMap[i-mod][j];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go straight down
|
||||
foreach (mod; 1 .. baseMap.length-i) {
|
||||
char testC = baseMap[i+mod][j];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go straight right
|
||||
foreach (mod; 1 .. row.length-j) {
|
||||
char testC = baseMap[i][j+mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go straight left
|
||||
foreach (mod; 1 .. j+1) {
|
||||
char testC = baseMap[i][j-mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go down-right
|
||||
foreach (mod; 1 .. min(baseMap.length-i, row.length-j)) {
|
||||
char testC = baseMap[i+mod][j+mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go down-left
|
||||
foreach (mod; 1 .. min(baseMap.length-i, j+1)) {
|
||||
char testC = baseMap[i+mod][j-mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go up-left
|
||||
foreach (mod; 1 .. min(i+1, j+1)) {
|
||||
char testC = baseMap[i-mod][j-mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
// Go up-right
|
||||
foreach (mod; 1 .. min(i+1, row.length-j)) {
|
||||
char testC = baseMap[i-mod][j+mod];
|
||||
neighbors += testC == '#' ? 1 : 0;
|
||||
if ((testC == '#') || (testC == 'L'))
|
||||
break;
|
||||
}
|
||||
|
||||
if (c == 'L' && neighbors == 0) {
|
||||
toAdd ~= '#';
|
||||
changed = true;
|
||||
} else if (c == '#' && neighbors >= 5) {
|
||||
toAdd ~= 'L';
|
||||
changed = true;
|
||||
} else {
|
||||
toAdd ~= c;
|
||||
}
|
||||
}
|
||||
map ~= toAdd;
|
||||
}
|
||||
|
||||
baseMap = map;
|
||||
|
||||
return changed;
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
L.LL.LL.LL
|
||||
LLLLLLL.LL
|
||||
L.L.L..L..
|
||||
LLLL.LL.LL
|
||||
L.LL.LL.LL
|
||||
L.LLLLL.LL
|
||||
..L.L.....
|
||||
LLLLLLLLLL
|
||||
L.LLLLLL.L
|
||||
L.LLLLL.LL
|
@ -0,0 +1,774 @@
|
||||
F99
|
||||
L180
|
||||
W1
|
||||
W3
|
||||
R90
|
||||
E5
|
||||
R180
|
||||
S4
|
||||
F55
|
||||
L90
|
||||
E5
|
||||
S3
|
||||
R180
|
||||
N2
|
||||
W3
|
||||
S1
|
||||
F64
|
||||
W4
|
||||
F76
|
||||
N2
|
||||
F7
|
||||
L180
|
||||
S2
|
||||
E5
|
||||
S2
|
||||
F87
|
||||
N4
|
||||
L90
|
||||
F46
|
||||
R90
|
||||
F47
|
||||
W5
|
||||
N4
|
||||
L270
|
||||
N5
|
||||
F89
|
||||
L180
|
||||
W2
|
||||
N5
|
||||
F69
|
||||
E3
|
||||
L90
|
||||
F73
|
||||
L90
|
||||
N1
|
||||
F28
|
||||
N4
|
||||
F72
|
||||
L90
|
||||
F24
|
||||
R90
|
||||
S1
|
||||
F52
|
||||
L90
|
||||
W2
|
||||