Advent of Code 2022
· 阅读需 6 分钟
看群友聊天才知道有这样一个比赛:Advent of Code 2022
我的代码及数据仓库:https://github.com/Selflocking/Code/tree/master/others/AOC2022
比赛从12月1日开始,一直到圣诞节12月25日,每天发一道题,不限解题方法,只要最后答案,同时为了限制作弊,每个人拿到的数据不一样。
第一位解出题的人将获得100分,第二位获得99分,依次递减,最低递减到1。
Day 1: Calorie Counting
Part 1
大概意思是给你类似于如下的数据
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
数字被空行分隔开,求最大的数字和。 比如上面数据中,最大的数字和为:7000+8000+9000 = 24000
#include <iostream>
#include <string>
using namespace std;
int main() {
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
int ans = 0;
int tmp = 0;
string s;
while (getline(cin, s)) {
if (s.size() == 0) {
ans = max(ans, tmp);
tmp = 0;
} else {
tmp += stoi(s);
}
}
cout << ans;
fclose(stdin);
fclose(stdout);
return 0;
}
按ctrl+d
结束输入,得到答案。
Part 2
要求输出最大的三个数字和的和。
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> ans;
int main() {
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
// int ans = 0;
int tmp = 0;
string s;
while (getline(cin, s)) {
if (s.size() == 0) {
// ans = max(ans, tmp);
ans.emplace_back(tmp);
tmp = 0;
} else {
tmp += stoi(s);
}
}
sort(ans.begin(), ans.end());
cout << ans[ans.size() - 1] + ans[ans.size() - 2] + ans[ans.size() - 3]
<< endl;
// cout << ans;
fclose(stdin);
fclose(stdout);
return 0;
}
最后喜提2分,排名 119865。😥
Day 2: Rock Paper Scissors
Part 1
题目样例:
A Y
B X
C Z
A石头 B布 C剪刀 X石头 Y布 Z剪刀 石头 1 分,布 2 分,剪刀 3 分 输了 0 分,平局 3 分,赢了 6 分
故样例总共得15分。
if else 就完了
#include <iostream>
using namespace std;
// A石头 B布 C剪刀
// X石头 Y布 Z剪刀
// 石头 1 分,布 2 分,剪刀 3 分
// 输了 0 分,平局 3 分,赢了 6 分
int score = 0;
int main() {
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
char a, b;
while (cin >> a >> b) {
if (a == 'A') {
if (b == 'X') {
score += 1 + 3;
} else if (b == 'Y') {
score += 2 + 6;
} else {
score += 3 + 0;
}
} else if (a == 'B') {
if (b == 'X') {
score += 1 + 0;
} else if (b == 'Y') {
score += 2 + 3;
} else {
score += 3 + 6;
}
} else {
if (b == 'X') {
score += 1 + 6;
} else if (b == 'Y') {
score += 2 + 0;
} else {
score += 3 + 3;
}
}
}
cout << score << endl;
fclose(stdin);
fclose(stdout);
return 0;
}