summaryrefslogtreecommitdiff
path: root/5
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2020-12-05 15:00:00 +0100
committerBond_009 <bond.009@outlook.com>2020-12-05 15:00:00 +0100
commit4f3827b3165ec19abcd9e5a5892cf00c0db893ed (patch)
tree8a693e24461e7a7cd2a1d9f0e78b492586136481 /5
parent2933d3b507b5baae0bdef3a644e6f7275625cea2 (diff)
Update solution day 5 for dodona
Diffstat (limited to '5')
-rw-r--r--5/part1.c19
-rw-r--r--5/part2.c16
-rw-r--r--5/part2_fast.c40
3 files changed, 56 insertions, 19 deletions
diff --git a/5/part1.c b/5/part1.c
index 3ff44a9..5b45083 100644
--- a/5/part1.c
+++ b/5/part1.c
@@ -3,7 +3,7 @@
#define COLUMNS 8
#define ROWS 128
-int get_seat_id(const char *seat)
+int seat_id(const char *seat)
{
int row = 0;
int row_lower = 0;
@@ -55,21 +55,26 @@ int get_seat_id(const char *seat)
return row * COLUMNS + column;
}
-int main(int argc, char *argv[])
+int highest_seat_id(const char *filename)
{
- FILE *file = fopen(argv[1], "r");
+ FILE *file = fopen(filename, "r");
// Include space for newline and string terminator
- char buffer[128] = { 0 };
+ char buffer[16] = { 0 };
int max = 0;
- while (fgets(buffer, 128, file)) {
- int tmp = get_seat_id(buffer);
+ while (fgets(buffer, 16, file)) {
+ int tmp = seat_id(buffer);
if (tmp > max) {
max = tmp;
}
}
- printf("%i\n", max);
+ return max;
+}
+
+int main(int argc, char *argv[])
+{
+ printf("%i\n", highest_seat_id(argv[1]));
}
diff --git a/5/part2.c b/5/part2.c
index 4c907e5..ac74224 100644
--- a/5/part2.c
+++ b/5/part2.c
@@ -3,7 +3,7 @@
#define COLUMNS 8
#define ROWS 128
-int get_seat_id(const char *seat)
+int seat_id(const char *seat)
{
int row = 0;
int row_lower = 0;
@@ -55,9 +55,9 @@ int get_seat_id(const char *seat)
return row * COLUMNS + column;
}
-int main(int argc, char *argv[])
+int missing_seat_id(const char *filename)
{
- FILE *file = fopen(argv[1], "r");
+ FILE *file = fopen(filename, "r");
char table[COLUMNS * ROWS] = { 0 };
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
int min = __INT_MAX__;
int max = 0;
while (fgets(buffer, 16, file)) {
- int tmp = get_seat_id(buffer);
+ int tmp = seat_id(buffer);
if (tmp > max)
{
max = tmp;
@@ -83,8 +83,12 @@ int main(int argc, char *argv[])
for (int i = min + 1; i < max; i++) {
if (table[i] == 0) {
- printf("%i", i);
- break;
+ return i;
}
}
}
+
+int main(int argc, char *argv[])
+{
+ printf("%i", missing_seat_id(argv[1]));
+}
diff --git a/5/part2_fast.c b/5/part2_fast.c
index fe47ec2..330244e 100644
--- a/5/part2_fast.c
+++ b/5/part2_fast.c
@@ -3,7 +3,31 @@
#define COLUMNS 8
#define ROWS 128
-int get_seat_id(const char *seat)
+int row(const char *seat)
+{
+ int end_res = 0;
+ for (int i = 0; i < 7; i++) {
+ if (seat[i] == 'B') {
+ end_res |= 0x40 >> i;
+ }
+ }
+
+ return end_res;
+}
+
+int column(const char *seat)
+{
+ int end_res = 0;
+ for (int i = 7; i < 10; i++) {
+ if (seat[i] == 'R') {
+ end_res |= 0x200 >> i;
+ }
+ }
+
+ return end_res;
+}
+
+int seat_id(const char *seat)
{
int end_res = 0;
int i = 0;
@@ -22,9 +46,9 @@ int get_seat_id(const char *seat)
return end_res;
}
-int main(int argc, char *argv[])
+int missing_seat_id(const char *filename)
{
- FILE *file = fopen(argv[1], "r");
+ FILE *file = fopen(filename, "r");
char table[COLUMNS * ROWS] = { 0 };
@@ -34,7 +58,7 @@ int main(int argc, char *argv[])
int min = __INT_MAX__;
int max = 0;
while (fgets(buffer, 16, file)) {
- int tmp = get_seat_id(buffer);
+ int tmp = seat_id(buffer);
if (tmp > max)
{
max = tmp;
@@ -50,8 +74,12 @@ int main(int argc, char *argv[])
for (int i = min + 1; i < max; i++) {
if (table[i] == 0) {
- printf("%i", i);
- break;
+ return i;
}
}
}
+
+int main(int argc, char *argv[])
+{
+ printf("%i", missing_seat_id(argv[1]));
+}