638b4fad535435b78c3c98d2a0ff9c39ebfe9e52
10 int parse_draw(int draw
[])
13 if (fgets(buf
, 1000, stdin
) == NULL
)
17 tok
= strtok(buf
, ",");
19 draw
[i
++] = atoi(tok
);
20 tok
= strtok(NULL
, ",");
25 int parse_boards(struct board boards
[])
28 while(getchar() == '\n') {
29 for (int row
= 0; row
<5; row
++) {
30 for (int col
= 0; col
<5; col
++) {
31 char buf
[3] = {getchar(), getchar(), getchar()};
32 boards
[i
].numbers
[row
][col
] = atoi(buf
);
40 bool board_wins(struct board board
)
42 for (int row
= 0; row
<5; row
++) {
43 bool rowwin
= true, colwin
= true;
44 for (int col
= 0; col
<5 && (rowwin
|| colwin
); col
++) {
45 rowwin
&= board
.numbers
[row
][col
] == -1;
46 colwin
&= board
.numbers
[col
][row
] == -1;
57 int ndraws
= parse_draw(draws
);
59 struct board boards
[1000];
60 int nboards
= parse_boards(boards
);
62 struct board
*winner
= NULL
;
64 for (draw
= 0; draw
< ndraws
&& winner
== NULL
; draw
++) {
66 for (int board
= 0; board
< nboards
; board
++)
67 for (int row
= 0; row
<5; row
++)
68 for (int col
= 0; col
<5; col
++)
69 if (boards
[board
].numbers
[row
][col
] == draws
[draw
])
70 boards
[board
].numbers
[row
][col
] = -1;
72 for (int board
= 0; board
< nboards
&& winner
== NULL
; board
++)
73 if (board_wins(boards
[board
]))
74 winner
= &boards
[board
];
77 //Calculate sum of unmarked numbers
79 for (int row
= 0; row
<5; row
++)
80 for (int col
= 0; col
<5; col
++)
81 if (winner
->numbers
[row
][col
] != -1)
82 sum
+= winner
->numbers
[row
][col
];
84 printf("%d\n", sum
*draws
[draw
-1]);