1
+ // Read my README in shared/JohnnyJayJay
2
+
3
+ #include <stdio.h>
4
+ #include <stdlib.h>
5
+ #include "../../../shared/JohnnyJayJay/aoc.h"
6
+
7
+ int find_value (char * desc , int length , char lower , char upper ) {
8
+ int min = 0 ;
9
+ int delta = 1 << length ;
10
+ for (int i = 0 ; i < length ; i ++ ) {
11
+ delta /= 2 ;
12
+ if (desc [i ] == upper ) {
13
+ min += delta ;
14
+ }
15
+ }
16
+ return min ;
17
+ }
18
+
19
+ int intcmp (const void * one , const void * two ) {
20
+ int a = * ((int * ) one );
21
+ int b = * ((int * ) two );
22
+ if (a == b ) {
23
+ return 0 ;
24
+ } else if (a < b ) {
25
+ return -1 ;
26
+ } else {
27
+ return 1 ;
28
+ }
29
+ }
30
+
31
+ int main (int argc , char * * argv ) {
32
+ FILE * file = fopen (argv [1 ], "r" );
33
+ int lines = count_lines (file );
34
+ char row_desc [8 ];
35
+ char column_desc [4 ];
36
+ int * passes = malloc (sizeof (int ) * lines );
37
+ for (int i = 0 ; i < lines ; i ++ ) {
38
+ fscanf (file , "%7s%3s" , row_desc , column_desc );
39
+ int row = find_value (row_desc , 7 , 'F' , 'B' );
40
+ int column = find_value (column_desc , 3 , 'L' , 'R' );
41
+ passes [i ] = row * 8 + column ;
42
+ }
43
+ qsort (passes , lines , sizeof (int ), & intcmp );
44
+ int max_seat_id = passes [lines - 1 ];
45
+ printf ("Highest seat id: %d\n" , max_seat_id );
46
+ int own_seat_id = 0 ;
47
+ for (int i = 0 ; i < lines - 1 ; i ++ ) {
48
+ int first = passes [i ];
49
+ int second = passes [i + 1 ];
50
+ if (abs (first - second ) == 2 ) {
51
+ own_seat_id = first + 1 ;
52
+ break ;
53
+ }
54
+ }
55
+ printf ("%d\n" , lines );
56
+ printf ("Own seat id: %d\n" , own_seat_id );
57
+ }
58
+
59
+
60
+
0 commit comments