Lumen
lumen.c
Aller à la documentation de ce fichier.
1/* [[file:../org/lumen.org::*Includes][Includes:1]] */
2#include <stdbool.h>
3#include <stdio.h>
4#include <stdlib.h>
5/* Includes:1 ends here */
6
7/* [[file:../org/lumen.org::is_in_room][is_in_room]] */
15bool is_in_room(int length, int x, int y) {
16 return (x >= 0 && x < length && y >= 0 && y < length);
17}
18/* is_in_room ends here */
19
20/* [[file:../org/lumen.org::light][light]] */
30int light(bool **room, int length, int lightning_radius, int x, int y) {
31 int inlight_boxes = 0;
32 int i, j;
33 for (i = -lightning_radius + 1; i < lightning_radius; ++i) {
34 for (j = -lightning_radius + 1; j < lightning_radius; ++j) {
35 if (is_in_room(length, x + i, y + j) && !room[x + i][y + j]) {
36 room[x + i][y + j] = 1;
37 ++inlight_boxes;
38 }
39 }
40 }
41 return inlight_boxes;
42}
43/* light ends here */
44
45/* [[file:../org/lumen.org::main][main]] */
46int main() {
47 int i;
48 int N;
49 scanf("%d", &N);
50 int L;
51 scanf("%d", &L);
52 bool **room;
53 int hiding_places = N * N;
54
55 room = malloc(N * sizeof(*room));
56 for (i = 0; i < N; ++i) {
57 room[i] = malloc(N * sizeof(bool));
58 }
59
60 for (int i = 0; i < N; i++) {
61 for (int j = 0; j < N; j++) {
62 char cell[4];
63 scanf("%s", cell);
64 if (cell[0] == 'C') {
65 hiding_places -= light(room, N, L, i, j);
66 }
67 }
68 }
69
70 for (i = 0; i < N; ++i) {
71 free(room[i]);
72 }
73 free(room);
74
75 printf("%d\n", hiding_places);
76
77 return 0;
78}
79/* main ends here */
bool is_in_room(int length, int x, int y)
Teste si la case existe.
Definition: lumen.c:15
int light(bool **room, int length, int lightning_radius, int x, int y)
Eclaire les cases autour de la bougie (x, y)
Definition: lumen.c:30
int main()
Definition: lumen.c:46