Committing days 1-4
This commit is contained in:
133
01/01-part2.c
Normal file
133
01/01-part2.c
Normal file
@@ -0,0 +1,133 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
// How much memory to allocate for each line
|
||||
#define MAX_LINE_LEN 200
|
||||
|
||||
#define DEFAULT_FILE "input.txt"
|
||||
|
||||
// Returns 0 if a string is not a number (e.g. 'two')
|
||||
// Otherwise, returns the equivilant ascii character digit.
|
||||
// Only works for single digits.
|
||||
// Only accepts lower case.
|
||||
char parse_num(char *str)
|
||||
{
|
||||
const char *num_strings[10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
|
||||
|
||||
// The lengths of the strings above,
|
||||
const uint8_t num_string_lens[10] = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4 };
|
||||
|
||||
bool possible_nums[10] = { [0 ... 9] = true };
|
||||
uint8_t num_idx = 0;
|
||||
uint8_t char_incriment = 0;
|
||||
char current;
|
||||
bool result_still_possible = false;
|
||||
|
||||
for (char_incriment = 0; char_incriment < 6; char_incriment++)
|
||||
{
|
||||
// Grab out next character in the string
|
||||
current = *(str + char_incriment);
|
||||
|
||||
for (num_idx = 0; num_idx < 10; num_idx++)
|
||||
{
|
||||
if (!possible_nums[num_idx]) continue;
|
||||
|
||||
// If we have passed the end of our number string and every character has matched,
|
||||
// then we return our valid character.
|
||||
if (char_incriment == num_string_lens[num_idx] && possible_nums[num_idx]) return (num_idx + '0');
|
||||
|
||||
// If the character is not the letter it should be, disqualify this number.
|
||||
// e.g. if num_idx == 1 and char_incriment == 2, current should equal 'e'
|
||||
// because 'e' is the 3rd number in the word 'one.'
|
||||
if (current != num_strings[num_idx][char_incriment]) possible_nums[num_idx] = false;
|
||||
else result_still_possible = true;
|
||||
}
|
||||
if (!result_still_possible) return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns a string of the next line.
|
||||
// Remember to free() this after you're finished.
|
||||
// Limited by MAX_LINE_LEN (I'm lazy.)
|
||||
char *next_line(FILE *file)
|
||||
{
|
||||
char *strbuf = malloc(sizeof(char) * MAX_LINE_LEN);
|
||||
uint8_t idx = 0;
|
||||
char current = 0;
|
||||
|
||||
while (current != '\n' && current != EOF)
|
||||
{
|
||||
current = fgetc(file);
|
||||
strbuf[idx] = current;
|
||||
idx++;
|
||||
}
|
||||
|
||||
return strbuf;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
// Get filename as an argument
|
||||
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int8_t firstdigit = -1;
|
||||
int8_t lastdigit = -1;
|
||||
int8_t parsed_num = -1;
|
||||
uint32_t sum = 0;
|
||||
char current = 0;
|
||||
char *strbuf = next_line(file);
|
||||
uint8_t strbuf_idx = 0;
|
||||
|
||||
while (current != EOF)
|
||||
{
|
||||
parsed_num = parse_num(strbuf + strbuf_idx);
|
||||
current = strbuf[strbuf_idx++];
|
||||
|
||||
if (current == '\n')
|
||||
{
|
||||
if (lastdigit == -1) lastdigit = firstdigit;
|
||||
sum += (firstdigit * 10) + lastdigit;
|
||||
firstdigit = -1;
|
||||
lastdigit = -1;
|
||||
strbuf_idx = 0;
|
||||
free(strbuf);
|
||||
strbuf = next_line(file);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (parsed_num != 0) current = parsed_num;
|
||||
|
||||
if (current < '0' || current > '9') continue;
|
||||
|
||||
if (firstdigit == -1)
|
||||
{
|
||||
firstdigit = current - '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
lastdigit = current - '0';
|
||||
}
|
||||
}
|
||||
|
||||
printf("Sum: %d\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
57
01/01.c
Normal file
57
01/01.c
Normal file
@@ -0,0 +1,57 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : "input.txt";
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int8_t firstdigit = -1;
|
||||
int8_t lastdigit = -1;
|
||||
uint32_t sum = 0;
|
||||
char current = 0;
|
||||
|
||||
while (current != EOF)
|
||||
{
|
||||
current = fgetc(file);
|
||||
|
||||
if (current == '\n')
|
||||
{
|
||||
if (lastdigit == -1) lastdigit = firstdigit;
|
||||
sum += (firstdigit * 10) + lastdigit;
|
||||
firstdigit = -1;
|
||||
lastdigit = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (current < '0' || current > '9') continue;
|
||||
|
||||
if (firstdigit == -1)
|
||||
{
|
||||
firstdigit = current - '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
lastdigit = current - '0';
|
||||
}
|
||||
}
|
||||
|
||||
printf("Sum: %d\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
60
01/01test.c
Normal file
60
01/01test.c
Normal file
@@ -0,0 +1,60 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
// Returns -1 if a string is not a number (e.g. 'two')
|
||||
// Otherwise, returns the number.
|
||||
// Only works for single digits.
|
||||
// Only accepts lower case.
|
||||
int8_t parse_num(char *str)
|
||||
{
|
||||
const char *num_strings[10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
|
||||
|
||||
// The lengths of the strings above,
|
||||
const uint8_t num_string_lens[10] = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4 };
|
||||
|
||||
bool possible_nums[10] = { [0 ... 9] = true };
|
||||
uint8_t num_idx = 0;
|
||||
uint8_t char_incriment = 0;
|
||||
char current;
|
||||
bool result_still_possible = false;
|
||||
|
||||
for (char_incriment = 0; char_incriment < 6; char_incriment++)
|
||||
{
|
||||
// Grab out next character in the string
|
||||
current = *(str + char_incriment);
|
||||
|
||||
for (num_idx = 0; num_idx < 10; num_idx++)
|
||||
{
|
||||
if (!possible_nums[num_idx]) continue;
|
||||
|
||||
// If we have passed the end of our number string and every character has matched,
|
||||
// then we return our valid character.
|
||||
if (char_incriment == num_string_lens[num_idx] && possible_nums[num_idx]) return num_idx;
|
||||
|
||||
// If the character is not the letter it should be, disqualify this number.
|
||||
// e.g. if num_idx == 1 and char_incriment == 2, current should equal 'e'
|
||||
// because 'e' is the 3rd number in the word 'one.'
|
||||
if (current != num_strings[num_idx][char_incriment]) possible_nums[num_idx] = false;
|
||||
else result_still_possible = true;
|
||||
}
|
||||
if (!result_still_possible) return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
const char *num_strings[10] = { "zerorr", "oneqw", "twoqw", "threere", "fourer", "fiveer", "sixer", "sevener", "eighter", "nineer" };
|
||||
|
||||
uint8_t i = 0;
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
printf("%d\n", parse_num(num_strings[i]));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
1000
01/input.txt
Normal file
1000
01/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
4
01/input2.txt
Normal file
4
01/input2.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
zero1
|
||||
1zero
|
||||
asdfone
|
||||
asdfoneasdfoneasdf
|
||||
126
02/02-part2.c
Normal file
126
02/02-part2.c
Normal file
@@ -0,0 +1,126 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define STRBUF_SIZE 200
|
||||
|
||||
enum color
|
||||
{
|
||||
color_red = 0,
|
||||
color_green,
|
||||
color_blue
|
||||
};
|
||||
|
||||
typedef struct gameresult_t
|
||||
{
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
} gameresult;
|
||||
|
||||
gameresult parse_hand(char *str)
|
||||
{
|
||||
gameresult result = {0};
|
||||
uint8_t num = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
num = 0;
|
||||
while (*str != ' ')
|
||||
{
|
||||
num = (num * 10) + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
|
||||
str++;
|
||||
|
||||
switch(*str)
|
||||
{
|
||||
case 'r':
|
||||
result.red += num;
|
||||
str += 3;
|
||||
break;
|
||||
case 'g':
|
||||
result.green += num;
|
||||
str += 5;
|
||||
break;
|
||||
case 'b':
|
||||
result.blue += num;
|
||||
str += 4;
|
||||
break;
|
||||
}
|
||||
|
||||
if (*str != ',') return result;
|
||||
|
||||
str += 2;
|
||||
}
|
||||
}
|
||||
|
||||
gameresult parse_game_maxes(char *str)
|
||||
{
|
||||
// Keeps track of the most cubes of a single color seen any hand
|
||||
gameresult maxes = {0};
|
||||
|
||||
// Keeps result from the most recent hand
|
||||
gameresult result = {0};
|
||||
|
||||
while (*str != ':') str++;
|
||||
|
||||
while (*str == ':' || *str == ';')
|
||||
{
|
||||
str += 2;
|
||||
result = parse_hand(str);
|
||||
if (result.red > maxes.red) maxes.red = result.red;
|
||||
if (result.green > maxes.green) maxes.green = result.green;
|
||||
if (result.blue > maxes.blue) maxes.blue = result.blue;
|
||||
while (*str != ';' && *str != '\n') str++;
|
||||
}
|
||||
|
||||
return maxes;
|
||||
}
|
||||
|
||||
bool game_is_valid(char *str)
|
||||
{
|
||||
gameresult maxes = {0};
|
||||
|
||||
maxes = parse_game_maxes(str);
|
||||
|
||||
return (maxes.red <= 12 && maxes.green <= 13 && maxes.blue <= 14);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : "input.txt";
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char strbuf[STRBUF_SIZE] = {0};
|
||||
gameresult maxes = {0};
|
||||
uint8_t gamenum = 1;
|
||||
uint32_t power = 0;
|
||||
uint32_t sum = 0;
|
||||
|
||||
while (fgets(strbuf, 200, file))
|
||||
{
|
||||
maxes = parse_game_maxes(strbuf);
|
||||
power = maxes.red * maxes.green * maxes.blue;
|
||||
sum += power;
|
||||
}
|
||||
|
||||
printf("Sum: %d\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
124
02/02.c
Normal file
124
02/02.c
Normal file
@@ -0,0 +1,124 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define STRBUF_SIZE 200
|
||||
|
||||
enum color
|
||||
{
|
||||
color_red = 0,
|
||||
color_green,
|
||||
color_blue
|
||||
};
|
||||
|
||||
typedef struct gameresult_t
|
||||
{
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
} gameresult;
|
||||
|
||||
gameresult parse_hand(char *str)
|
||||
{
|
||||
gameresult result = {0};
|
||||
uint8_t num = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
num = 0;
|
||||
while (*str != ' ')
|
||||
{
|
||||
num = (num * 10) + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
|
||||
str++;
|
||||
|
||||
switch(*str)
|
||||
{
|
||||
case 'r':
|
||||
result.red += num;
|
||||
str += 3;
|
||||
break;
|
||||
case 'g':
|
||||
result.green += num;
|
||||
str += 5;
|
||||
break;
|
||||
case 'b':
|
||||
result.blue += num;
|
||||
str += 4;
|
||||
break;
|
||||
}
|
||||
|
||||
if (*str != ',') return result;
|
||||
|
||||
str += 2;
|
||||
}
|
||||
}
|
||||
|
||||
gameresult parse_game_maxes(char *str)
|
||||
{
|
||||
// Keeps track of the most cubes of a single color seen any hand
|
||||
gameresult maxes = {0};
|
||||
|
||||
// Keeps result from the most recent hand
|
||||
gameresult result = {0};
|
||||
|
||||
while (*str != ':') str++;
|
||||
|
||||
while (*str == ':' || *str == ';')
|
||||
{
|
||||
str += 2;
|
||||
result = parse_hand(str);
|
||||
if (result.red > maxes.red) maxes.red = result.red;
|
||||
if (result.green > maxes.green) maxes.green = result.green;
|
||||
if (result.blue > maxes.blue) maxes.blue = result.blue;
|
||||
while (*str != ';' && *str != '\n') str++;
|
||||
}
|
||||
|
||||
return maxes;
|
||||
}
|
||||
|
||||
bool game_is_valid(char *str)
|
||||
{
|
||||
gameresult maxes = {0};
|
||||
|
||||
maxes = parse_game_maxes(str);
|
||||
|
||||
return (maxes.red <= 12 && maxes.green <= 13 && maxes.blue <= 14);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : "input.txt";
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char strbuf[STRBUF_SIZE] = {0};
|
||||
uint8_t gamenum = 1;
|
||||
uint32_t sum = 0;
|
||||
|
||||
while (fgets(strbuf, 200, file))
|
||||
{
|
||||
if (game_is_valid(strbuf))
|
||||
sum += gamenum;
|
||||
gamenum++;
|
||||
}
|
||||
|
||||
printf("Sum: %d\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
100
02/input.txt
Normal file
100
02/input.txt
Normal file
@@ -0,0 +1,100 @@
|
||||
Game 1: 7 blue, 9 red, 1 green; 8 green; 10 green, 5 blue, 3 red; 11 blue, 5 red, 1 green
|
||||
Game 2: 7 green, 3 blue; 20 blue, 4 green; 6 red, 13 blue, 2 green
|
||||
Game 3: 11 blue, 3 red, 1 green; 15 red, 9 blue, 3 green; 11 blue, 4 red, 4 green; 1 red, 2 green, 14 blue; 18 blue, 4 green, 10 red
|
||||
Game 4: 3 red, 7 blue; 3 blue, 2 red, 2 green; 2 green, 1 red, 1 blue; 3 green, 5 blue, 5 red; 7 blue, 1 green, 1 red; 2 green, 7 blue
|
||||
Game 5: 1 blue, 2 red, 1 green; 6 blue, 3 green, 2 red; 2 blue
|
||||
Game 6: 5 green, 5 red, 5 blue; 9 blue, 6 green, 8 red; 7 green, 3 red, 15 blue; 9 blue, 9 green; 10 red, 12 blue, 4 green; 9 blue, 1 red, 9 green
|
||||
Game 7: 8 blue, 9 green, 16 red; 9 green, 9 blue; 10 red, 5 blue, 8 green; 9 green, 17 red, 2 blue; 1 blue, 18 red, 8 green; 3 green, 8 blue, 14 red
|
||||
Game 8: 6 green, 8 blue, 16 red; 10 green, 1 blue, 4 red; 2 blue, 15 red, 10 green; 7 green, 9 red, 2 blue; 17 red, 4 green, 7 blue
|
||||
Game 9: 5 blue, 1 green, 4 red; 2 green, 6 red, 12 blue; 2 green, 7 blue, 1 red; 12 blue, 2 green, 1 red
|
||||
Game 10: 1 red, 16 blue, 18 green; 14 green, 13 blue; 4 green, 7 blue; 5 red, 16 blue, 11 green; 14 green, 2 red, 5 blue; 10 blue, 3 red, 6 green
|
||||
Game 11: 4 green, 2 blue, 17 red; 1 green, 2 red, 1 blue; 5 blue, 14 red
|
||||
Game 12: 7 red, 7 green; 7 blue, 7 green, 8 red; 14 red, 7 blue, 5 green
|
||||
Game 13: 1 red, 7 green; 7 green, 5 blue; 4 blue, 1 red; 14 green, 5 blue, 2 red; 3 red, 5 green; 10 green, 2 blue, 3 red
|
||||
Game 14: 4 blue, 7 red; 10 red, 6 blue; 1 green, 3 red; 1 green, 12 blue, 8 red; 1 red, 1 green, 6 blue; 1 green, 6 red
|
||||
Game 15: 4 green, 6 blue, 12 red; 7 blue, 6 red, 4 green; 1 green; 16 blue, 5 red, 5 green; 11 blue, 7 red, 2 green
|
||||
Game 16: 6 blue, 2 red, 4 green; 7 green, 2 blue; 2 red, 4 green; 3 green, 4 blue, 1 red
|
||||
Game 17: 9 green, 9 red, 3 blue; 9 green, 4 blue, 5 red; 10 green, 2 blue, 3 red
|
||||
Game 18: 2 red, 1 green; 3 red, 9 blue, 1 green; 4 red, 10 blue; 6 blue, 2 green, 5 red; 12 blue, 5 red, 2 green
|
||||
Game 19: 2 blue, 15 green, 9 red; 9 blue, 15 red, 4 green; 9 green, 4 blue, 4 red; 2 blue, 12 green, 16 red
|
||||
Game 20: 5 blue, 2 green, 9 red; 10 blue, 2 green, 6 red; 1 red, 13 green, 6 blue; 15 green, 13 blue, 12 red; 13 blue, 5 green
|
||||
Game 21: 3 red, 1 green, 10 blue; 8 green, 10 blue, 5 red; 12 blue, 5 red, 2 green
|
||||
Game 22: 4 blue, 6 red, 2 green; 5 blue, 16 red; 13 red; 19 red, 1 green, 6 blue; 11 red, 2 green, 5 blue
|
||||
Game 23: 5 red, 4 green, 2 blue; 7 blue, 3 green; 5 blue, 4 red, 1 green; 2 blue, 3 red, 2 green
|
||||
Game 24: 1 green; 4 red, 6 green, 2 blue; 6 green, 4 red; 8 blue, 3 red, 2 green; 1 blue, 2 red
|
||||
Game 25: 4 green, 2 blue, 12 red; 10 blue, 1 red, 2 green; 3 green, 12 blue; 7 green, 12 red, 3 blue; 2 green, 6 blue, 13 red; 3 green, 14 red, 9 blue
|
||||
Game 26: 8 red, 8 blue, 4 green; 5 red, 14 blue, 11 green; 3 green, 4 blue; 3 red, 10 green, 8 blue
|
||||
Game 27: 14 red, 5 blue, 6 green; 1 red, 1 green; 3 red, 1 blue, 4 green
|
||||
Game 28: 11 green, 9 blue; 3 green, 6 blue, 7 red; 9 blue, 5 red, 10 green; 8 red, 5 blue, 10 green; 10 green, 9 red, 2 blue
|
||||
Game 29: 12 red, 1 green, 7 blue; 4 red, 4 blue; 12 red, 1 blue
|
||||
Game 30: 3 red, 9 blue; 7 blue, 3 green, 2 red; 1 green, 3 blue, 8 red; 15 blue, 8 red, 1 green; 1 red, 2 green, 6 blue; 2 blue, 3 green, 15 red
|
||||
Game 31: 10 red, 14 green, 9 blue; 6 blue, 7 red; 16 red, 3 blue, 5 green; 11 red, 7 blue, 1 green; 10 green, 8 red, 3 blue; 14 green, 6 red, 8 blue
|
||||
Game 32: 1 red, 7 blue, 4 green; 5 green, 6 blue; 4 blue, 2 green; 2 blue, 3 green
|
||||
Game 33: 2 red, 4 green; 1 green, 12 blue; 1 red, 4 green, 13 blue; 3 red, 11 blue; 8 blue, 3 red, 4 green; 4 green, 2 blue, 3 red
|
||||
Game 34: 9 green, 3 red, 10 blue; 2 red, 5 green, 7 blue; 8 green, 3 red
|
||||
Game 35: 3 blue, 1 red; 1 red, 1 green, 3 blue; 13 red, 1 blue; 3 blue, 3 green, 14 red; 1 blue; 3 blue, 2 green, 3 red
|
||||
Game 36: 5 red, 10 blue; 10 green, 4 red, 8 blue; 6 blue, 9 green, 9 red
|
||||
Game 37: 1 red, 3 green, 1 blue; 7 blue, 4 red; 11 red, 6 blue, 2 green; 1 green, 10 red, 3 blue; 2 blue, 1 green, 10 red; 10 red, 4 blue
|
||||
Game 38: 13 red, 6 blue, 1 green; 8 red, 4 green, 8 blue; 13 green, 7 red, 3 blue; 6 red, 12 green, 2 blue; 7 blue, 15 green, 5 red; 13 green, 2 blue, 11 red
|
||||
Game 39: 1 blue, 5 green, 6 red; 1 green, 8 red, 4 blue; 8 red, 10 green, 6 blue; 2 blue, 1 red, 4 green; 3 blue, 2 red, 7 green; 8 red, 6 green, 2 blue
|
||||
Game 40: 6 blue, 20 green, 12 red; 7 blue, 10 red, 7 green; 5 red, 2 green, 8 blue; 2 blue, 1 red, 7 green; 11 green, 3 red; 9 red, 9 blue, 6 green
|
||||
Game 41: 15 red, 5 green, 7 blue; 4 red, 7 blue; 12 green, 7 blue; 12 red, 15 green, 8 blue
|
||||
Game 42: 2 green, 12 blue, 4 red; 2 blue, 2 red, 8 green; 10 blue, 2 red, 11 green; 1 green, 1 red, 5 blue
|
||||
Game 43: 14 blue, 2 green, 11 red; 10 red, 8 blue; 15 blue; 1 green, 16 blue, 6 red; 3 red, 17 blue; 3 blue, 1 green
|
||||
Game 44: 3 blue, 4 green, 9 red; 7 green, 15 red, 2 blue; 8 green, 8 red; 3 green, 10 blue, 6 red
|
||||
Game 45: 2 green, 14 red; 1 blue, 16 red, 5 green; 3 green, 5 red; 1 blue, 5 green, 2 red
|
||||
Game 46: 2 red, 13 blue, 6 green; 8 green, 1 blue; 8 blue, 6 green, 2 red; 6 green, 3 blue; 2 green, 7 blue
|
||||
Game 47: 1 green, 11 blue, 6 red; 3 green, 4 blue, 4 red; 6 red, 13 blue; 6 blue, 5 green, 6 red
|
||||
Game 48: 1 red, 1 green; 6 red, 3 blue, 2 green; 3 green, 6 red
|
||||
Game 49: 10 blue, 15 green, 5 red; 5 green, 10 red; 4 green, 12 red, 5 blue; 7 red, 9 green, 7 blue; 17 green, 3 blue, 4 red
|
||||
Game 50: 7 red, 8 green; 11 red, 1 green, 2 blue; 12 red, 4 green; 15 red, 2 green; 5 red, 2 blue, 6 green; 1 green, 3 red
|
||||
Game 51: 7 red, 4 blue, 1 green; 10 red, 7 blue; 11 blue, 8 red
|
||||
Game 52: 3 green, 2 blue, 1 red; 1 red, 1 blue, 2 green; 3 green, 12 blue; 9 blue, 3 red; 6 blue, 2 red, 2 green; 1 green, 1 red, 14 blue
|
||||
Game 53: 7 red, 1 green, 4 blue; 5 blue, 5 red; 7 red, 2 blue
|
||||
Game 54: 3 red, 8 green, 12 blue; 15 red, 4 green, 16 blue; 1 blue, 4 green, 5 red; 5 green, 8 red, 10 blue; 14 red, 7 blue
|
||||
Game 55: 8 green, 18 blue, 2 red; 4 red, 15 green, 19 blue; 10 blue, 8 red, 1 green
|
||||
Game 56: 13 blue, 2 red, 5 green; 1 blue, 13 green, 5 red; 3 red, 1 blue, 10 green; 5 red, 14 blue, 1 green; 11 green, 6 blue, 6 red; 11 green, 7 blue, 8 red
|
||||
Game 57: 1 green; 1 blue; 1 blue, 6 red, 1 green; 1 green, 3 red; 1 green, 6 red
|
||||
Game 58: 14 blue, 7 red; 4 green, 10 red; 5 blue, 7 green, 6 red; 3 green, 6 red, 19 blue
|
||||
Game 59: 3 green, 5 red, 3 blue; 1 blue, 5 green, 3 red; 3 blue, 7 red, 4 green
|
||||
Game 60: 6 blue; 11 blue, 2 red, 6 green; 1 red, 3 blue; 2 green, 1 blue, 2 red
|
||||
Game 61: 5 red, 6 green, 8 blue; 8 blue, 5 green, 7 red; 6 green, 3 red, 7 blue; 8 green, 7 blue
|
||||
Game 62: 9 green; 4 red, 5 green; 3 green, 14 blue; 4 green, 3 red, 6 blue
|
||||
Game 63: 6 green, 12 blue; 1 red, 12 blue; 1 green, 13 blue; 3 blue, 8 green; 7 blue, 2 green
|
||||
Game 64: 2 green, 11 red, 1 blue; 2 red; 3 green; 2 green, 6 red; 1 blue, 6 red
|
||||
Game 65: 9 green, 1 blue; 5 green, 14 red, 1 blue; 11 green, 6 blue, 2 red; 8 red, 1 green; 9 green, 11 red, 5 blue; 18 green, 11 red, 1 blue
|
||||
Game 66: 5 green, 17 red; 1 blue, 4 green, 2 red; 3 green, 2 blue, 13 red; 4 red, 1 green; 2 green, 18 red; 18 red, 1 green, 2 blue
|
||||
Game 67: 7 green; 2 blue, 1 green; 1 blue, 6 green, 1 red; 3 green, 3 blue
|
||||
Game 68: 7 blue, 18 red, 16 green; 7 blue, 6 red, 3 green; 5 blue, 4 red; 12 red, 20 green, 7 blue; 5 green, 4 blue
|
||||
Game 69: 5 red, 19 green, 2 blue; 12 green, 7 red; 7 red, 10 green; 2 blue, 1 red, 1 green
|
||||
Game 70: 8 red, 2 green, 14 blue; 1 green, 12 red, 3 blue; 2 green, 1 blue, 18 red; 10 red, 15 blue, 1 green; 2 green, 1 red, 14 blue; 1 green, 12 blue, 8 red
|
||||
Game 71: 11 green, 9 red; 17 red, 1 blue, 9 green; 14 green, 1 red, 1 blue; 6 green, 11 red; 3 red, 14 green; 1 blue, 12 green
|
||||
Game 72: 4 red, 3 blue, 16 green; 12 green, 5 red, 4 blue; 7 red, 4 blue, 12 green
|
||||
Game 73: 1 blue; 1 green, 10 blue, 1 red; 1 blue, 1 red, 1 green; 11 blue, 1 green, 1 red; 10 blue
|
||||
Game 74: 12 red, 3 green; 11 red, 1 blue; 19 red, 1 blue; 3 green, 1 blue; 5 red, 1 blue; 5 red, 1 blue, 2 green
|
||||
Game 75: 9 blue, 4 green; 1 green, 1 blue, 5 red; 6 blue, 8 red, 3 green; 10 blue, 2 green, 6 red; 3 green, 3 red, 3 blue; 4 green, 7 red, 8 blue
|
||||
Game 76: 1 green, 13 blue, 2 red; 1 green, 15 blue; 8 red, 1 green, 10 blue; 3 blue, 6 red
|
||||
Game 77: 9 red, 2 green, 11 blue; 6 red, 5 blue, 2 green; 6 blue, 9 red, 1 green; 4 blue, 5 red; 13 blue
|
||||
Game 78: 13 blue, 4 red, 2 green; 7 red, 2 green, 8 blue; 6 red, 20 blue, 4 green; 7 red, 3 green, 14 blue; 15 blue, 2 red, 3 green
|
||||
Game 79: 2 red, 10 blue, 6 green; 4 blue, 3 red, 3 green; 3 red, 5 blue, 3 green; 1 blue, 4 green, 1 red; 1 red, 3 green, 1 blue; 1 blue, 6 green
|
||||
Game 80: 2 green, 1 blue, 3 red; 2 green, 2 red; 1 green, 4 red, 1 blue; 4 red, 3 green
|
||||
Game 81: 1 red, 3 green; 11 green; 4 green, 6 red; 1 red, 1 blue, 13 green; 11 green, 1 blue
|
||||
Game 82: 15 green, 3 red, 9 blue; 3 blue, 7 green, 3 red; 3 blue, 11 green; 9 blue, 3 red, 9 green; 5 blue, 1 green, 1 red; 4 blue, 9 green, 1 red
|
||||
Game 83: 5 red, 1 blue; 17 red, 1 green, 6 blue; 3 blue, 11 red; 7 blue, 4 red; 1 blue, 12 red, 1 green; 1 red, 1 green, 1 blue
|
||||
Game 84: 6 red, 7 green, 3 blue; 2 blue, 7 red, 15 green; 1 blue, 5 red, 3 green; 10 red, 1 blue, 4 green; 4 green, 2 blue, 4 red; 9 red, 11 green
|
||||
Game 85: 1 green, 10 red; 10 red, 2 blue, 3 green; 2 blue, 6 red; 1 blue, 16 red; 8 red, 2 green; 13 red, 4 green
|
||||
Game 86: 3 blue, 2 red, 9 green; 2 green, 6 red, 8 blue; 2 red, 7 blue, 8 green
|
||||
Game 87: 14 red, 1 green, 2 blue; 9 blue, 11 green, 7 red; 13 green, 5 blue, 1 red; 12 red, 7 blue, 3 green; 6 red, 8 blue, 3 green
|
||||
Game 88: 7 blue, 2 green, 14 red; 7 red, 4 green, 16 blue; 6 green, 6 blue, 2 red; 1 red, 7 green, 2 blue
|
||||
Game 89: 3 red, 5 blue, 3 green; 4 blue, 2 green, 14 red; 17 red, 1 blue
|
||||
Game 90: 9 red, 1 blue; 7 red; 12 red, 1 green, 1 blue
|
||||
Game 91: 12 green, 16 blue, 5 red; 18 green, 11 blue, 3 red; 5 green, 6 blue, 2 red; 13 blue, 10 green; 3 red, 2 blue
|
||||
Game 92: 7 red, 10 green, 13 blue; 4 green, 9 blue, 1 red; 3 green, 9 red, 13 blue
|
||||
Game 93: 2 blue, 2 red, 6 green; 3 red, 14 green; 13 green, 3 red, 3 blue; 3 red, 8 green; 13 green; 13 green, 1 red, 2 blue
|
||||
Game 94: 12 red, 5 green, 2 blue; 5 blue, 12 red; 5 blue, 2 red, 9 green; 10 red, 8 green, 8 blue; 7 red, 8 green; 3 blue, 6 green, 5 red
|
||||
Game 95: 7 green, 5 red, 3 blue; 14 green, 3 red, 5 blue; 6 green, 1 blue; 10 green, 2 red, 5 blue; 4 blue, 14 green, 4 red
|
||||
Game 96: 2 green, 2 blue, 2 red; 5 blue, 2 red; 2 blue, 1 green; 1 green, 1 red
|
||||
Game 97: 5 green, 6 red; 6 red, 5 green; 4 red, 4 blue; 1 blue, 4 green, 3 red; 1 green, 8 red; 2 red, 9 green, 5 blue
|
||||
Game 98: 1 red, 3 blue; 3 green; 1 red, 4 green; 1 red, 4 blue, 3 green; 2 blue, 4 green, 1 red
|
||||
Game 99: 8 blue, 3 green; 1 green, 3 red; 2 green, 5 blue, 7 red; 5 red, 9 blue, 1 green; 3 green, 6 red, 7 blue; 3 green, 6 blue, 9 red
|
||||
Game 100: 13 green, 9 blue, 4 red; 2 green, 2 red, 15 blue; 1 red, 1 green; 9 green, 1 red
|
||||
3
02/input2.txt
Normal file
3
02/input2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Game 1: 7 blue, 9 red, 1 green; 8 green; 10 green, 5 blue, 3 red; 11 blue, 5 red, 1 green
|
||||
Game 2: 7 green, 3 blue; 20 blue, 4 green; 6 red, 13 blue, 2 green
|
||||
Game 3: 11 blue, 3 red, 1 green; 15 red, 9 blue, 3 green; 11 blue, 4 red, 4 green; 1 red, 2 green, 14 blue; 18 blue, 4 green, 10 red
|
||||
158
03/03-part2.c
Normal file
158
03/03-part2.c
Normal file
@@ -0,0 +1,158 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define STRBUF_SIZE 200
|
||||
#define DEFAULT_FILE "input.txt"
|
||||
#define ISDIGIT(X) (X >= '0' && X <= '9')
|
||||
|
||||
// Parses a found number.
|
||||
// The provided location can be any digit of the
|
||||
// number; this function will automatically
|
||||
// seek the first digit before processing.
|
||||
// Erases numbers as they are processed.
|
||||
uint16_t parse_num_at(char *str, uint8_t idx)
|
||||
{
|
||||
|
||||
// Check input
|
||||
if (str[idx] < '0' || str[idx] > '9') return 0;
|
||||
|
||||
// Find first digit of number
|
||||
while (ISDIGIT(str[idx]) && idx) idx--;
|
||||
if (!ISDIGIT(str[idx])) idx++;
|
||||
|
||||
uint16_t num = 0;
|
||||
|
||||
// Add up all digits
|
||||
while (ISDIGIT(str[idx]))
|
||||
{
|
||||
num = (num * 10) + (str[idx] - '0');
|
||||
// Erase the number to make sure we don't count it twice
|
||||
str[idx] = '.';
|
||||
idx++;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
// If the character is a * with two adjacent numbers,
|
||||
// returns the gear ratio. Returns zero if the symbol
|
||||
// is not a gear.
|
||||
uint64_t get_gear_ratio( uint8_t idx,
|
||||
char *above,
|
||||
char *current,
|
||||
char *below)
|
||||
{
|
||||
char *above_copy = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *current_copy = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *below_copy = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
|
||||
memcpy(above_copy, above, STRBUF_SIZE);
|
||||
memcpy(current_copy, current, STRBUF_SIZE);
|
||||
memcpy(below_copy, below, STRBUF_SIZE);
|
||||
|
||||
uint16_t nums[8] = {0};
|
||||
|
||||
if (idx) nums[0] = parse_num_at(above_copy, idx - 1);
|
||||
nums[1] = parse_num_at(above_copy, idx);
|
||||
nums[2] = parse_num_at(above_copy, idx + 1);
|
||||
|
||||
nums[3] = parse_num_at(current_copy, idx + 1);
|
||||
nums[4] = parse_num_at(current_copy, idx - 1);
|
||||
|
||||
if (idx) nums[5] = parse_num_at(below_copy, idx - 1);
|
||||
nums[6] = parse_num_at(below_copy, idx);
|
||||
nums[7] = parse_num_at(below_copy, idx + 1);
|
||||
|
||||
free(above_copy);
|
||||
free(current_copy);
|
||||
free(below_copy);
|
||||
|
||||
uint8_t i = 0;
|
||||
uint16_t num1 = 0;
|
||||
uint16_t num2 = 0;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
// More than 2 adjacent numbers
|
||||
if (nums[i] && num1 && num2) return 0;
|
||||
|
||||
// The second number
|
||||
if (nums[i] && num1) num2 = nums[i];
|
||||
|
||||
// The first number
|
||||
else if (nums[i]) num1 = nums[i];
|
||||
}
|
||||
|
||||
return num1 * num2;
|
||||
}
|
||||
|
||||
// Search through a line of *current for symbols.
|
||||
uint64_t parse_line(char *above, char *current, char *below)
|
||||
{
|
||||
uint64_t sum = 0;
|
||||
uint8_t idx;
|
||||
char c;
|
||||
|
||||
for (idx = 0; current[idx] != 0; idx++)
|
||||
{
|
||||
c = current[idx];
|
||||
if (c == '*')
|
||||
{
|
||||
// We've found a symbol,
|
||||
// add up all numbers around it
|
||||
sum += get_gear_ratio(idx, above, current, below);
|
||||
}
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *above = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *current = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *below = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
|
||||
memset(above, '.', STRBUF_SIZE);
|
||||
fgets(current, STRBUF_SIZE, file);
|
||||
|
||||
uint64_t sum = 0;
|
||||
|
||||
while (fgets(below, 200, file))
|
||||
{
|
||||
sum += parse_line(above, current, below);
|
||||
|
||||
free(above);
|
||||
above = current;
|
||||
current = below;
|
||||
below = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
memset(below, '.', STRBUF_SIZE);
|
||||
}
|
||||
|
||||
// Process the last line of the file
|
||||
sum += parse_line(above, current, below);
|
||||
|
||||
printf("Sum: %lud\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
130
03/03.c
Normal file
130
03/03.c
Normal file
@@ -0,0 +1,130 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define STRBUF_SIZE 200
|
||||
#define DEFAULT_FILE "input.txt"
|
||||
#define ISDIGIT(X) (X >= '0' && X <= '9')
|
||||
|
||||
// Parses a found number.
|
||||
// The provided location can be any digit of the
|
||||
// number; this function will automatically
|
||||
// seek the first digit before processing.
|
||||
// Erases numbers as they are processed.
|
||||
uint16_t parse_num_at(char *str, uint8_t idx)
|
||||
{
|
||||
|
||||
// Check input
|
||||
if (str[idx] < '0' || str[idx] > '9') return 0;
|
||||
|
||||
// Find first digit of number
|
||||
while (ISDIGIT(str[idx]) && idx) idx--;
|
||||
if (!ISDIGIT(str[idx])) idx++;
|
||||
|
||||
uint16_t num = 0;
|
||||
|
||||
// Add up all digits
|
||||
while (ISDIGIT(str[idx]))
|
||||
{
|
||||
num = (num * 10) + (str[idx] - '0');
|
||||
// Erase the number to make sure we don't count it twice
|
||||
str[idx] = '.';
|
||||
idx++;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
// Returns the sum of all numbers around a symbol,
|
||||
// including diagonals.
|
||||
uint16_t search_numbers_around( uint8_t idx,
|
||||
char *above,
|
||||
char *current,
|
||||
char *below)
|
||||
{
|
||||
uint16_t sum = 0;
|
||||
if (idx) sum += parse_num_at(above, idx - 1);
|
||||
sum += parse_num_at(above, idx);
|
||||
sum += parse_num_at(above, idx + 1);
|
||||
|
||||
sum += parse_num_at(current, idx + 1);
|
||||
sum += parse_num_at(current, idx - 1);
|
||||
|
||||
if (idx) sum += parse_num_at(below, idx - 1);
|
||||
sum += parse_num_at(below, idx);
|
||||
sum += parse_num_at(below, idx + 1);
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
// Search through a line of *current for symbols.
|
||||
// returns the sum for that line (erases numbers as
|
||||
// they are processed.)
|
||||
uint16_t parse_line(char *above, char *current, char *below)
|
||||
{
|
||||
uint16_t sum = 0;
|
||||
uint8_t idx;
|
||||
char c;
|
||||
|
||||
for (idx = 0; current[idx] != 0; idx++)
|
||||
{
|
||||
c = current[idx];
|
||||
if (!ISDIGIT(c) && c != '.' && c != '\n')
|
||||
{
|
||||
// We've found a symbol,
|
||||
// add up all numbers around it
|
||||
sum += search_numbers_around(idx, above, current, below);
|
||||
}
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *above = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *current = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
char *below = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
|
||||
memset(above, '.', STRBUF_SIZE);
|
||||
fgets(current, STRBUF_SIZE, file);
|
||||
|
||||
uint32_t sum = 0;
|
||||
|
||||
while (fgets(below, 200, file))
|
||||
{
|
||||
sum += parse_line(above, current, below);
|
||||
|
||||
free(above);
|
||||
above = current;
|
||||
current = below;
|
||||
below = malloc(sizeof(char) * STRBUF_SIZE);
|
||||
memset(below, '.', STRBUF_SIZE);
|
||||
}
|
||||
|
||||
// Process the last line of the file
|
||||
sum += parse_line(above, current, below);
|
||||
|
||||
printf("Sum: %d\n", sum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
140
03/input.txt
Normal file
140
03/input.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
.854...........................................................................362...........271...732........838.........24................
|
||||
...*.............................117*...........459........767*648....#.........*...................................$...&..=................
|
||||
....970.........368.124.+............57................653...........723.....366....*443..60.........536....441....45..879.....789...*......
|
||||
...........749*...-...+..330.....................215%...*................725.....953........%.................*............639......331.419.
|
||||
.......706.....59.............*....=...262.............678...........857.*............189....................912.+589.846*...*..............
|
||||
..........*................393.59..418....*................151...........594...........*....584*258.......................17.997............
|
||||
.......774....275........................777........841..............988.........121....908.........86.....482..295....................@....
|
||||
.110..........%.....605..@.......305*18...............*....740.............840..*................52*.......*...........100...........250....
|
||||
...........*..............856..............412.........761....*....344....*.....505.....................121......709...-....-...............
|
||||
......980.269..189+............701..............22...$........343..*...684..............-375......223........97.*..........890......443.....
|
||||
..904*..................555.....*.......38.....*....207............773.......................824.....*.......*..../....618..................
|
||||
....................355*........362....*......442.$..........613...........%770.......526.....*.......418.....283..76....*....862...........
|
||||
...450....*292..............735.....149...........143..........*...458...........279.........43..769...................$..48.....*..........
|
||||
....*..413.........983*....*.................679.......642....214...#........107*......=.........*.....%...........276.39......196.889*624..
|
||||
...128.................658.515...890#...................../...........................60..../....528..359.....451...*.....56................
|
||||
...................719...................525.................$502............284-........@...489.................#..287.....@....+..........
|
||||
...849...............*................../.........................282.+649...............217............240.....................833.....930.
|
||||
.......666...179.....986.526................./927......73.....176*...............@...459...........=946..*..488...126.....*.................
|
||||
..........@.....*549.....@...261.....370*951...........+.............114......170.......@...............269............471.891.$859.........
|
||||
.............................../.................646.....-.327........*..237..............452......../......*620..713...............324.....
|
||||
..................=716.....753....................-....431..=.......692.%.......210.......*.......860....208...............81*655....$......
|
||||
......298....17*..........+....................................................*..........603................950.218.$......................
|
||||
................692...54......+778.809........140..*.........249............%.332..............*.........372*......*.328.....=..............
|
||||
.......421.............#..............+........*....493.......*..........589..................286...............254..........458...672...258
|
||||
........*.....949.630.....725...609.........408.............108..............304.517......829.........666*..........724.182...........*.=...
|
||||
.........435./....*..........*.*................580..................@.........*..&..147.-......221*......544..662/....*...........881......
|
||||
..750.............561......568.487.@...935.......*....106...........104......808.......*............333...................&900..............
|
||||
...................................287.$......930.....&.....*528.........332............755..................840../.............583.....209.
|
||||
.371.299.................503.............................632................*.......&...................500........647..193.......-.........
|
||||
....*........-902..2.123..*...912.......775......./...............241........734....90.968.513..66.566...................*..&...............
|
||||
..................*....@.923...*.......*.....289..47.....785..710.......54................*......*....................767....452....=....597
|
||||
.............348.362............607.....889.....#........*....*........*......$904................694...............................241.....
|
||||
....955........*.....559*792............................307..25.........449..............*751.404.....134.....841...........................
|
||||
......&.959...300............446.504.644....692...............................#.................-.....*.......*...758*35....................
|
||||
.908$...*...........&..861...........=.....%....240............-..+..9.514...615.....&....-646.....538...144.751...........899.........545..
|
||||
.......806.270*....946.@...............*..........*.555@....803..322.-............410..........514.................510..10..*.....858..-....
|
||||
...............373....................7.918.....699.........................710.......&...........-.....78%............+....34..............
|
||||
....653...............................................553.......896.......-......&...721....970.............................................
|
||||
.......%...........379..377.....770@.................$.....126....*...712.287....951.........*......984*..........+.............+700........
|
||||
..............924...*....*.............422...................*...233.*........................124...........902....181......................
|
||||
................&....156..363.....*855....*.................884......509..879..755.......$...........*635......*........283.........661.....
|
||||
..559..........................393.........766...789.............683..................461..#......910.........904.........$.%......*.....13.
|
||||
.........=...568.........680/.......................*......*522.#..........................747...........*113................702...952......
|
||||
....*....334...*...392..........910*...............233..189.........219.879............225......521...941...................................
|
||||
.146.981......284.*.......*972......391.....789*...................................628*.....*....*................675.......................
|
||||
..................921..151......................983...............582......983.690.......213.137.268.............*..............24$.........
|
||||
....561....................600........106-...............226..................*.....996.............................681.....768.......852...
|
||||
..............................%............................$................=...963..$.....@............421*305.......*.....*........$......
|
||||
.....923.285*.....961...........*......$812......812..851.............678.29.......*......501.....228..............385...853...........251..
|
||||
.444*...............*...998...99.711.............+.....*......330.....*.........287...........781..+..........%445..........................
|
||||
......$....250=.....965...*.............................113...$......766....$.......941........-......658.............894........351........
|
||||
......335...............463.328*.....411....%.............................981.113......*5.............*...773=.573&....*............$.......
|
||||
..........%348..................460.....*5..517.......583.261.....889@.......................953.....496...............547............620...
|
||||
...299.................367.......................+....*................852.442.796.........*.@...............=................834.....*.....
|
||||
....*....772...487.......................#......938.462.956..41.643...*.....#.....*592....66...809.368..3..549........................772...
|
||||
.566........*.....*320.....498..775.230.193....................*......961.........................*....*.......%283.....406.......495.......
|
||||
........292..585..............*.*.....*..........213...*309...................469..549......413........903................*....29..*........
|
||||
.........*.......@.........551..806...489......................51.655.999*.......*.$.............21*.................300..931....*..595.....
|
||||
......878......62../...........................871......169..=..&..*......235..788...497..........................68....*.......191.........
|
||||
.144.........+.....31............-...............*..623*....428.....955...............*.............424....89....*......728.............*665
|
||||
.............447...............530...203...955.336..........................227........665.......$.........*.....669..............473.......
|
||||
835...................*323..............*./...........=.....24..........*.........................452.......9.............263.........570...
|
||||
......568...803@.....................152.......209.933.....*....877..667.895............548...963......................................*....
|
||||
.......$.........=............................*...........948..-...................171.*........*.605.765..-........90..............992.....
|
||||
..360..........#.476...........................564../.............755*...............+..709...11.....*......909..........696..124%..........
|
||||
........74...73................320.........658......739...=...........484...860*....................................314.....................
|
||||
...=509...*.........79.290........*...222...*.............46...940..............960.....473.....320..........$681......*591..269....../.....
|
||||
........887.94@......*..*.........302...+.784.554+............+......#......455........./............891..........457........*...609.120....
|
||||
....................874.246.....................................+.....228..*....&.........272....%..$.....*377.....*..52..604....%..........
|
||||
.....44.....870*457................905.45......58...............956.........935.551...807..$.....21....356.......317....................%...
|
||||
.........=...................267......*...300=.........543..............398..............#.................$.......................386...745
|
||||
..........145......+............................*......*...........7....$.............64...........646....675..1..930..770.....791.$........
|
||||
................744....462......443&......*389..575..965...805....+..14.......761*578..-...#..776...*..................-........-.......822.
|
||||
....668.484...............*............875.................*.........*....................227...*..908.............215......*.......270.....
|
||||
.......*......771..........318....883......881...........655.@26..130..799.......876..91......28...........699.........807...510............
|
||||
.............-........391*.........*.......+......903..................*.....379.*....@...........713........#............*.................
|
||||
..........+................196..230...........411....*965..682.......873....$.....916....755....&..=.....................296......+958.983..
|
||||
...*.....718.......279........%...............................*.271.............@.......*......932.......621..637.843..................*....
|
||||
..59..........%2...........................................400...*...142.870...746......256..........865*...........%...=.....%...409...761.
|
||||
............@...........122*157...........394........%.444.....207...-......*.........................................434..827...*..........
|
||||
.....266..19.....=..............624.......*........398....*................373...........418...16.....654.878*.................890..........
|
||||
...............487..........884....*......199.227........723......914*411...........228..........%...................872................-...
|
||||
.....937..608.................*....306........$....................................*..................522..309.@16.....*.............765....
|
||||
......#....................128../.................%136....140.................773...114...........33....*....*.........615.....303..........
|
||||
.249.....590..$...949..768.......380......%...996..............833...28...310.#...................*..338.....770...559......................
|
||||
...+.854.../.678..*....................646...*.........................=...&..............#.....422...................#.231...714.122.......
|
||||
......*...........552........................741..........+.......437........455*768..134..69..........*........519.......*........*........
|
||||
.......976.............466......497$.............607......783........*....*.............@..............28........-.........279......394.....
|
||||
............%....857...*....542.........915.543..$...............979...581.66......555....................331...................281.........
|
||||
....715......542..#..20....@........241...*...*.........701.......$...........113...../...193..96*305........&................/...#...489...
|
||||
219*...................................#.599...845.....*.....................$....*.........*...................$....996...240........*.....
|
||||
..........151.520...554.............................665..........................1.398.=450..426.....198.....326.....+..........-....129....
|
||||
.........*...........*.................687..............588....62..........504................................................970...........
|
||||
..........463.....776......804............*..............*.....*..........%....90/...834.790...514...740.770.......667......................
|
||||
....392..................................371...184........906.56....575.............*.............*.........*......*......435.....308.......
|
||||
....*..........*......908..........497...........................-.........884....849............374.....620....727......&........../.......
|
||||
.125........862.326......&........+..........497.....&811.......213.......*...........465....................64.....993.....................
|
||||
......................%.....288...............*...-.......617...........-..677........*.....32..........-907.+........*.....=....48.475.....
|
||||
.........787.........400.....*.......420....884.425......*.....420...727........#27..181.....*....414..............986......114./.....#..404
|
||||
........*.......%...........596....=.*....................863................$................428..*......899.....................114.......
|
||||
.595=.112.737.699................382.888..........................315...@...325..........480........115..*.........-......368...............
|
||||
...........*......+.@......652.*...............................&.....@..182.......219$.........945+.............844...........996....744*...
|
||||
..87......749..535...395..#....339..564.....813....410.........135...........330.......828...........585......................*..........870
|
||||
...+........................$........+..967*.........*....921......321......%................612@....*......................44..............
|
||||
.......764...716............818..327..............578.......*...../...........941..................736..@421........762.........282.........
|
||||
861#......*..@.......982..........*.........+...............714.................*..867.....863........................@....614....=.........
|
||||
........549................*....260.........91................................85.....$........*.803*895..622.$..............*.........684...
|
||||
............770*346.....714.652......145.........270...286..........#.......................66..........*.....337.176.813...483...223*......
|
||||
..........................................*..392..&.........505...957.@.........158...285......881#....497.........+...*....................
|
||||
.........=../..../.....588........227....639............741*..........443..681..........+..153........................335...................
|
||||
........201.671.96......$............*.....................................*........415.......*........-.......155...........848.58&........
|
||||
............................922......92...........180..........................&39...%....208..389......696.....*............=.......883.852
|
||||
....237.........950.........*............80..............................................*....................657.......................*...
|
||||
....../..611.......*.....671...443...971.&....366....381...442....458...$.......589.343.397.....463.......60.......&........125......&......
|
||||
..853...../..945..564...........*......*.......@......-................783..........*.......................*.......28......=.........373...
|
||||
................*.......+843..550..998.973.........+.....208.565..@..............231......292............+.365..172............+............
|
||||
......117......615..................*............299............&..862.895............/86...*....114..552........*...697.....733...388......
|
||||
.....................................212..261........885...............*...903..26*..........50.....-..........158................*.........
|
||||
...../........11..360....748......................67....*272.....320...16.....*....137.905......239......470......................433.......
|
||||
...141........*.....%......+......967........-...%...........243...*.......904............*....*..............88.377......619...............
|
||||
................=.....-668....%.....=.+461..525.....662.....*......196..28..............778...940..400..682...*...*.........*..638*.........
|
||||
779#..113........209...........744....................*...144..811....../...#......................-...*.....297..713.....50................
|
||||
.........$................#.........844...6...........62.......*.............957...&.......112@.......211.............173....989............
|
||||
..749.......$......989..931................*....&............424.........709.......867............590...................*.......*..645......
|
||||
...*..290...573......*............437....227.....53......132............#....471%.............501..%..................733.....270.....=.....
|
||||
..637...*............596............................=....*.......400...............*...........*....................................#.......
|
||||
......958.....757%.........=.........228......624...746.81../.....*........../..718.198..38...184..............*820..774......./830.693.....
|
||||
.........................453...405.=...=....................100.144.......728...........*...................498............$................
|
||||
..616............................*.756...310.........#52.............130.......=........506.....509.779..........723.......182..+...........
|
||||
...*....49.....-..............551..........*................789./.....*......306...613........./......*..491....*...............791..931....
|
||||
...863.....%.72......832.653........*490....814.....984.....=...741...568..........*.................998........567........+........#.......
|
||||
.........171..........*..-.......406...............*....389.....................486.....630............../...............457.576............
|
||||
..............308..515..................373@......709..&..............*185..................689..........751........44..........*764........
|
||||
..............*..............661....=.........*.............993....984.....*.......908......=...273............../.*........................
|
||||
.......582..335...260....59......998../.....39.760.313*174...*..........@.183......................*47....&994.887.577........*464.....22...
|
||||
......*...............................449..................802........762.....522..139+..154..266$......................46.323.....712*.....
|
||||
....827.....................................35......600*29.....724........488............*...............149*227.........*..................
|
||||
........@......278*............@..135..........594.........470*...........*....540*.......42..............................775.536..790......
|
||||
.....990...........742......181....*..............*..@521................743.......552............310...*....+738.....................*.....
|
||||
.......................125.......311............715........263...........................................173...................235....291...
|
||||
3
03/input2.txt
Normal file
3
03/input2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
.854...........................................................................362...........271...732........838.........24................
|
||||
...*.............................117*...........459........767*648....#.........*...................................$...&..=................
|
||||
....970.........368.124.+............57................653...........723.....366....*443..60.........536....441....45..879.....789...*......
|
||||
10
03/input3.txt
Normal file
10
03/input3.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
467..114..
|
||||
...*......
|
||||
..35..633.
|
||||
......#...
|
||||
617*......
|
||||
.....+.58.
|
||||
..592.....
|
||||
......755.
|
||||
...$.*....
|
||||
.664.598..
|
||||
117
04/04-part2.c
Normal file
117
04/04-part2.c
Normal file
@@ -0,0 +1,117 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define DEFAULT_FILE "input.txt"
|
||||
#define STRBUF_LEN 200
|
||||
#define NUM_CARDS 202
|
||||
#define WINNING_NUM_SIZE 10
|
||||
#define HOLDING_NUM_SIZE 25
|
||||
#define ISDIGIT(X) (X >= '0' && X <= '9')
|
||||
|
||||
void parse_nums(char *str, uint8_t *nums, uint8_t len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t digit_idx = 0;
|
||||
char c;
|
||||
uint8_t num = 0;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
num = 0;
|
||||
digit_idx = (i * 3);
|
||||
c = str[digit_idx];
|
||||
if (ISDIGIT(c)) num = (c - '0') * 10;
|
||||
num += str[digit_idx + 1] - '0';
|
||||
nums[i] = num;
|
||||
}
|
||||
}
|
||||
|
||||
void parse_line(char *str, uint8_t *winning_nums, uint8_t *holding_nums)
|
||||
{
|
||||
while (*str != ':') str++;
|
||||
str += 2;
|
||||
parse_nums(str, winning_nums, WINNING_NUM_SIZE);
|
||||
|
||||
while (*str != '|') str++;
|
||||
str += 2;
|
||||
parse_nums(str, holding_nums, HOLDING_NUM_SIZE);
|
||||
}
|
||||
|
||||
bool num_in_set(uint8_t num, uint8_t *set, uint8_t len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
if (num == set[i]) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t calculate_points(uint8_t *winning_nums, uint8_t *holding_nums)
|
||||
{
|
||||
uint32_t points = 0;
|
||||
uint8_t i = 0;
|
||||
for (i = 0; i < HOLDING_NUM_SIZE; i++)
|
||||
{
|
||||
if (num_in_set(holding_nums[i], winning_nums, WINNING_NUM_SIZE)) points++;
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char strbuf[STRBUF_LEN] = {0};
|
||||
uint8_t winning_nums[WINNING_NUM_SIZE] = {0};
|
||||
uint8_t holding_nums[HOLDING_NUM_SIZE] = {0};
|
||||
uint64_t points = 0;
|
||||
uint64_t card_copies[NUM_CARDS] = { [0 ... NUM_CARDS-1] = 1 };
|
||||
uint8_t i = 0;
|
||||
uint8_t copyidx = 0;
|
||||
uint8_t cardidx = 0;
|
||||
|
||||
for (cardidx = 0; cardidx < NUM_CARDS; cardidx++)
|
||||
{
|
||||
fgets(strbuf, STRBUF_LEN, file);
|
||||
if (strbuf[0] == '\n') break;
|
||||
parse_line(strbuf, winning_nums, holding_nums);
|
||||
points = calculate_points(winning_nums, holding_nums);
|
||||
for (i = 0; i < points; i++)
|
||||
{
|
||||
// Add copy of card for every point
|
||||
if (cardidx + i < NUM_CARDS)
|
||||
card_copies[cardidx + i + 1] = card_copies[cardidx + i + 1] + card_copies[cardidx];
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
points = 0;
|
||||
for (i = 0; i < NUM_CARDS; i++)
|
||||
{
|
||||
points += card_copies[i];
|
||||
}
|
||||
|
||||
printf("Total cards: %d", points);
|
||||
|
||||
return 0;
|
||||
}
|
||||
100
04/04.c
Normal file
100
04/04.c
Normal file
@@ -0,0 +1,100 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define DEFAULT_FILE "input.txt"
|
||||
#define STRBUF_LEN 200
|
||||
#define WINNING_NUM_SIZE 10
|
||||
#define HOLDING_NUM_SIZE 25
|
||||
#define ISDIGIT(X) (X >= '0' && X <= '9')
|
||||
|
||||
void parse_nums(char *str, uint8_t *nums, uint8_t len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t digit_idx = 0;
|
||||
char c;
|
||||
uint8_t num = 0;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
num = 0;
|
||||
digit_idx = (i * 3);
|
||||
c = str[digit_idx];
|
||||
if (ISDIGIT(c)) num = (c - '0') * 10;
|
||||
num += str[digit_idx + 1] - '0';
|
||||
nums[i] = num;
|
||||
}
|
||||
}
|
||||
|
||||
void parse_line(char *str, uint8_t *winning_nums, uint8_t *holding_nums)
|
||||
{
|
||||
while (*str != ':') str++;
|
||||
str += 2;
|
||||
parse_nums(str, winning_nums, WINNING_NUM_SIZE);
|
||||
|
||||
while (*str != '|') str++;
|
||||
str += 2;
|
||||
parse_nums(str, holding_nums, HOLDING_NUM_SIZE);
|
||||
}
|
||||
|
||||
bool num_in_set(uint8_t num, uint8_t *set, uint8_t len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
if (num == set[i]) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t calculate_points(uint8_t *winning_nums, uint8_t *holding_nums)
|
||||
{
|
||||
uint32_t points = 0;
|
||||
uint8_t i = 0;
|
||||
for (i = 0; i < HOLDING_NUM_SIZE; i++)
|
||||
{
|
||||
if (num_in_set(holding_nums[i], winning_nums, WINNING_NUM_SIZE)) {
|
||||
if (points) points = points * 2;
|
||||
else points = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : DEFAULT_FILE;
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char strbuf[STRBUF_LEN] = {0};
|
||||
uint8_t winning_nums[WINNING_NUM_SIZE] = {0};
|
||||
uint8_t holding_nums[HOLDING_NUM_SIZE] = {0};
|
||||
uint32_t totalpoints = 0;
|
||||
|
||||
while (fgets(strbuf, STRBUF_LEN, file))
|
||||
{
|
||||
if (strbuf[0] == '\n') break;
|
||||
parse_line(strbuf, winning_nums, holding_nums);
|
||||
totalpoints += calculate_points(winning_nums, holding_nums);
|
||||
}
|
||||
|
||||
printf("Total Points: %d\n", totalpoints);
|
||||
|
||||
return 0;
|
||||
}
|
||||
202
04/input.txt
Normal file
202
04/input.txt
Normal file
@@ -0,0 +1,202 @@
|
||||
Card 1: 74 8 2 86 40 25 93 17 61 32 | 65 25 73 55 75 94 54 99 53 17 89 4 44 13 15 32 57 92 8 21 74 64 5 87 24
|
||||
Card 2: 8 18 79 59 71 84 72 23 96 74 | 22 83 74 78 72 30 8 59 6 23 7 71 31 84 18 96 21 36 51 67 80 79 60 28 42
|
||||
Card 3: 63 27 56 19 85 86 40 78 67 54 | 34 32 79 64 35 46 61 31 24 41 33 44 10 56 49 36 4 82 98 54 23 21 63 86 51
|
||||
Card 4: 2 95 87 25 13 12 9 24 68 29 | 84 54 49 78 52 60 34 25 97 26 55 39 66 79 23 94 29 67 12 51 9 16 19 76 8
|
||||
Card 5: 70 92 50 61 43 16 53 71 91 7 | 17 70 62 84 82 9 14 16 56 15 63 91 77 57 58 60 96 35 88 26 51 54 59 74 80
|
||||
Card 6: 34 86 44 60 10 4 89 5 94 92 | 60 95 35 2 86 32 94 79 82 64 4 5 92 89 44 69 34 21 76 72 9 6 52 48 61
|
||||
Card 7: 99 36 57 20 46 38 26 58 72 11 | 99 70 20 58 38 67 76 36 84 27 94 11 26 35 46 21 81 31 72 62 13 10 57 54 4
|
||||
Card 8: 19 95 24 99 44 36 58 26 31 6 | 69 10 43 42 70 64 92 40 38 47 21 98 41 49 20 71 65 59 91 72 34 74 84 29 22
|
||||
Card 9: 87 77 90 73 7 27 48 1 13 55 | 96 28 40 62 19 3 25 47 80 85 68 94 82 50 12 65 84 75 83 41 91 89 55 42 48
|
||||
Card 10: 6 89 13 82 16 54 27 67 19 76 | 65 67 94 58 97 61 54 80 53 6 73 41 95 7 83 2 23 11 63 24 78 29 13 16 82
|
||||
Card 11: 27 50 4 17 31 70 18 75 91 20 | 71 85 67 80 92 6 31 48 15 70 51 7 78 34 8 72 16 62 4 52 75 39 2 82 74
|
||||
Card 12: 27 68 79 78 21 56 53 29 2 74 | 96 69 59 49 20 42 23 71 54 72 25 7 55 19 64 37 62 41 10 66 26 75 93 18 84
|
||||
Card 13: 1 75 85 51 47 45 93 11 57 80 | 97 66 4 61 42 36 12 83 86 51 99 90 52 82 30 33 20 56 44 59 18 24 28 40 41
|
||||
Card 14: 24 28 85 42 5 3 33 76 98 75 | 31 95 54 8 90 10 6 85 75 44 94 40 62 47 83 26 9 27 68 63 88 80 82 55 93
|
||||
Card 15: 52 28 90 27 6 37 44 3 51 39 | 65 44 64 85 47 20 86 83 38 49 80 21 56 30 89 69 84 93 1 48 88 76 36 77 97
|
||||
Card 16: 28 7 3 39 71 85 84 13 44 31 | 93 79 33 21 4 18 63 23 68 49 57 9 22 54 27 69 75 29 30 78 37 98 91 38 94
|
||||
Card 17: 97 20 84 50 98 82 45 22 33 60 | 53 10 68 92 43 76 99 52 38 96 31 4 25 15 11 42 69 56 62 23 29 74 51 39 40
|
||||
Card 18: 28 66 82 85 94 35 72 29 63 68 | 73 86 63 60 20 10 64 89 66 61 90 35 72 8 85 28 29 1 88 49 76 36 82 94 68
|
||||
Card 19: 58 41 33 29 38 60 3 73 10 13 | 52 73 20 51 47 75 74 26 69 18 70 24 62 53 91 85 63 1 76 5 42 43 97 10 84
|
||||
Card 20: 46 8 66 7 27 4 9 78 24 18 | 13 14 57 92 6 59 3 81 70 10 4 51 98 23 66 64 74 49 83 27 24 73 95 35 7
|
||||
Card 21: 15 32 12 47 53 89 24 58 59 18 | 47 82 1 53 58 93 44 19 12 96 13 61 15 72 75 83 65 41 54 49 71 78 68 59 79
|
||||
Card 22: 92 27 79 68 46 97 2 96 94 80 | 18 81 12 13 39 93 83 38 52 46 89 17 24 58 49 74 10 8 57 65 35 19 54 41 11
|
||||
Card 23: 92 72 68 65 54 18 34 62 41 82 | 96 32 74 10 12 8 34 55 54 83 91 22 47 68 52 21 41 65 72 97 30 70 46 18 9
|
||||
Card 24: 49 76 13 10 59 33 86 29 95 32 | 16 60 38 33 68 51 15 50 95 61 29 93 76 6 31 71 10 25 13 40 49 77 2 32 23
|
||||
Card 25: 38 66 33 7 77 73 44 50 25 76 | 20 12 63 92 61 5 88 37 75 21 41 47 73 77 13 76 31 80 60 34 93 90 54 3 45
|
||||
Card 26: 77 45 81 84 53 80 76 22 75 61 | 25 58 38 45 98 10 6 92 70 82 24 22 4 68 97 72 14 49 17 83 27 53 77 89 75
|
||||
Card 27: 60 16 79 54 85 56 92 41 26 44 | 63 44 69 60 96 7 36 2 37 5 41 73 6 51 64 56 53 76 57 99 21 30 67 85 66
|
||||
Card 28: 41 84 40 62 67 89 29 7 2 8 | 35 9 24 29 20 33 6 98 50 95 10 36 14 80 1 3 88 15 13 48 18 72 26 76 31
|
||||
Card 29: 68 66 52 34 99 70 29 58 19 98 | 88 64 1 14 79 31 44 39 45 40 21 6 97 13 73 11 48 67 8 50 10 57 51 94 91
|
||||
Card 30: 99 45 9 78 88 76 60 86 12 98 | 54 60 30 57 68 22 64 26 98 23 89 50 7 61 91 87 83 25 2 37 56 78 94 36 31
|
||||
Card 31: 59 93 89 84 66 44 34 88 54 27 | 29 12 61 23 49 86 24 19 54 99 35 90 65 82 13 76 20 87 48 40 62 16 80 33 43
|
||||
Card 32: 44 13 99 31 54 52 55 66 58 16 | 40 88 79 93 67 20 30 37 26 24 77 2 81 62 71 82 49 92 86 41 32 59 53 16 90
|
||||
Card 33: 76 34 40 17 37 46 72 62 47 20 | 68 73 3 5 44 78 86 82 52 22 80 91 95 42 66 77 38 88 75 33 41 4 54 65 18
|
||||
Card 34: 45 19 5 25 68 70 82 73 95 54 | 28 97 19 95 89 42 27 70 17 73 15 25 61 77 82 1 45 7 65 57 54 90 5 68 79
|
||||
Card 35: 9 66 65 71 20 89 4 27 15 54 | 97 24 49 64 14 93 77 99 78 34 88 52 83 39 60 56 79 48 57 50 82 18 3 53 95
|
||||
Card 36: 66 89 69 77 32 37 22 40 82 11 | 42 74 69 97 60 22 11 49 82 67 56 90 17 15 27 40 66 13 89 77 32 5 3 37 57
|
||||
Card 37: 93 31 41 27 36 50 59 97 86 62 | 21 28 79 92 16 86 23 5 45 34 90 66 95 37 9 71 81 67 58 85 15 73 31 25 30
|
||||
Card 38: 61 92 74 75 1 70 96 71 30 68 | 66 44 94 35 78 1 92 18 83 93 2 33 70 71 68 38 61 86 56 40 20 30 74 3 46
|
||||
Card 39: 20 15 47 8 33 55 29 94 16 18 | 21 63 8 33 15 58 94 66 16 45 30 59 29 52 20 61 86 31 48 40 25 62 47 95 18
|
||||
Card 40: 27 23 32 47 55 48 31 93 74 20 | 15 77 85 31 58 53 60 98 20 22 99 92 64 44 76 1 79 9 36 87 72 21 13 48 59
|
||||
Card 41: 57 74 11 92 16 78 44 41 13 64 | 39 34 76 80 84 58 54 38 97 23 46 86 65 69 9 15 91 53 6 29 10 49 47 64 4
|
||||
Card 42: 5 4 99 36 85 18 63 81 61 47 | 43 73 80 88 76 64 79 7 86 94 98 39 37 56 33 51 49 90 70 6 20 1 21 59 82
|
||||
Card 43: 93 18 47 21 75 30 43 90 52 23 | 50 25 65 33 90 58 57 10 55 61 30 41 62 23 76 21 2 75 18 83 92 69 37 5 98
|
||||
Card 44: 24 68 45 26 90 76 33 52 19 72 | 80 68 99 1 12 97 90 26 7 32 4 40 77 8 48 83 96 14 49 27 52 94 54 81 37
|
||||
Card 45: 94 48 13 95 73 11 8 91 84 53 | 78 84 12 59 62 57 90 5 75 55 29 22 71 92 54 47 39 53 20 14 26 69 34 48 51
|
||||
Card 46: 43 63 30 28 71 57 77 20 27 46 | 49 35 56 20 79 75 44 48 95 52 5 66 12 93 24 85 39 7 16 8 99 9 80 78 71
|
||||
Card 47: 25 62 88 36 24 10 15 90 8 23 | 4 54 9 80 42 78 32 19 21 65 86 26 28 7 96 71 48 64 36 95 69 44 89 34 57
|
||||
Card 48: 54 27 17 84 63 35 73 61 65 83 | 53 6 88 32 87 63 69 19 20 49 17 29 37 45 73 93 41 27 90 54 3 83 36 56 71
|
||||
Card 49: 84 14 88 11 45 63 90 76 38 49 | 86 60 58 31 82 98 55 8 99 92 27 50 85 96 33 19 32 3 62 46 56 2 57 16 77
|
||||
Card 50: 61 24 52 67 50 37 36 75 3 2 | 32 61 84 75 22 29 21 80 70 56 86 44 96 97 99 6 65 68 81 60 90 43 85 58 66
|
||||
Card 51: 89 91 62 39 50 92 79 7 87 6 | 36 47 77 12 98 83 54 11 31 33 68 52 41 75 62 80 18 14 43 65 15 58 19 71 13
|
||||
Card 52: 79 38 23 82 69 27 67 86 48 58 | 83 17 90 42 60 68 65 47 45 33 62 7 23 76 29 91 35 95 28 71 13 24 5 25 92
|
||||
Card 53: 86 76 93 98 81 57 44 49 65 11 | 88 28 53 34 58 4 48 23 59 41 7 87 55 74 77 14 18 8 94 99 16 19 56 61 2
|
||||
Card 54: 59 11 64 1 14 17 74 82 70 6 | 99 22 37 19 2 18 13 38 26 39 46 5 86 97 56 89 78 91 33 10 30 69 52 90 44
|
||||
Card 55: 1 18 55 64 16 44 96 20 21 46 | 64 57 21 69 42 18 89 99 20 88 33 37 55 60 31 67 24 26 1 58 96 44 46 16 98
|
||||
Card 56: 10 12 98 27 64 75 70 53 9 5 | 41 26 29 93 7 98 78 66 80 57 31 88 35 18 92 58 47 50 79 74 65 84 71 69 42
|
||||
Card 57: 52 84 86 58 4 17 91 35 12 83 | 66 17 35 81 22 25 84 10 26 42 58 4 89 83 12 91 52 47 61 9 50 54 88 86 5
|
||||
Card 58: 39 77 53 52 71 86 47 31 35 87 | 54 68 67 36 96 14 70 42 65 85 79 97 39 80 72 95 9 60 4 17 81 30 50 91 55
|
||||
Card 59: 48 4 42 32 17 24 13 30 25 90 | 65 38 97 19 16 8 52 11 15 64 73 71 74 66 58 62 49 9 37 91 75 12 56 35 80
|
||||
Card 60: 82 20 70 4 17 26 94 99 47 35 | 77 16 6 22 49 83 26 91 8 47 94 44 99 59 52 10 70 90 63 86 82 67 41 4 69
|
||||
Card 61: 44 95 42 85 16 26 81 92 61 55 | 67 7 17 8 69 34 13 82 47 18 59 76 70 11 25 99 40 85 21 12 22 77 38 44 24
|
||||
Card 62: 56 81 21 43 99 50 20 88 62 51 | 81 99 95 38 43 98 88 20 30 64 79 48 6 62 50 73 7 69 34 56 36 39 85 26 21
|
||||
Card 63: 36 72 91 33 84 95 15 50 27 24 | 21 39 47 46 65 51 16 36 6 35 89 95 62 15 75 37 56 84 13 63 31 92 93 44 77
|
||||
Card 64: 24 12 30 35 3 45 38 67 73 78 | 3 37 27 12 21 92 58 55 33 14 85 74 13 68 57 15 34 94 65 2 70 63 83 61 98
|
||||
Card 65: 54 68 51 13 20 2 26 7 91 18 | 71 11 84 8 35 2 87 24 83 89 75 82 91 28 44 79 63 67 9 46 42 53 13 93 31
|
||||
Card 66: 56 80 96 75 66 83 8 37 7 22 | 28 66 87 80 4 21 92 37 90 75 57 22 65 59 99 39 8 31 63 93 89 56 29 26 96
|
||||
Card 67: 16 46 47 23 79 96 69 93 45 33 | 76 68 18 60 89 55 23 14 25 21 92 62 52 75 28 13 98 90 94 57 12 64 31 73 45
|
||||
Card 68: 76 16 78 19 61 43 35 83 55 80 | 23 51 47 64 10 87 40 77 6 84 27 48 91 38 31 22 39 62 43 67 76 58 5 7 80
|
||||
Card 69: 23 33 56 51 8 18 58 1 61 72 | 75 14 18 12 32 23 2 41 57 35 33 61 67 27 56 10 72 58 8 31 43 5 1 87 90
|
||||
Card 70: 30 44 77 73 93 35 2 72 96 88 | 40 82 38 69 34 22 31 13 90 28 80 30 92 39 5 14 83 33 93 79 71 2 58 67 97
|
||||
Card 71: 7 6 91 81 74 36 90 20 22 97 | 12 30 96 64 34 89 56 21 15 10 76 16 14 50 11 9 95 63 55 92 66 59 27 26 75
|
||||
Card 72: 83 63 17 81 44 10 18 3 99 92 | 34 42 46 3 55 37 31 47 92 41 61 39 98 29 14 10 69 62 83 48 44 28 26 93 96
|
||||
Card 73: 47 24 29 98 77 93 27 8 73 90 | 23 72 55 65 48 70 27 86 50 68 28 77 37 40 87 14 99 49 62 97 56 36 66 47 71
|
||||
Card 74: 55 23 63 86 58 94 48 20 72 79 | 77 36 17 49 39 10 47 23 31 94 3 13 40 70 79 72 8 93 56 62 2 18 55 78 97
|
||||
Card 75: 58 16 64 19 99 22 20 89 76 44 | 50 39 92 33 32 61 44 72 88 46 25 5 68 54 74 55 78 77 7 89 64 96 95 47 76
|
||||
Card 76: 39 10 25 12 88 89 42 14 32 71 | 34 30 22 46 55 43 77 24 36 20 53 47 8 26 48 45 94 62 93 82 79 63 9 89 88
|
||||
Card 77: 12 7 66 55 73 83 43 69 37 27 | 96 81 10 89 17 22 29 44 21 3 18 45 60 32 95 62 67 42 39 49 83 82 99 65 16
|
||||
Card 78: 16 73 23 52 38 81 64 25 84 87 | 20 97 9 31 95 36 77 33 63 70 68 17 27 83 53 69 94 74 96 5 99 72 89 13 67
|
||||
Card 79: 94 28 21 83 49 34 42 9 89 10 | 81 31 85 74 60 39 38 11 15 79 55 32 72 50 99 19 3 96 98 8 76 1 90 30 47
|
||||
Card 80: 18 40 55 13 5 9 66 61 20 57 | 68 85 64 60 94 34 1 27 12 43 95 80 58 38 66 91 74 56 37 88 55 20 44 57 72
|
||||
Card 81: 88 79 67 89 83 49 50 91 48 35 | 79 87 29 2 24 48 99 18 88 89 22 91 42 4 49 67 20 73 83 17 23 50 27 76 35
|
||||
Card 82: 14 49 40 54 10 90 53 63 8 65 | 8 9 60 54 42 72 87 56 79 76 90 93 40 82 49 63 38 28 10 65 69 97 14 96 53
|
||||
Card 83: 37 31 96 81 56 70 38 66 95 54 | 24 92 38 32 23 31 29 90 33 54 80 10 66 13 86 37 1 79 95 81 44 70 3 56 8
|
||||
Card 84: 78 23 98 84 3 52 37 59 56 95 | 32 36 38 24 90 7 18 74 48 21 71 57 44 8 58 6 82 25 19 72 62 70 67 47 94
|
||||
Card 85: 74 25 65 88 20 52 39 21 17 70 | 76 93 62 26 90 34 25 7 36 98 97 70 45 19 47 22 33 21 11 27 8 57 56 71 61
|
||||
Card 86: 1 44 73 15 24 94 87 84 33 51 | 53 38 56 26 16 39 99 72 7 8 36 59 69 98 34 27 5 89 25 78 55 29 62 65 83
|
||||
Card 87: 25 27 78 39 14 43 56 36 60 33 | 85 93 71 9 39 7 72 20 13 91 30 76 68 52 94 21 56 15 70 60 32 14 84 57 77
|
||||
Card 88: 37 97 26 89 54 64 57 98 32 62 | 77 29 63 33 71 20 99 9 78 4 67 31 8 51 41 12 82 19 61 55 11 56 74 24 66
|
||||
Card 89: 75 27 74 63 42 45 72 18 85 50 | 52 2 22 57 45 50 8 10 58 65 69 74 99 32 14 42 27 51 56 30 44 20 84 12 16
|
||||
Card 90: 42 22 5 75 28 20 82 31 41 32 | 31 35 75 36 23 64 14 50 25 65 7 81 46 70 27 96 44 15 77 99 39 33 61 12 54
|
||||
Card 91: 86 76 17 16 3 93 69 13 8 95 | 12 97 48 33 55 35 84 91 5 31 57 77 28 79 6 19 98 26 43 49 1 82 37 61 24
|
||||
Card 92: 76 90 89 65 20 95 59 24 63 22 | 25 71 69 47 36 32 50 77 43 85 33 20 39 27 67 96 40 19 84 34 90 98 81 52 80
|
||||
Card 93: 91 96 47 12 2 46 61 58 39 77 | 1 69 67 60 65 63 19 32 64 46 62 8 15 94 92 93 74 20 54 29 99 89 23 75 28
|
||||
Card 94: 36 66 11 56 96 54 42 44 83 84 | 19 33 82 32 15 16 97 47 64 73 72 2 12 10 29 75 38 27 5 80 39 6 22 53 24
|
||||
Card 95: 35 26 10 67 65 73 5 75 78 18 | 75 99 54 38 73 24 33 7 28 9 64 67 74 5 26 30 37 18 39 35 53 10 4 78 65
|
||||
Card 96: 17 63 42 20 93 48 94 41 89 5 | 48 88 41 89 1 40 26 53 46 5 49 97 20 91 42 28 74 17 94 79 63 32 93 7 72
|
||||
Card 97: 48 77 23 12 8 80 59 88 92 42 | 96 88 13 97 27 86 8 48 33 99 59 23 12 39 90 36 42 92 94 38 76 80 77 26 9
|
||||
Card 98: 70 35 92 63 28 96 50 20 94 98 | 70 12 13 22 96 94 61 74 50 32 92 52 93 54 98 66 20 63 28 99 35 87 78 67 91
|
||||
Card 99: 49 65 8 14 33 57 92 90 22 97 | 14 92 84 29 61 97 72 43 26 63 57 19 60 46 49 95 35 86 39 36 80 21 30 73 74
|
||||
Card 100: 44 47 96 69 98 77 52 31 80 14 | 34 74 18 25 75 67 16 2 49 36 68 39 87 97 33 43 3 19 46 10 45 86 91 50 71
|
||||
Card 101: 28 86 75 77 17 78 96 5 20 30 | 31 67 62 83 58 90 23 25 27 35 29 22 64 50 10 15 6 88 17 78 77 9 4 66 63
|
||||
Card 102: 15 8 61 1 24 98 32 16 81 93 | 99 69 26 70 88 71 25 40 53 54 79 58 15 32 48 87 18 24 52 2 98 82 10 21 6
|
||||
Card 103: 86 29 83 91 56 31 74 87 53 22 | 45 15 79 95 3 14 94 83 16 72 65 36 38 53 78 52 39 91 50 54 86 31 99 22 56
|
||||
Card 104: 22 63 37 54 36 96 90 80 8 7 | 63 75 84 80 48 54 36 35 14 74 53 25 47 37 96 23 56 22 6 8 34 90 7 64 55
|
||||
Card 105: 49 2 17 32 41 45 85 25 83 12 | 77 13 34 83 80 20 50 47 78 30 11 48 44 86 84 21 25 63 36 49 97 74 68 53 81
|
||||
Card 106: 64 2 46 80 75 13 69 56 54 71 | 42 60 95 16 48 30 75 38 46 69 18 98 59 14 93 84 55 70 97 53 32 20 76 2 19
|
||||
Card 107: 22 64 50 79 55 18 87 8 20 98 | 28 69 96 15 70 42 11 12 38 83 55 99 62 98 3 79 53 24 91 44 19 9 4 66 82
|
||||
Card 108: 1 71 73 45 2 50 17 72 19 9 | 1 62 77 47 27 54 2 55 60 89 71 96 31 43 10 67 3 65 25 9 45 68 50 88 73
|
||||
Card 109: 39 61 22 80 23 78 85 99 71 52 | 45 53 46 75 82 84 44 33 76 57 31 65 80 2 66 49 47 39 35 95 19 96 30 14 43
|
||||
Card 110: 50 31 7 42 72 16 28 77 81 43 | 2 6 90 72 16 71 48 77 63 38 31 4 93 76 49 78 45 46 5 80 27 25 26 74 33
|
||||
Card 111: 89 53 2 28 35 5 68 42 62 23 | 35 8 78 24 85 56 55 27 14 33 48 80 18 11 71 1 53 77 91 44 58 25 74 92 43
|
||||
Card 112: 33 40 80 76 16 97 71 67 26 49 | 27 34 11 35 51 26 59 58 44 86 66 54 82 21 8 74 99 77 37 71 16 50 40 61 28
|
||||
Card 113: 34 62 21 74 51 35 19 37 89 49 | 41 5 91 23 43 62 42 68 81 89 19 70 55 88 52 15 97 80 58 26 11 63 6 49 28
|
||||
Card 114: 11 63 45 75 92 50 57 42 29 79 | 13 89 23 20 58 50 26 40 3 27 16 47 71 49 85 78 59 21 37 68 34 7 98 45 19
|
||||
Card 115: 6 64 20 23 50 14 24 33 9 15 | 61 42 74 40 95 30 18 60 46 43 3 25 14 16 92 56 53 90 19 24 78 58 63 80 49
|
||||
Card 116: 69 25 32 2 1 6 24 17 89 4 | 13 57 77 49 27 87 91 68 52 96 20 21 5 62 90 39 47 55 56 63 30 38 14 79 45
|
||||
Card 117: 8 5 28 47 41 25 87 73 17 56 | 43 63 88 32 35 20 13 66 64 86 30 10 92 71 45 57 70 69 62 18 9 93 1 81 95
|
||||
Card 118: 38 54 10 60 63 36 90 47 83 18 | 63 47 45 65 78 60 55 98 91 36 22 81 83 18 90 15 40 10 87 38 54 33 8 32 4
|
||||
Card 119: 82 95 23 76 45 72 16 62 71 83 | 46 66 81 9 16 93 87 4 40 97 5 72 78 54 67 56 61 12 21 74 64 52 23 14 26
|
||||
Card 120: 64 42 36 63 41 71 84 69 85 29 | 80 31 87 20 18 71 43 64 94 7 54 36 45 86 41 60 28 84 88 26 63 85 69 58 77
|
||||
Card 121: 66 77 99 55 75 31 44 30 47 73 | 20 59 45 34 63 89 88 52 39 13 91 61 78 76 73 99 38 23 40 50 4 1 65 67 58
|
||||
Card 122: 9 20 68 24 25 67 3 63 34 12 | 81 48 31 89 72 99 11 26 13 73 58 94 42 57 59 5 74 12 18 20 60 88 83 76 2
|
||||
Card 123: 51 24 73 56 61 57 79 46 37 69 | 55 38 63 17 85 75 59 61 88 50 53 72 1 5 66 52 14 80 74 6 57 22 97 70 77
|
||||
Card 124: 59 97 26 20 53 15 27 65 2 23 | 75 2 74 22 72 91 85 33 98 11 26 99 9 62 61 16 87 69 8 32 10 37 59 20 48
|
||||
Card 125: 30 58 23 6 81 8 3 37 53 15 | 75 66 81 42 32 84 57 40 63 19 70 76 74 54 61 82 44 8 16 80 55 87 10 92 22
|
||||
Card 126: 30 71 38 18 91 61 68 99 13 16 | 91 5 99 88 86 61 16 90 13 9 58 30 69 50 71 1 28 54 20 40 68 46 18 4 73
|
||||
Card 127: 74 60 96 29 69 68 16 80 45 20 | 53 31 71 26 42 64 99 5 81 92 43 96 16 69 22 19 88 60 54 20 29 76 6 56 11
|
||||
Card 128: 47 88 77 56 66 5 38 14 70 1 | 19 5 1 76 2 77 35 51 68 22 75 44 45 13 37 96 86 60 85 87 25 26 64 11 65
|
||||
Card 129: 76 13 49 32 89 52 40 43 54 86 | 57 12 64 59 21 1 40 45 20 24 60 68 77 14 55 80 88 11 83 94 84 4 58 71 18
|
||||
Card 130: 77 98 41 54 64 1 14 20 51 26 | 5 53 6 80 46 14 29 9 77 55 94 40 84 60 33 97 66 64 81 1 75 73 28 16 36
|
||||
Card 131: 16 88 64 81 42 51 13 10 45 48 | 18 77 28 84 75 94 13 35 27 83 29 2 11 44 48 20 19 46 17 25 70 38 30 42 54
|
||||
Card 132: 17 95 50 10 52 65 94 91 49 44 | 30 19 5 13 49 97 44 60 54 38 64 92 37 87 33 67 35 43 40 16 91 15 7 96 36
|
||||
Card 133: 3 51 66 53 19 60 34 26 32 75 | 87 29 64 65 10 50 98 42 69 35 89 26 41 23 14 94 38 49 13 37 53 31 95 90 27
|
||||
Card 134: 81 88 58 61 11 31 54 29 42 50 | 44 35 72 34 21 57 86 79 2 11 67 85 37 49 83 70 64 63 95 12 62 52 71 15 3
|
||||
Card 135: 8 45 79 72 50 38 17 92 89 91 | 77 23 59 53 36 80 25 95 69 83 33 40 62 49 86 19 18 75 84 48 44 47 96 39 73
|
||||
Card 136: 4 41 75 98 60 79 65 9 74 20 | 90 98 16 2 41 9 1 79 28 27 37 47 20 80 74 36 48 60 42 26 75 65 58 4 6
|
||||
Card 137: 96 77 70 23 91 54 43 61 25 4 | 36 96 45 18 42 10 24 65 52 99 93 38 76 27 77 95 23 61 35 34 85 43 59 70 54
|
||||
Card 138: 74 87 59 72 88 15 14 97 68 13 | 11 84 15 27 33 38 8 72 12 40 88 37 14 75 97 82 39 57 87 2 83 68 74 59 13
|
||||
Card 139: 12 20 1 36 10 91 16 42 94 8 | 74 10 86 57 3 27 25 15 33 78 24 84 19 35 58 38 17 77 59 85 4 92 2 55 60
|
||||
Card 140: 62 18 78 34 56 35 70 69 12 50 | 60 8 52 72 95 97 56 69 39 59 38 78 35 43 25 7 16 89 87 57 49 36 88 62 76
|
||||
Card 141: 7 36 86 91 88 37 23 67 92 41 | 86 36 60 4 83 14 88 45 44 23 90 16 7 10 30 92 64 52 91 58 9 72 67 37 94
|
||||
Card 142: 15 68 29 85 72 87 78 4 45 33 | 70 5 78 53 22 13 88 52 72 37 55 7 24 41 90 58 84 23 73 83 3 66 96 61 92
|
||||
Card 143: 8 47 60 23 42 79 66 44 68 62 | 44 66 79 51 8 39 22 85 38 81 42 21 60 67 11 25 7 47 23 9 68 12 70 62 83
|
||||
Card 144: 46 62 12 26 90 16 95 99 8 93 | 23 5 94 99 30 85 75 16 34 81 11 53 27 8 90 82 26 62 87 55 14 73 97 67 93
|
||||
Card 145: 48 96 83 27 12 82 3 29 86 49 | 21 27 96 82 84 49 3 70 76 91 32 29 12 22 58 86 44 87 61 2 83 72 48 40 68
|
||||
Card 146: 62 1 12 83 72 10 50 17 98 5 | 19 26 83 98 49 87 24 32 40 35 50 85 18 17 38 7 61 8 5 20 77 34 1 33 62
|
||||
Card 147: 5 62 85 11 61 49 2 88 75 59 | 59 23 11 44 73 35 82 63 2 33 68 49 75 56 88 62 67 61 5 98 89 19 24 90 76
|
||||
Card 148: 89 21 6 97 13 61 82 71 37 84 | 71 5 7 34 19 66 4 61 55 10 25 82 97 9 72 30 89 13 21 77 6 31 58 84 48
|
||||
Card 149: 46 96 58 2 92 66 52 39 22 23 | 70 31 7 45 46 58 27 2 42 25 59 66 52 99 96 63 39 14 62 51 95 84 69 8 89
|
||||
Card 150: 85 61 42 49 66 9 40 74 8 77 | 41 89 97 87 48 49 69 82 21 54 91 52 71 46 28 99 47 78 98 39 81 95 9 33 85
|
||||
Card 151: 70 35 27 20 42 47 72 89 8 64 | 73 42 3 10 59 72 89 70 50 35 2 8 32 5 36 47 29 98 75 51 30 58 43 86 56
|
||||
Card 152: 65 21 42 45 83 97 90 96 12 28 | 21 30 83 14 24 49 10 65 88 79 64 8 33 15 57 1 97 32 91 78 39 62 4 99 23
|
||||
Card 153: 22 82 23 85 32 25 83 63 68 59 | 52 48 27 94 43 18 21 90 10 62 22 35 55 50 77 93 12 42 91 73 64 36 84 9 8
|
||||
Card 154: 86 15 55 71 88 99 77 18 66 30 | 31 18 38 57 76 53 82 1 49 84 77 14 26 11 40 86 41 87 47 9 62 88 20 59 21
|
||||
Card 155: 34 52 7 30 51 83 42 86 49 16 | 51 57 77 36 21 13 17 88 56 98 96 66 62 63 6 37 52 70 50 32 43 45 47 64 53
|
||||
Card 156: 1 48 76 45 33 51 16 20 25 47 | 49 41 1 64 13 57 79 53 35 6 52 71 97 83 95 87 88 58 37 16 24 63 31 94 46
|
||||
Card 157: 20 3 5 93 75 15 89 14 96 43 | 42 30 91 82 34 44 31 41 4 59 62 54 38 33 25 51 84 28 96 85 8 60 83 10 36
|
||||
Card 158: 68 19 67 1 7 92 4 81 98 53 | 71 64 18 83 66 57 25 49 30 62 95 77 93 40 75 47 15 84 78 9 48 52 24 38 34
|
||||
Card 159: 3 32 42 47 90 1 27 66 50 97 | 4 41 22 18 36 57 76 50 80 24 27 45 25 88 58 29 83 87 86 89 59 66 3 11 13
|
||||
Card 160: 76 74 90 64 70 1 97 28 68 84 | 18 19 67 84 12 51 97 60 68 92 28 90 1 94 93 64 30 2 74 76 61 49 85 70 96
|
||||
Card 161: 75 12 21 36 44 85 1 43 29 45 | 99 87 38 73 60 33 80 25 1 54 85 45 4 57 41 29 43 90 49 44 27 12 31 16 23
|
||||
Card 162: 23 69 91 77 84 98 55 89 92 74 | 26 44 25 49 10 15 82 37 39 64 61 83 53 1 38 69 22 96 5 91 36 65 75 41 98
|
||||
Card 163: 78 64 29 96 73 12 35 19 65 38 | 76 96 35 9 34 41 46 39 3 10 27 24 13 84 91 92 22 58 62 16 8 12 60 18 56
|
||||
Card 164: 82 84 96 81 23 19 58 2 24 62 | 36 93 49 5 71 87 34 39 2 98 97 28 77 70 17 53 51 23 57 81 3 48 29 27 62
|
||||
Card 165: 53 95 19 88 39 99 29 62 91 77 | 18 51 63 11 99 71 84 86 57 96 60 62 77 32 35 27 98 23 97 1 65 17 15 87 38
|
||||
Card 166: 17 46 33 41 80 57 47 91 1 64 | 33 98 57 1 88 23 64 41 43 61 84 11 7 52 80 60 4 97 75 46 55 21 47 91 79
|
||||
Card 167: 47 3 71 68 6 94 54 61 66 72 | 69 9 10 67 68 87 49 61 56 6 85 59 75 23 44 90 94 13 66 52 53 72 64 45 31
|
||||
Card 168: 90 57 89 45 63 53 61 46 96 55 | 57 94 39 18 45 53 27 24 81 79 50 30 21 31 83 99 67 98 92 90 22 47 46 80 7
|
||||
Card 169: 7 47 36 15 24 51 52 9 48 61 | 15 88 48 99 3 12 22 7 47 87 89 57 9 24 82 51 97 61 52 1 36 54 94 63 62
|
||||
Card 170: 26 42 91 72 64 18 69 81 44 22 | 46 60 73 35 4 52 33 51 13 82 62 5 27 90 95 2 7 56 44 76 75 50 87 70 74
|
||||
Card 171: 17 80 28 54 57 90 86 59 67 1 | 1 59 19 90 37 57 76 87 42 73 20 41 68 33 67 53 28 50 86 54 80 99 6 17 91
|
||||
Card 172: 95 28 26 47 83 76 31 52 70 89 | 69 18 8 50 20 27 16 60 11 88 75 13 34 57 90 1 5 91 38 32 6 68 65 35 33
|
||||
Card 173: 15 74 3 88 42 10 62 59 39 27 | 34 61 14 52 74 88 22 39 67 23 10 73 27 46 55 24 30 89 35 82 66 83 86 15 43
|
||||
Card 174: 6 8 3 61 1 87 94 18 20 93 | 59 56 13 57 85 8 67 6 14 60 10 69 29 3 99 26 44 78 82 22 49 24 36 90 87
|
||||
Card 175: 47 64 30 84 70 92 51 53 12 73 | 11 79 23 33 4 2 36 47 7 53 10 13 20 92 51 72 32 61 94 78 5 64 69 19 54
|
||||
Card 176: 55 57 29 40 25 44 96 7 70 14 | 51 88 85 62 5 66 23 30 81 33 50 75 25 61 59 43 87 71 32 76 27 48 8 11 86
|
||||
Card 177: 57 9 53 8 63 88 32 52 79 28 | 35 42 99 1 72 64 51 11 58 16 50 70 21 87 65 77 66 94 63 96 47 32 62 81 92
|
||||
Card 178: 48 22 72 59 60 61 8 39 24 67 | 34 88 67 4 48 59 84 98 83 26 50 10 57 45 14 7 9 21 63 17 94 91 37 39 36
|
||||
Card 179: 11 60 35 51 80 12 53 22 71 72 | 10 18 70 11 16 19 72 23 83 63 61 58 56 50 28 89 7 75 59 48 81 54 33 2 40
|
||||
Card 180: 50 48 20 85 86 18 67 91 27 22 | 7 14 31 51 36 42 66 56 46 16 15 10 5 67 90 2 19 63 26 35 91 82 43 68 49
|
||||
Card 181: 75 78 86 53 61 26 68 77 85 25 | 95 40 18 73 6 43 74 87 51 64 37 83 62 24 19 33 2 7 13 52 48 63 57 70 75
|
||||
Card 182: 6 60 67 18 39 29 33 54 37 83 | 15 72 38 35 8 96 36 44 81 19 21 1 40 87 46 52 9 4 28 31 85 13 68 32 41
|
||||
Card 183: 52 18 27 20 7 46 38 58 91 37 | 20 46 27 9 37 90 63 99 59 78 66 65 88 91 18 21 1 49 85 71 26 4 8 58 50
|
||||
Card 184: 38 58 36 50 76 43 32 98 69 23 | 36 24 69 33 48 92 28 44 43 91 58 50 86 4 98 78 76 81 23 32 71 27 66 40 38
|
||||
Card 185: 53 21 69 24 51 39 88 3 78 5 | 89 78 73 61 59 21 8 79 64 51 39 66 53 69 67 68 36 29 88 38 44 47 46 19 13
|
||||
Card 186: 48 54 68 40 60 27 45 51 61 17 | 52 78 51 35 45 74 62 89 27 76 48 17 56 53 40 14 61 11 68 37 31 54 39 60 4
|
||||
Card 187: 64 49 14 90 67 54 40 21 60 71 | 8 30 55 89 17 90 97 60 16 49 74 14 67 24 82 64 51 25 61 98 12 19 35 40 43
|
||||
Card 188: 53 51 65 17 4 88 5 69 28 34 | 11 24 78 69 77 26 88 4 60 71 28 20 59 10 51 2 17 49 52 65 34 8 53 64 5
|
||||
Card 189: 53 78 45 15 50 2 6 16 3 38 | 53 10 27 45 67 38 76 56 50 4 41 77 91 16 3 6 60 13 2 43 15 9 98 20 78
|
||||
Card 190: 72 54 84 76 69 10 13 19 97 26 | 84 45 29 49 71 72 2 47 16 32 46 14 5 34 35 99 6 93 56 89 22 79 73 24 64
|
||||
Card 191: 18 70 33 56 72 68 98 52 24 46 | 55 52 25 18 24 12 49 15 46 23 71 72 89 26 33 2 76 7 44 56 68 97 83 70 98
|
||||
Card 192: 33 34 57 40 93 14 12 45 79 25 | 97 20 48 39 90 64 27 40 26 58 42 60 45 2 81 80 23 34 79 57 24 18 71 53 5
|
||||
Card 193: 87 90 72 76 10 83 41 6 54 23 | 23 18 1 76 93 88 96 72 7 31 20 90 68 30 39 40 44 11 35 3 78 54 17 46 60
|
||||
Card 194: 5 10 25 27 6 45 67 86 92 32 | 68 32 21 5 33 74 42 27 84 48 46 14 38 39 64 47 95 86 45 56 31 25 67 15 17
|
||||
Card 195: 31 33 64 80 68 21 20 29 63 11 | 80 81 1 56 61 21 12 33 64 30 76 82 97 43 27 52 31 20 70 45 17 4 60 77 68
|
||||
Card 196: 73 91 78 83 14 54 94 92 9 8 | 3 56 55 76 96 22 17 43 15 40 52 51 13 50 79 65 41 25 60 11 93 53 99 4 87
|
||||
Card 197: 63 64 25 48 91 95 77 7 38 69 | 40 29 14 72 27 5 10 97 56 30 51 13 15 34 75 87 86 60 45 88 33 61 90 32 85
|
||||
Card 198: 70 60 61 56 16 81 18 12 88 65 | 5 67 62 45 43 21 32 94 19 27 77 58 50 41 9 85 29 40 92 87 54 24 76 48 33
|
||||
Card 199: 29 26 70 45 22 86 27 64 95 80 | 46 5 38 61 44 97 9 15 78 93 73 34 7 23 67 41 58 33 1 85 48 98 4 14 53
|
||||
Card 200: 3 88 81 61 64 39 54 51 49 17 | 16 87 35 37 82 68 55 19 80 33 10 2 48 25 79 89 52 4 44 59 26 72 90 83 9
|
||||
Card 201: 28 44 46 58 13 92 35 16 30 14 | 32 79 85 98 67 55 21 41 93 43 19 72 35 24 90 64 88 82 84 20 45 91 81 38 49
|
||||
Card 202: 85 43 47 11 9 21 27 53 17 95 | 10 6 26 91 30 69 52 20 28 16 82 45 72 54 58 96 88 99 38 55 78 98 15 70 4
|
||||
6
04/input2.txt
Normal file
6
04/input2.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
|
||||
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
|
||||
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
|
||||
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
|
||||
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
||||
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
|
||||
27
boilerplate.c
Normal file
27
boilerplate.c
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Get filename as an argument, defaults to "input.txt"
|
||||
char *path = (argc > 1) ? argv[1] : "input.txt";
|
||||
|
||||
if (!path)
|
||||
{
|
||||
printf("Requires input file.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(path, "r");
|
||||
|
||||
if (!file)
|
||||
{
|
||||
printf("Could not find file.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Code goes here
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user