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 bool board_wins(struct board board
)
27 for (int row
= 0; row
<5; row
++) {
28 bool rowwin
= true, colwin
= true;
29 for (int col
= 0; col
<5 && (rowwin
|| colwin
); col
++) {
30 rowwin
&= board
.numbers
[row
][col
] == -1;
31 colwin
&= board
.numbers
[col
][row
] == -1;
39 int parse_boards(struct board boards
[])
42 while(getchar() == '\n') {
43 for (int row
= 0; row
<5; row
++) {
44 for (int col
= 0; col
<5; col
++) {
45 char buf
[3] = {getchar(), getchar(), getchar()};
46 boards
[i
].numbers
[row
][col
] = atoi(buf
);
57 int ndraws
= parse_draw(draws
);
59 struct board boards
[1000];
60 int nboards
= parse_boards(boards
);
63 for (draw
= 0; draw
< ndraws
&& nboards
> 0; draw
++) {
65 for (int board
= 0; board
< nboards
; board
++)
66 for (int row
= 0; row
<5; row
++)
67 for (int col
= 0; col
<5; col
++)
68 if (boards
[board
].numbers
[row
][col
] == draws
[draw
])
69 boards
[board
].numbers
[row
][col
] = -1;
71 for (int board
= 0; board
< nboards
; ) {
72 if (board_wins(boards
[board
])) {
75 for (int i
= board
; i
<nboards
; i
++)
76 boards
[i
] = boards
[i
+1];
83 //Calculate sum of unmarked numbers
85 for (int row
= 0; row
<5; row
++)
86 for (int col
= 0; col
<5; col
++)
87 if (boards
[0].numbers
[row
][col
] != -1)
88 sum
+= boards
[0].numbers
[row
][col
];
90 printf("%d\n", sum
*draws
[draw
-1]);