mirror of
https://codeberg.org/andyscott/advent-of-code.git
synced 2024-11-09 22:00:55 -05:00
Compare commits
4 commits
9bded90d7b
...
46af70bb90
Author | SHA1 | Date | |
---|---|---|---|
46af70bb90 | |||
594996acb9 | |||
4f8fa53dbf | |||
a8851c4f3d |
8 changed files with 6407 additions and 0 deletions
45
2022/1.c
Normal file
45
2022/1.c
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int comp(const void *a, const void *b) {
|
||||
int n = *(int *)a;
|
||||
int m = *(int *)b;
|
||||
return n - m;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "USAGE: %s input_file\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *fd = fopen(argv[1], "r");
|
||||
if (!fd) {
|
||||
fprintf(stderr, "Error opening file\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char line[50] = {0};
|
||||
int idx = 0, elves[1000] = {0};
|
||||
|
||||
while (fgets(line, sizeof line / sizeof *line, fd) != NULL) {
|
||||
if (strlen(line) == 1) {
|
||||
idx++;
|
||||
} else {
|
||||
elves[idx] += atoi(line);
|
||||
}
|
||||
}
|
||||
|
||||
qsort(elves, idx, sizeof(int), comp);
|
||||
|
||||
printf("Elf with the most calories: %d\n", elves[idx - 1]);
|
||||
printf("Elf with the 2nd most calories: %d\n", elves[idx - 2]);
|
||||
printf("Elf with the 3rd most calories: %d\n", elves[idx - 3]);
|
||||
printf("Total: %d\n",
|
||||
elves[idx - 1] + elves[idx - 2] + elves[idx - 3]);
|
||||
|
||||
fclose(fd);
|
||||
return 0;
|
||||
}
|
2250
2022/1.txt
Normal file
2250
2022/1.txt
Normal file
File diff suppressed because it is too large
Load diff
117
2022/2.c
Normal file
117
2022/2.c
Normal file
|
@ -0,0 +1,117 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
struct RPS_Game {
|
||||
// Part 1 Rock / Part 2 Lose
|
||||
const int X;
|
||||
// Part 1 Paper / Part 2 Draw
|
||||
const int Y;
|
||||
// Part 1 Scissors / Part 2 Win
|
||||
const int Z;
|
||||
// Outcomes
|
||||
const int draw;
|
||||
const int win;
|
||||
};
|
||||
|
||||
// Part 1 - Calculate score
|
||||
void process_round(struct RPS_Game *game, int *score, const char opponent_move,
|
||||
const char my_move) {
|
||||
|
||||
switch (my_move) {
|
||||
case 'X': // Rock
|
||||
*score += game->X;
|
||||
if (opponent_move == 'A') {
|
||||
*score += game->draw;
|
||||
} else if (opponent_move == 'C') {
|
||||
*score += game->win;
|
||||
}
|
||||
break;
|
||||
case 'Y': // Paper
|
||||
*score += game->Y;
|
||||
if (opponent_move == 'A') {
|
||||
*score += game->win;
|
||||
} else if (opponent_move == 'B') {
|
||||
*score += game->draw;
|
||||
}
|
||||
break;
|
||||
case 'Z': // Scissors
|
||||
*score += game->Z;
|
||||
if (opponent_move == 'B') {
|
||||
*score += game->win;
|
||||
} else if (opponent_move == 'C') {
|
||||
*score += game->draw;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Part 2 - Find move given a desired result, then calculate score
|
||||
void find_move(struct RPS_Game *game, int *score, const char opponent_move,
|
||||
const char result) {
|
||||
|
||||
char my_move = '\0';
|
||||
|
||||
switch (result) {
|
||||
case 'X': // need to lose
|
||||
if (opponent_move == 'A') {
|
||||
my_move = 'Z';
|
||||
} else if (opponent_move == 'B') {
|
||||
my_move = 'X';
|
||||
} else if (opponent_move == 'C') {
|
||||
my_move = 'Y';
|
||||
}
|
||||
break;
|
||||
case 'Y': // need a draw
|
||||
if (opponent_move == 'A') {
|
||||
my_move = 'X';
|
||||
} else if (opponent_move == 'B') {
|
||||
my_move = 'Y';
|
||||
} else if (opponent_move == 'C') {
|
||||
my_move = 'Z';
|
||||
}
|
||||
break;
|
||||
case 'Z': // need to win
|
||||
if (opponent_move == 'A') {
|
||||
my_move = 'Y';
|
||||
} else if (opponent_move == 'B') {
|
||||
my_move = 'Z';
|
||||
} else if (opponent_move == 'C') {
|
||||
my_move = 'X';
|
||||
}
|
||||
break;
|
||||
}
|
||||
process_round(game, score, opponent_move, my_move);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "USAGE: %s input_file\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(argv[1], "r");
|
||||
if (!file) {
|
||||
fprintf(stderr, "Error opening file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int part1_score = 0;
|
||||
int part2_score = 0;
|
||||
char round[5] = {0};
|
||||
struct RPS_Game game = {.X = 1, .Y = 2, .Z = 3, .draw = 3, .win = 6};
|
||||
|
||||
while (fgets(round, sizeof round / sizeof *round, file) != NULL) {
|
||||
if (strlen(round) == 1) {
|
||||
break;
|
||||
}
|
||||
process_round(&game, &part1_score, round[0], round[2]);
|
||||
find_move(&game, &part2_score, round[0], round[2]);
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
printf("My part 1 score: %d\n", part1_score);
|
||||
printf("My part 2 score: %d\n", part2_score);
|
||||
|
||||
return 0;
|
||||
}
|
2500
2022/2.txt
Normal file
2500
2022/2.txt
Normal file
File diff suppressed because it is too large
Load diff
105
2022/3.c
Normal file
105
2022/3.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// Find badges for part 2
|
||||
char find_badge(char group[3][50]) {
|
||||
|
||||
for (int i = 0; i < strlen(group[0]); i++) {
|
||||
for (int j = 0; j < strlen(group[1]); j++) {
|
||||
for (int k = 0; k < strlen(group[2]); k++) {
|
||||
if (group[0][i] == group[1][j] && group[1][j] == group[2][k]) {
|
||||
return group[0][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Find items for part 1
|
||||
char find_item(char *items) {
|
||||
|
||||
int len = strlen(items);
|
||||
int mid = len / 2;
|
||||
|
||||
for (int i = 0; i < mid; i++) {
|
||||
for (int j = mid; j < len; j++) {
|
||||
if (items[i] == items[j]) {
|
||||
return items[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Updates item_sum / badge_sum when match is found
|
||||
void update_sum(const char c, int *sum) {
|
||||
|
||||
if (c > 64 && c < 91) {
|
||||
*sum += c - 38;
|
||||
} else if (c > 96 && c < 123) {
|
||||
*sum += c - 96;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "USAGE: %s input_file\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(argv[1], "r");
|
||||
if (!file) {
|
||||
perror("fopen");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char items[50] = {0};
|
||||
char group[3][50] = {0};
|
||||
int item_sum = 0, badge_sum = 0, idx = 0;
|
||||
|
||||
while (fgets(items, sizeof items / sizeof *items, file) != NULL) {
|
||||
|
||||
if (strlen(items) == 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Part 1 - find misplaced items
|
||||
items[strlen(items) - 1] = '\0';
|
||||
char match = find_item(items);
|
||||
if (!match) {
|
||||
fprintf(stderr, "Match not found: %s\n", items);
|
||||
}
|
||||
|
||||
update_sum(match, &item_sum);
|
||||
|
||||
// Part 2 - find badges among groups of 3
|
||||
memcpy(group[idx], items, strlen(items));
|
||||
idx++;
|
||||
|
||||
if (idx == 3) {
|
||||
idx = 0;
|
||||
char badge = find_badge(group);
|
||||
if (!badge) {
|
||||
fprintf(stderr,
|
||||
"Badge not found among the following group:\n%s\n%s\n%s\n",
|
||||
group[0], group[1], group[2]);
|
||||
}
|
||||
|
||||
update_sum(badge, &badge_sum);
|
||||
|
||||
for (int i = 0; i < sizeof group / sizeof *group; i++) {
|
||||
memset(group[i], 0, sizeof group[0] / sizeof *group[0]);
|
||||
}
|
||||
}
|
||||
memset(items, 0, sizeof items / sizeof *items);
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
printf("Part 1 - Sum of item priorities: %d\n", item_sum);
|
||||
printf("Part 2 - Sum of badge priorities: %d\n", badge_sum);
|
||||
|
||||
return 0;
|
||||
}
|
300
2022/3.txt
Normal file
300
2022/3.txt
Normal file
|
@ -0,0 +1,300 @@
|
|||
DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb
|
||||
rNJMNNbrHrtjHLHjvwtg
|
||||
fNbNzZdrZnMnMPnQShFPDmnqFm
|
||||
QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq
|
||||
mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp
|
||||
MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW
|
||||
gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL
|
||||
CdgpzdgpgnfThHfFRwhfRf
|
||||
SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ
|
||||
JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd
|
||||
tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw
|
||||
CTGGRftfSGtGTGDLbFchSgSWWWcM
|
||||
QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC
|
||||
SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn
|
||||
LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr
|
||||
jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ
|
||||
ZnJHRncHHgnrsrZffTdMdMBfmMvfvR
|
||||
NWWPnZrVHrZPCDDQtzDCPLCq
|
||||
jpFjvBZhDFHZdwcmslcslBLLNl
|
||||
dVtTVVCzzfrrMPNLLcnVcPLRns
|
||||
CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp
|
||||
JjJqMctnhtDZDQtf
|
||||
TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB
|
||||
HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv
|
||||
cMfFcMFcrqgJLFZdrTDdthPGsGmtGs
|
||||
WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld
|
||||
bWHBjWVzpbRzbmScqgZMFcqf
|
||||
RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb
|
||||
ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf
|
||||
QQpzFrHHQnzHvfTcNshcLRNFJhcR
|
||||
QrPQDrppBQmCmFQm
|
||||
TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC
|
||||
TVHTfzWsfftsZstnbvrbWbrbppPbrmmP
|
||||
BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV
|
||||
TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd
|
||||
jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw
|
||||
SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB
|
||||
PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf
|
||||
pnnhhvphGVpvRPnJlSFRNNJHZHSdSR
|
||||
hbmDDmwnnVGbhmjNrrWwLNLsWBrw
|
||||
dMrgvcQqdjlBLlfW
|
||||
HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ
|
||||
RwtvdPRvSlTQmHHBQBRL
|
||||
FjVSjrsFVnFQnTHmnT
|
||||
VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv
|
||||
fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ
|
||||
sWtGCWtpcqqpNnQjjzhVTTVQczhj
|
||||
tWBGntsCNlqrWswDRfFrbFrPDbPf
|
||||
dmzmjcbQjjQztFNqsqBcMJqNPF
|
||||
nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq
|
||||
wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz
|
||||
RWZdHvRdBRGbbvCjJnbn
|
||||
pqqpSwzpSSbCwPwjlwjl
|
||||
gDzzqSVzqrThpDBtRtCZdQRQLrQQ
|
||||
GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW
|
||||
LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD
|
||||
QznFnLZFvVvHRgsddG
|
||||
BBHBfBHFdSltmWJvqtNtHq
|
||||
TQDrrVMzVDnWnNZDJc
|
||||
gWzprTCrCMQzGGjjhwFwdffjfl
|
||||
LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm
|
||||
DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq
|
||||
gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF
|
||||
sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb
|
||||
nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq
|
||||
hFvvgFcFVzphpTrrwZDp
|
||||
qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ
|
||||
jWHPZWWjZsCmCWRDmQ
|
||||
PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV
|
||||
RnRsFFdSzmgwvQsqwc
|
||||
lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ
|
||||
GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj
|
||||
VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr
|
||||
ncnNbGMcPpvHFrssdBHM
|
||||
cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR
|
||||
pFWmSSFGQlvTbwWTwH
|
||||
jdBgNhRgMftNBhPbhHnZHlTTZcwZ
|
||||
lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG
|
||||
GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm
|
||||
pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr
|
||||
psSsBptpCBdjtcjNVcGG
|
||||
sssppsmchwspFLtvHhQJMtFb
|
||||
rRLDqRVLNSMvFSSV
|
||||
WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc
|
||||
MtPbwvzzVtzfsqGGVpdSjsLd
|
||||
DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj
|
||||
CFRFRFHgDRnRgMtfFvvwzwvwvzWv
|
||||
PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD
|
||||
trHSrdTtslWrSWmfzgmMnfBzmn
|
||||
JsrQsJHHlsVqTjjpbbNnQNNpGG
|
||||
sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW
|
||||
DMSfSbHLHbSDBBzLNvccWRcddvPjNj
|
||||
FSwHfTFdFsmJlnTTmV
|
||||
FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN
|
||||
jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ
|
||||
lRMpBlPmSFRTcvZv
|
||||
TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL
|
||||
jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL
|
||||
SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz
|
||||
BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR
|
||||
JtSsSzJssQJJWjRZzgLnDgqLPZgzbg
|
||||
dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp
|
||||
zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR
|
||||
VPVsZMNTLsMvPsmBJhllFpFBTJFQpl
|
||||
sZtsNsZtdZgjbwggjnbvqr
|
||||
QpTvrphmDvvddfcJJHTTncMlMG
|
||||
bRZZPRwjgzzlSSjGlnlSJS
|
||||
BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF
|
||||
FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg
|
||||
WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR
|
||||
JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP
|
||||
NfjFNNZPDQVJVWpCbQpJ
|
||||
lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS
|
||||
mBTRRmGccRtBwDbrGPbrMMrF
|
||||
VVQqlsGrVsMWBNFNMQHF
|
||||
TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd
|
||||
jzjDgZzjntGJZzCnhrrSlPVsJslpslPq
|
||||
dVhpjGPdjHhqHgtHJJ
|
||||
sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT
|
||||
nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd
|
||||
wqJCjqChmwMLmMmprNgG
|
||||
DNTtdsdWcHdNspGQggnrgLnQpc
|
||||
SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj
|
||||
VstwZCwslBZQDBjfDDBDfS
|
||||
rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD
|
||||
rPFLRLmFvvLvHvTCtqsVVwldGZGPGV
|
||||
SNZDJGfvwgMgfgmLmLcmBqgWgQWr
|
||||
hPnPTnVGsPRqLWpTmQqQ
|
||||
tsbnFhhjhSdGJNCjSf
|
||||
QSbGgBjfTCMWFNPFFtDghPrP
|
||||
JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF
|
||||
zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ
|
||||
gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv
|
||||
GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv
|
||||
sZGPgssMqHZpPptmCcpCrP
|
||||
CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp
|
||||
SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl
|
||||
tVgSvqVbnqDdgQzMQMGMmzthCw
|
||||
mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF
|
||||
WnhZsrJhTnWrgZdZgHNLcLtt
|
||||
hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ
|
||||
BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh
|
||||
fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ
|
||||
WbLnCZnvprpmZrGd
|
||||
gjMzTGBjWFBCCSSrBC
|
||||
bddJJndbdJfwPPthrrSSSsFSSg
|
||||
NJHbZbbvvWGgjWgT
|
||||
dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn
|
||||
CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm
|
||||
TCrTNSScPlplpHrQrQ
|
||||
lqrCvhWFvMGWgfHPgLfjfdgG
|
||||
zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf
|
||||
mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF
|
||||
mpfNshshflNthWfJCBBdmnQbQBZQdn
|
||||
VFVRccgGTqTrHTbWBFjJBCFFJCCQ
|
||||
PvTDHqHqPPGVqqhwfNlWlDhMltlh
|
||||
HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq
|
||||
TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts
|
||||
bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV
|
||||
sPJFDsSsVLgHjLHPbj
|
||||
vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL
|
||||
ChhCCCWTWnnmvmGtztStzScwrcVcFW
|
||||
NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt
|
||||
McpmWccMWHZPcLstbt
|
||||
MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg
|
||||
hsnnhhLljLPTmZwvdZdZjmmz
|
||||
RQNNDpNMSZwvsmqstN
|
||||
QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ
|
||||
TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR
|
||||
HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj
|
||||
VMJJdnMPrMGVrzvCZwZWCzCt
|
||||
CcQnBBCfBvRzDlsS
|
||||
PdbPPCbhGGpDSDlDDhvDJl
|
||||
HmHWPWdbHnCwCHCr
|
||||
JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw
|
||||
zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT
|
||||
bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ
|
||||
QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf
|
||||
SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj
|
||||
WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt
|
||||
tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC
|
||||
FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr
|
||||
SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl
|
||||
sjzPjLphMSrlppSp
|
||||
fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm
|
||||
MVcFGTFtqjsJLjjtCd
|
||||
jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg
|
||||
LSLBMBWsbBBCgfdrFd
|
||||
ShbbzdzQRNNNVhDN
|
||||
JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh
|
||||
ZPfQPjZZrffQZszhzTnVGBvntsNz
|
||||
rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc
|
||||
cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP
|
||||
bQwsMTswwVjdZMVRJM
|
||||
vGWCTDCTQvvtlvQQ
|
||||
mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB
|
||||
VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB
|
||||
FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp
|
||||
rWWppSStfRBLfHPdHHDzlldZ
|
||||
QrTnQmmVCqvrvJvzJZPHvzHsDs
|
||||
qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW
|
||||
SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg
|
||||
ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL
|
||||
rpJJdHZJdZHQSRJbSfVhww
|
||||
jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb
|
||||
VmrqszVmgCWWggbPGclPlZbcZCbf
|
||||
JdrTmVTVsqsRJHvQnnhwhBLH
|
||||
vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf
|
||||
tJDGbZHbjRHNrrBj
|
||||
DnMnzGJJwtzVSzzBzTBSTF
|
||||
hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq
|
||||
HjjzcRTnpGVSGGFWHH
|
||||
pssmjctLzpsRRnhlQbPfPrgDbZls
|
||||
FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv
|
||||
pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz
|
||||
njtpHZnLLQGhTtTWSSSh
|
||||
NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf
|
||||
mqRqLFZRVFbtgBSCbGWWHp
|
||||
LZZRmQhVLLFzZdTQPndPNTTnQW
|
||||
CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG
|
||||
DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt
|
||||
TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr
|
||||
ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD
|
||||
LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr
|
||||
WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT
|
||||
tGWqthqGVdzBWwdd
|
||||
BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg
|
||||
JnNmrHHNrCGBPPnGGc
|
||||
wvFvZBmppBdSLcvshcLrgl
|
||||
bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL
|
||||
TqHHjQnbHTbbmZBBcFMpmBwn
|
||||
ZFCqSlCPdCRTLWWTQQLLQS
|
||||
GjggHcvsggHVTVBLnlcpBQ
|
||||
hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf
|
||||
cgRwVfVzrgqqwZctTztFMFMTCdPmmF
|
||||
bWJsSJHpTDRDTWMC
|
||||
sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr
|
||||
ttgVBtMbttngmHJVpzlzZlppzw
|
||||
cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT
|
||||
sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd
|
||||
gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB
|
||||
RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq
|
||||
NFMRRpHPgzszGppG
|
||||
WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt
|
||||
ppDMpdMfSfSSNtlwqbqwwq
|
||||
dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ
|
||||
jrqRqfNNhrVvcTVdpTscpd
|
||||
tGWBlLggWGddTspZZd
|
||||
JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH
|
||||
GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF
|
||||
nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj
|
||||
SQQHSttRqggmlVsNcvWdRvbWPN
|
||||
WLNLCWLsSJgHFrSHrM
|
||||
gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR
|
||||
dmmzzqZdDqqTLLwjgZgNljws
|
||||
TCqsDHssmDsDGVGlVcMccGDV
|
||||
FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN
|
||||
PpbLLmpgbRzqpCHwChQqwh
|
||||
lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ
|
||||
ScCLzdCZdbLSbFdFqvDDdGMQGQ
|
||||
bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV
|
||||
GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ
|
||||
STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR
|
||||
DzSvzstnszMnjQcqggjPqQBcqq
|
||||
BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp
|
||||
mnrJVmRhhvJVcHtsGHMCnZCPZM
|
||||
bvSmVbRhbgmmSJflzNLrzqzfWfqBWr
|
||||
qsZLqqFNhfrGnJFv
|
||||
DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM
|
||||
lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL
|
||||
ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj
|
||||
qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt
|
||||
vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV
|
||||
PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW
|
||||
hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc
|
||||
dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP
|
||||
pcphpdrWDmTgHWMtRWqHRVVH
|
||||
SbGcGGQnvNQGvsjBtVHBLjvqVPVB
|
||||
lzbQCzbZllSzQslpCJpJJDggcggfDT
|
||||
ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq
|
||||
QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc
|
||||
ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC
|
||||
NBnrNHQHBscvhfBM
|
||||
bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS
|
||||
WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr
|
||||
lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd
|
||||
pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd
|
||||
mDTZvTqtDDHttRPcqhQlwgGlghbqBh
|
||||
DTspTqssqTbdmCMwVmnmlfCD
|
||||
PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll
|
||||
RFztFjjqjQFQTbdTbQ
|
||||
hTFSVSdhMMVMFjjgbthcbzczcg
|
||||
DvwCJVJWWJDRnfmbDmccfmmgfb
|
||||
QrJvPGWWnpVMqdZsZpqM
|
||||
gRLcHbgnfpgpJjlqqp
|
||||
SFwrTHFBqlZtBPZq
|
||||
HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL
|
||||
PpMgDMDnsWSnjBQnrjbn
|
||||
LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR
|
||||
FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt
|
90
2022/4.c
Normal file
90
2022/4.c
Normal file
|
@ -0,0 +1,90 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
struct Assignment {
|
||||
char *range;
|
||||
int start;
|
||||
int end;
|
||||
};
|
||||
|
||||
// Split each line into 2 strings representing the assignment range for each elf
|
||||
void parse_assignments(char *assignments, struct Assignment *elf1,
|
||||
struct Assignment *elf2) {
|
||||
|
||||
elf1->range = strtok(assignments, ",");
|
||||
elf2->range = strtok(NULL, ",");
|
||||
}
|
||||
|
||||
// Split each assignment range into a start and end
|
||||
void parse_sections(struct Assignment *elf) {
|
||||
elf->start = atoi(strtok(elf->range, "-,"));
|
||||
elf->end = atoi(strtok(NULL, "-,"));
|
||||
}
|
||||
|
||||
// Count the number of assignments that fully contain the other
|
||||
void count_subsets(int *count, struct Assignment *elf1,
|
||||
struct Assignment *elf2) {
|
||||
|
||||
if ((elf1->start >= elf2->start && elf1->end <= elf2->end) ||
|
||||
(elf2->start >= elf1->start && elf2->end <= elf1->end)) {
|
||||
*count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Count the number of assignments with any overlapping sections
|
||||
void count_overlaps(int *count, struct Assignment *elf1,
|
||||
struct Assignment *elf2) {
|
||||
|
||||
if ((elf1->start <= elf2->end && elf1->end >= elf2->start) ||
|
||||
(elf2->start <= elf1->end && elf2->end >= elf1->start)) {
|
||||
*count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "USAGE: %s input_file\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *file = fopen(argv[1], "r");
|
||||
if (!file) {
|
||||
perror("fopen");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int part1_count = 0;
|
||||
int part2_count = 0;
|
||||
char assignments[16] = {0};
|
||||
|
||||
while (fgets(assignments, sizeof assignments / sizeof *assignments, file)) {
|
||||
|
||||
if (strlen(assignments) == 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
struct Assignment elf1;
|
||||
struct Assignment elf2;
|
||||
|
||||
assignments[strlen(assignments) - 1] = '\0';
|
||||
|
||||
// split input into starting and ending points
|
||||
parse_assignments(assignments, &elf1, &elf2);
|
||||
parse_sections(&elf1);
|
||||
parse_sections(&elf2);
|
||||
|
||||
// Part 1 - count sections that fully are fully contained by another
|
||||
count_subsets(&part1_count, &elf1, &elf2);
|
||||
|
||||
// Part 2 - count all overlapping sections
|
||||
count_overlaps(&part2_count, &elf1, &elf2);
|
||||
}
|
||||
|
||||
printf("Part 1 - %d ranges fully contain another\n", part1_count);
|
||||
printf("part 2 - %d assignments overlap\n", part2_count);
|
||||
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
1000
2022/4.txt
Normal file
1000
2022/4.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue