mirror of
https://codeberg.org/andyscott/advent-of-code.git
synced 2024-12-22 09:33:10 -05:00
Compare commits
5 commits
46af70bb90
...
9bded90d7b
Author | SHA1 | Date | |
---|---|---|---|
9bded90d7b | |||
4288f36403 | |||
0e70725656 | |||
b0a7b6c07d | |||
42c37ff1c8 |
10 changed files with 7139 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
220
2022/5.c
Normal file
220
2022/5.c
Normal file
|
@ -0,0 +1,220 @@
|
|||
#include <ctype.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_LINE 512
|
||||
#define NUM_LINES 512
|
||||
#define NUM_STACKS 9
|
||||
|
||||
struct Stack {
|
||||
int top;
|
||||
char items[MAX_LINE];
|
||||
};
|
||||
typedef struct Stack stack;
|
||||
|
||||
// Push onto a stack
|
||||
void push(stack *st, char crate) {
|
||||
if (st->top == MAX_LINE) {
|
||||
fprintf(stderr, "Stack is full\n");
|
||||
} else {
|
||||
st->top++;
|
||||
st->items[st->top] = crate;
|
||||
}
|
||||
}
|
||||
|
||||
// Pop from a stack
|
||||
char pop(stack *st) {
|
||||
char c = '\0';
|
||||
if (st->top == -1) {
|
||||
fprintf(stderr, "Stack is empty\n");
|
||||
return -1;
|
||||
} else {
|
||||
c = st->items[st->top];
|
||||
st->items[st->top] = '\0';
|
||||
st->top--;
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
// Prints top index, top item, and each stack
|
||||
void print_crates(stack **crates) {
|
||||
for (size_t i = 0; i < NUM_STACKS; i++) {
|
||||
printf("\nStack %lu - Top: %d"
|
||||
"\n Top Crate: %c"
|
||||
"\n Crates: %s\n",
|
||||
i + 1, crates[i]->top, crates[i]->items[crates[i]->top],
|
||||
crates[i]->items);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
// Allocate memeory and initialize stacks of crates with their initial order
|
||||
stack **crates_init() {
|
||||
|
||||
stack **crates = calloc(NUM_STACKS, sizeof(stack *));
|
||||
if (crates == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < NUM_STACKS; i++) {
|
||||
crates[i] = (stack *)malloc(sizeof(stack));
|
||||
if (crates[i] == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
crates[i]->top = -1;
|
||||
memset(crates[i]->items, 0, MAX_LINE);
|
||||
}
|
||||
|
||||
crates[0]->top = 7;
|
||||
strcpy(crates[0]->items, "PFMQWGRT");
|
||||
crates[1]->top = 2;
|
||||
strcpy(crates[1]->items, "HFR");
|
||||
crates[2]->top = 7;
|
||||
strcpy(crates[2]->items, "PZRVGHSD");
|
||||
crates[3]->top = 6;
|
||||
strcpy(crates[3]->items, "QHPBFWG");
|
||||
crates[4]->top = 4;
|
||||
strcpy(crates[4]->items, "PSMJH");
|
||||
crates[5]->top = 7;
|
||||
strcpy(crates[5]->items, "MZTHSRPL");
|
||||
crates[6]->top = 5;
|
||||
strcpy(crates[6]->items, "PTHNML");
|
||||
crates[7]->top = 3;
|
||||
strcpy(crates[7]->items, "FDQR");
|
||||
crates[8]->top = 6;
|
||||
strcpy(crates[8]->items, "DSCNLPH");
|
||||
|
||||
return crates;
|
||||
}
|
||||
|
||||
// Parses moves from input file and stores in an array
|
||||
void parse_moves(FILE *file, int moves[NUM_LINES][3], size_t *line_num) {
|
||||
|
||||
int idx = 0;
|
||||
char line[MAX_LINE] = {0};
|
||||
|
||||
while (fgets(line, MAX_LINE, file) != NULL) {
|
||||
|
||||
if (line[0] != 'm') {
|
||||
memset(line, 0, MAX_LINE);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < strlen(line); i++) {
|
||||
if (isdigit(line[i])) {
|
||||
if (isdigit(line[i + 1])) {
|
||||
char temp[2];
|
||||
temp[0] = line[i];
|
||||
temp[1] = line[i + 1];
|
||||
moves[*line_num][idx] = atoi(temp);
|
||||
i++;
|
||||
} else {
|
||||
moves[*line_num][idx] = atoi(&line[i]);
|
||||
}
|
||||
idx++;
|
||||
if (idx > 2) {
|
||||
*line_num += 1;
|
||||
idx = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
memset(line, 0, MAX_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
// Part 1 - Processes each move stored in the moves array one crate at a time
|
||||
void part1_moves(stack **crates, int moves[NUM_LINES][3], size_t move_count) {
|
||||
|
||||
size_t idx = 0;
|
||||
while (idx <= move_count) {
|
||||
|
||||
for (int i = 0; i < moves[idx][0]; i++) {
|
||||
|
||||
char c = pop(crates[moves[idx][1] - 1]);
|
||||
if (c == -1) {
|
||||
fprintf(stderr, "part1_moves: move num: %lu", idx);
|
||||
continue;
|
||||
}
|
||||
|
||||
push(crates[moves[idx][2] - 1], c);
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
void crates_free(stack **crates) {
|
||||
for (size_t i = 0; i < NUM_STACKS; i++) {
|
||||
free(crates[i]);
|
||||
}
|
||||
free(crates);
|
||||
}
|
||||
|
||||
// Part 2 - Processes the moves array multiple crates at a time
|
||||
void part2_moves(stack **crates, int moves[NUM_LINES][3], size_t move_count) {
|
||||
|
||||
size_t idx = 0;
|
||||
while (idx <= move_count) {
|
||||
|
||||
char c_arr[moves[idx][0]];
|
||||
memset(c_arr, 0, moves[idx][0]);
|
||||
|
||||
for (int i = 0; i < moves[idx][0]; i++) {
|
||||
c_arr[i] = pop(crates[moves[idx][1] - 1]);
|
||||
if (c_arr[i] == -1) {
|
||||
fprintf(stderr, "part2_moves: move num: %lu", idx);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = moves[idx][0] - 1; j >= 0; j--) {
|
||||
push(crates[moves[idx][2] - 1], c_arr[j]);
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
size_t move_count = 0;
|
||||
int moves[NUM_LINES][3] = {0};
|
||||
stack **crates = crates_init();
|
||||
if (crates == NULL) {
|
||||
fprintf(stderr, "Part 2: unable to allocate memory for crates\n");
|
||||
fclose(file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("\n--- PART 1 ---\n");
|
||||
parse_moves(file, moves, &move_count);
|
||||
part1_moves(crates, moves, move_count);
|
||||
print_crates(crates);
|
||||
|
||||
printf("\n--- PART 2 ---\n");
|
||||
crates_free(crates);
|
||||
crates = crates_init();
|
||||
if (crates == NULL) {
|
||||
fprintf(stderr, "Part 2: unable to allocate memory for crates\n");
|
||||
fclose(file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
part2_moves(crates, moves, move_count);
|
||||
print_crates(crates);
|
||||
crates_free(crates);
|
||||
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
512
2022/5.txt
Normal file
512
2022/5.txt
Normal file
|
@ -0,0 +1,512 @@
|
|||
[T] [D] [L]
|
||||
[R] [S] [G] [P] [H]
|
||||
[G] [H] [W] [R] [L] [P]
|
||||
[W] [G] [F] [H] [S] [M] [L]
|
||||
[Q] [V] [B] [J] [H] [N] [R] [N]
|
||||
[M] [R] [R] [P] [M] [T] [H] [Q] [C]
|
||||
[F] [F] [Z] [H] [S] [Z] [T] [D] [S]
|
||||
[P] [H] [P] [Q] [P] [M] [P] [F] [D]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 3 from 8 to 9
|
||||
move 2 from 2 to 8
|
||||
move 5 from 4 to 2
|
||||
move 7 from 1 to 4
|
||||
move 3 from 8 to 2
|
||||
move 3 from 2 to 7
|
||||
move 1 from 7 to 4
|
||||
move 3 from 2 to 9
|
||||
move 4 from 7 to 9
|
||||
move 1 from 5 to 2
|
||||
move 2 from 3 to 4
|
||||
move 5 from 9 to 5
|
||||
move 6 from 9 to 3
|
||||
move 5 from 9 to 5
|
||||
move 1 from 9 to 7
|
||||
move 2 from 3 to 1
|
||||
move 7 from 3 to 9
|
||||
move 2 from 7 to 2
|
||||
move 5 from 2 to 4
|
||||
move 1 from 2 to 9
|
||||
move 2 from 1 to 9
|
||||
move 7 from 6 to 1
|
||||
move 2 from 7 to 3
|
||||
move 2 from 3 to 9
|
||||
move 1 from 7 to 4
|
||||
move 1 from 9 to 2
|
||||
move 3 from 1 to 8
|
||||
move 2 from 3 to 4
|
||||
move 5 from 9 to 2
|
||||
move 1 from 3 to 9
|
||||
move 8 from 5 to 7
|
||||
move 1 from 6 to 1
|
||||
move 15 from 4 to 1
|
||||
move 4 from 2 to 5
|
||||
move 5 from 9 to 7
|
||||
move 1 from 9 to 5
|
||||
move 5 from 1 to 2
|
||||
move 3 from 8 to 9
|
||||
move 1 from 7 to 6
|
||||
move 11 from 1 to 2
|
||||
move 7 from 5 to 3
|
||||
move 4 from 2 to 6
|
||||
move 7 from 3 to 4
|
||||
move 3 from 5 to 9
|
||||
move 2 from 2 to 5
|
||||
move 5 from 1 to 8
|
||||
move 2 from 6 to 8
|
||||
move 3 from 8 to 9
|
||||
move 9 from 4 to 9
|
||||
move 9 from 7 to 4
|
||||
move 2 from 8 to 1
|
||||
move 1 from 8 to 7
|
||||
move 6 from 2 to 7
|
||||
move 5 from 2 to 4
|
||||
move 5 from 7 to 2
|
||||
move 2 from 1 to 7
|
||||
move 2 from 6 to 4
|
||||
move 7 from 7 to 1
|
||||
move 3 from 2 to 6
|
||||
move 1 from 8 to 7
|
||||
move 2 from 9 to 3
|
||||
move 2 from 3 to 1
|
||||
move 1 from 2 to 5
|
||||
move 4 from 6 to 5
|
||||
move 2 from 2 to 3
|
||||
move 3 from 5 to 7
|
||||
move 1 from 5 to 3
|
||||
move 9 from 1 to 7
|
||||
move 2 from 9 to 5
|
||||
move 13 from 4 to 1
|
||||
move 5 from 7 to 2
|
||||
move 3 from 3 to 1
|
||||
move 2 from 2 to 9
|
||||
move 1 from 2 to 7
|
||||
move 5 from 5 to 6
|
||||
move 2 from 2 to 4
|
||||
move 5 from 1 to 3
|
||||
move 9 from 7 to 8
|
||||
move 2 from 9 to 5
|
||||
move 3 from 5 to 4
|
||||
move 5 from 9 to 2
|
||||
move 10 from 4 to 8
|
||||
move 1 from 4 to 1
|
||||
move 2 from 8 to 4
|
||||
move 4 from 8 to 2
|
||||
move 3 from 6 to 8
|
||||
move 7 from 8 to 7
|
||||
move 10 from 9 to 3
|
||||
move 7 from 3 to 2
|
||||
move 11 from 2 to 3
|
||||
move 13 from 3 to 9
|
||||
move 1 from 6 to 3
|
||||
move 1 from 1 to 2
|
||||
move 1 from 2 to 8
|
||||
move 3 from 3 to 4
|
||||
move 1 from 2 to 9
|
||||
move 1 from 4 to 1
|
||||
move 10 from 8 to 3
|
||||
move 11 from 9 to 7
|
||||
move 1 from 6 to 2
|
||||
move 14 from 7 to 1
|
||||
move 2 from 2 to 9
|
||||
move 4 from 7 to 6
|
||||
move 1 from 2 to 4
|
||||
move 3 from 4 to 2
|
||||
move 4 from 2 to 9
|
||||
move 10 from 3 to 4
|
||||
move 3 from 6 to 1
|
||||
move 5 from 9 to 5
|
||||
move 5 from 5 to 8
|
||||
move 1 from 9 to 7
|
||||
move 2 from 9 to 6
|
||||
move 1 from 9 to 8
|
||||
move 2 from 4 to 8
|
||||
move 1 from 4 to 5
|
||||
move 2 from 3 to 1
|
||||
move 2 from 3 to 7
|
||||
move 27 from 1 to 2
|
||||
move 2 from 7 to 1
|
||||
move 9 from 4 to 6
|
||||
move 9 from 6 to 5
|
||||
move 5 from 8 to 6
|
||||
move 26 from 2 to 3
|
||||
move 1 from 2 to 5
|
||||
move 1 from 2 to 7
|
||||
move 1 from 8 to 4
|
||||
move 1 from 7 to 8
|
||||
move 24 from 3 to 5
|
||||
move 1 from 8 to 5
|
||||
move 1 from 4 to 3
|
||||
move 1 from 7 to 1
|
||||
move 1 from 8 to 9
|
||||
move 7 from 1 to 7
|
||||
move 8 from 6 to 4
|
||||
move 4 from 7 to 6
|
||||
move 1 from 3 to 9
|
||||
move 2 from 9 to 1
|
||||
move 3 from 7 to 9
|
||||
move 8 from 4 to 6
|
||||
move 3 from 9 to 1
|
||||
move 1 from 3 to 6
|
||||
move 1 from 8 to 2
|
||||
move 10 from 5 to 4
|
||||
move 1 from 3 to 8
|
||||
move 13 from 5 to 3
|
||||
move 1 from 2 to 9
|
||||
move 1 from 8 to 9
|
||||
move 1 from 3 to 8
|
||||
move 1 from 9 to 2
|
||||
move 3 from 6 to 9
|
||||
move 7 from 4 to 9
|
||||
move 4 from 3 to 9
|
||||
move 2 from 6 to 8
|
||||
move 2 from 4 to 5
|
||||
move 10 from 9 to 3
|
||||
move 1 from 1 to 9
|
||||
move 1 from 4 to 8
|
||||
move 1 from 1 to 4
|
||||
move 1 from 4 to 5
|
||||
move 4 from 6 to 3
|
||||
move 1 from 9 to 5
|
||||
move 1 from 6 to 9
|
||||
move 2 from 6 to 5
|
||||
move 1 from 9 to 2
|
||||
move 1 from 6 to 7
|
||||
move 18 from 5 to 2
|
||||
move 22 from 3 to 7
|
||||
move 19 from 7 to 1
|
||||
move 3 from 8 to 5
|
||||
move 4 from 9 to 3
|
||||
move 2 from 7 to 2
|
||||
move 1 from 8 to 1
|
||||
move 19 from 1 to 3
|
||||
move 2 from 7 to 5
|
||||
move 13 from 3 to 9
|
||||
move 4 from 1 to 2
|
||||
move 3 from 5 to 1
|
||||
move 11 from 9 to 1
|
||||
move 11 from 2 to 8
|
||||
move 3 from 9 to 3
|
||||
move 3 from 5 to 2
|
||||
move 2 from 1 to 4
|
||||
move 5 from 2 to 7
|
||||
move 12 from 1 to 5
|
||||
move 2 from 4 to 5
|
||||
move 9 from 5 to 8
|
||||
move 1 from 5 to 3
|
||||
move 4 from 2 to 3
|
||||
move 2 from 7 to 5
|
||||
move 6 from 2 to 8
|
||||
move 17 from 8 to 9
|
||||
move 2 from 9 to 6
|
||||
move 2 from 7 to 1
|
||||
move 15 from 9 to 6
|
||||
move 2 from 2 to 4
|
||||
move 9 from 8 to 5
|
||||
move 2 from 1 to 3
|
||||
move 12 from 6 to 2
|
||||
move 2 from 3 to 9
|
||||
move 5 from 6 to 3
|
||||
move 4 from 5 to 3
|
||||
move 11 from 3 to 4
|
||||
move 2 from 9 to 4
|
||||
move 6 from 5 to 2
|
||||
move 13 from 4 to 3
|
||||
move 1 from 4 to 5
|
||||
move 1 from 4 to 8
|
||||
move 18 from 2 to 6
|
||||
move 2 from 5 to 3
|
||||
move 1 from 8 to 3
|
||||
move 1 from 2 to 5
|
||||
move 1 from 7 to 8
|
||||
move 28 from 3 to 6
|
||||
move 2 from 3 to 4
|
||||
move 3 from 5 to 9
|
||||
move 2 from 5 to 9
|
||||
move 3 from 9 to 3
|
||||
move 5 from 3 to 4
|
||||
move 1 from 9 to 3
|
||||
move 1 from 9 to 1
|
||||
move 1 from 3 to 4
|
||||
move 45 from 6 to 2
|
||||
move 1 from 8 to 3
|
||||
move 2 from 4 to 6
|
||||
move 5 from 4 to 2
|
||||
move 1 from 3 to 7
|
||||
move 3 from 2 to 9
|
||||
move 1 from 4 to 8
|
||||
move 3 from 6 to 1
|
||||
move 42 from 2 to 8
|
||||
move 2 from 9 to 2
|
||||
move 4 from 2 to 6
|
||||
move 2 from 2 to 7
|
||||
move 1 from 9 to 6
|
||||
move 2 from 8 to 9
|
||||
move 4 from 1 to 8
|
||||
move 1 from 6 to 4
|
||||
move 1 from 4 to 8
|
||||
move 1 from 2 to 5
|
||||
move 3 from 7 to 4
|
||||
move 39 from 8 to 3
|
||||
move 7 from 8 to 5
|
||||
move 8 from 5 to 7
|
||||
move 35 from 3 to 1
|
||||
move 4 from 3 to 7
|
||||
move 10 from 7 to 2
|
||||
move 2 from 9 to 6
|
||||
move 3 from 4 to 2
|
||||
move 1 from 7 to 5
|
||||
move 1 from 7 to 8
|
||||
move 1 from 5 to 4
|
||||
move 12 from 1 to 6
|
||||
move 1 from 8 to 1
|
||||
move 1 from 4 to 5
|
||||
move 14 from 6 to 8
|
||||
move 9 from 8 to 6
|
||||
move 5 from 6 to 1
|
||||
move 11 from 2 to 9
|
||||
move 1 from 9 to 8
|
||||
move 6 from 8 to 3
|
||||
move 6 from 9 to 2
|
||||
move 8 from 1 to 9
|
||||
move 3 from 3 to 6
|
||||
move 7 from 1 to 4
|
||||
move 1 from 5 to 9
|
||||
move 8 from 9 to 8
|
||||
move 7 from 6 to 8
|
||||
move 1 from 9 to 3
|
||||
move 3 from 6 to 4
|
||||
move 3 from 9 to 1
|
||||
move 4 from 3 to 2
|
||||
move 1 from 6 to 7
|
||||
move 1 from 4 to 2
|
||||
move 13 from 1 to 7
|
||||
move 6 from 4 to 8
|
||||
move 1 from 7 to 3
|
||||
move 1 from 4 to 6
|
||||
move 1 from 9 to 5
|
||||
move 1 from 3 to 5
|
||||
move 19 from 8 to 9
|
||||
move 1 from 6 to 5
|
||||
move 6 from 9 to 2
|
||||
move 2 from 5 to 8
|
||||
move 1 from 5 to 2
|
||||
move 4 from 1 to 4
|
||||
move 8 from 9 to 4
|
||||
move 3 from 9 to 8
|
||||
move 2 from 9 to 1
|
||||
move 6 from 7 to 5
|
||||
move 12 from 4 to 2
|
||||
move 6 from 8 to 3
|
||||
move 1 from 4 to 1
|
||||
move 1 from 3 to 1
|
||||
move 13 from 2 to 3
|
||||
move 4 from 5 to 3
|
||||
move 1 from 4 to 9
|
||||
move 1 from 8 to 9
|
||||
move 12 from 3 to 2
|
||||
move 1 from 9 to 1
|
||||
move 2 from 5 to 9
|
||||
move 3 from 9 to 5
|
||||
move 1 from 7 to 5
|
||||
move 3 from 7 to 3
|
||||
move 1 from 5 to 4
|
||||
move 1 from 5 to 8
|
||||
move 9 from 2 to 3
|
||||
move 2 from 2 to 3
|
||||
move 3 from 1 to 9
|
||||
move 1 from 8 to 9
|
||||
move 3 from 9 to 1
|
||||
move 9 from 2 to 6
|
||||
move 1 from 9 to 5
|
||||
move 6 from 2 to 3
|
||||
move 2 from 6 to 9
|
||||
move 3 from 6 to 3
|
||||
move 1 from 4 to 3
|
||||
move 2 from 9 to 6
|
||||
move 2 from 7 to 2
|
||||
move 2 from 2 to 8
|
||||
move 24 from 3 to 7
|
||||
move 2 from 5 to 6
|
||||
move 2 from 8 to 2
|
||||
move 7 from 2 to 8
|
||||
move 8 from 3 to 6
|
||||
move 2 from 1 to 3
|
||||
move 1 from 1 to 2
|
||||
move 1 from 5 to 2
|
||||
move 15 from 7 to 4
|
||||
move 9 from 7 to 9
|
||||
move 7 from 9 to 1
|
||||
move 5 from 8 to 1
|
||||
move 4 from 1 to 4
|
||||
move 19 from 4 to 3
|
||||
move 22 from 3 to 5
|
||||
move 1 from 7 to 5
|
||||
move 9 from 5 to 4
|
||||
move 6 from 1 to 3
|
||||
move 6 from 3 to 1
|
||||
move 4 from 5 to 4
|
||||
move 1 from 2 to 1
|
||||
move 1 from 2 to 6
|
||||
move 4 from 6 to 1
|
||||
move 1 from 3 to 6
|
||||
move 3 from 6 to 3
|
||||
move 2 from 9 to 8
|
||||
move 2 from 5 to 3
|
||||
move 2 from 5 to 1
|
||||
move 10 from 6 to 4
|
||||
move 4 from 4 to 9
|
||||
move 7 from 4 to 3
|
||||
move 2 from 8 to 7
|
||||
move 4 from 9 to 3
|
||||
move 5 from 5 to 7
|
||||
move 1 from 5 to 1
|
||||
move 1 from 6 to 3
|
||||
move 1 from 8 to 4
|
||||
move 1 from 8 to 3
|
||||
move 13 from 4 to 5
|
||||
move 1 from 1 to 8
|
||||
move 6 from 5 to 3
|
||||
move 1 from 7 to 6
|
||||
move 5 from 7 to 6
|
||||
move 9 from 1 to 8
|
||||
move 1 from 8 to 4
|
||||
move 1 from 7 to 1
|
||||
move 1 from 4 to 1
|
||||
move 5 from 3 to 7
|
||||
move 3 from 7 to 9
|
||||
move 1 from 5 to 4
|
||||
move 6 from 8 to 6
|
||||
move 1 from 9 to 3
|
||||
move 2 from 9 to 5
|
||||
move 7 from 5 to 9
|
||||
move 1 from 7 to 5
|
||||
move 2 from 5 to 3
|
||||
move 10 from 6 to 8
|
||||
move 2 from 6 to 1
|
||||
move 1 from 4 to 9
|
||||
move 1 from 7 to 5
|
||||
move 8 from 8 to 2
|
||||
move 1 from 1 to 7
|
||||
move 1 from 9 to 7
|
||||
move 1 from 5 to 1
|
||||
move 3 from 9 to 8
|
||||
move 7 from 8 to 7
|
||||
move 6 from 7 to 1
|
||||
move 1 from 8 to 7
|
||||
move 4 from 7 to 1
|
||||
move 16 from 3 to 7
|
||||
move 4 from 3 to 1
|
||||
move 5 from 7 to 8
|
||||
move 16 from 1 to 4
|
||||
move 9 from 1 to 7
|
||||
move 1 from 3 to 4
|
||||
move 15 from 4 to 8
|
||||
move 1 from 3 to 1
|
||||
move 2 from 1 to 6
|
||||
move 2 from 4 to 9
|
||||
move 17 from 8 to 2
|
||||
move 6 from 9 to 5
|
||||
move 8 from 7 to 8
|
||||
move 2 from 6 to 9
|
||||
move 4 from 5 to 7
|
||||
move 2 from 8 to 5
|
||||
move 1 from 5 to 9
|
||||
move 11 from 2 to 6
|
||||
move 4 from 6 to 1
|
||||
move 5 from 2 to 8
|
||||
move 2 from 9 to 2
|
||||
move 1 from 9 to 3
|
||||
move 3 from 1 to 8
|
||||
move 1 from 3 to 6
|
||||
move 7 from 6 to 9
|
||||
move 2 from 5 to 4
|
||||
move 6 from 7 to 4
|
||||
move 4 from 8 to 1
|
||||
move 1 from 5 to 2
|
||||
move 1 from 6 to 1
|
||||
move 7 from 9 to 8
|
||||
move 2 from 7 to 9
|
||||
move 9 from 2 to 9
|
||||
move 5 from 9 to 3
|
||||
move 3 from 2 to 8
|
||||
move 4 from 8 to 7
|
||||
move 9 from 7 to 2
|
||||
move 3 from 1 to 3
|
||||
move 14 from 8 to 1
|
||||
move 2 from 8 to 3
|
||||
move 1 from 9 to 4
|
||||
move 3 from 7 to 9
|
||||
move 8 from 3 to 9
|
||||
move 2 from 2 to 7
|
||||
move 12 from 1 to 8
|
||||
move 4 from 1 to 6
|
||||
move 2 from 6 to 7
|
||||
move 1 from 6 to 7
|
||||
move 9 from 4 to 7
|
||||
move 9 from 7 to 4
|
||||
move 1 from 1 to 6
|
||||
move 2 from 3 to 6
|
||||
move 2 from 6 to 8
|
||||
move 12 from 9 to 8
|
||||
move 2 from 6 to 9
|
||||
move 2 from 9 to 7
|
||||
move 1 from 8 to 5
|
||||
move 5 from 7 to 5
|
||||
move 1 from 9 to 1
|
||||
move 3 from 4 to 1
|
||||
move 5 from 4 to 8
|
||||
move 4 from 1 to 7
|
||||
move 1 from 4 to 2
|
||||
move 19 from 8 to 4
|
||||
move 2 from 7 to 5
|
||||
move 14 from 8 to 5
|
||||
move 2 from 7 to 8
|
||||
move 3 from 9 to 8
|
||||
move 19 from 4 to 2
|
||||
move 9 from 2 to 4
|
||||
move 2 from 7 to 8
|
||||
move 15 from 5 to 9
|
||||
move 15 from 9 to 8
|
||||
move 1 from 5 to 9
|
||||
move 11 from 8 to 7
|
||||
move 4 from 5 to 8
|
||||
move 1 from 5 to 9
|
||||
move 2 from 9 to 5
|
||||
move 2 from 2 to 6
|
||||
move 14 from 2 to 9
|
||||
move 12 from 8 to 9
|
||||
move 3 from 8 to 4
|
||||
move 7 from 9 to 2
|
||||
move 4 from 7 to 9
|
||||
move 1 from 6 to 9
|
||||
move 1 from 7 to 5
|
||||
move 1 from 6 to 2
|
||||
move 3 from 5 to 4
|
||||
move 19 from 9 to 4
|
||||
move 1 from 5 to 1
|
||||
move 1 from 9 to 8
|
||||
move 1 from 1 to 7
|
||||
move 1 from 8 to 9
|
||||
move 4 from 7 to 2
|
||||
move 3 from 7 to 6
|
||||
move 18 from 4 to 2
|
||||
move 17 from 2 to 3
|
||||
move 2 from 6 to 8
|
||||
move 17 from 3 to 6
|
||||
move 13 from 2 to 1
|
||||
move 2 from 8 to 3
|
||||
move 2 from 2 to 9
|
||||
move 6 from 1 to 9
|
||||
move 1 from 3 to 4
|
||||
move 1 from 3 to 9
|
||||
move 8 from 6 to 4
|
||||
move 20 from 4 to 8
|
||||
move 3 from 4 to 8
|
||||
move 15 from 8 to 2
|
||||
move 11 from 2 to 6
|
||||
move 2 from 1 to 7
|
||||
move 7 from 9 to 8
|
||||
move 6 from 9 to 3
|
||||
move 1 from 6 to 5
|
Loading…
Reference in a new issue