-
Notifications
You must be signed in to change notification settings - Fork 2
/
tt.c
100 lines (93 loc) · 2.21 KB
/
tt.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/********** TT ************/
/* Grid of tiles for 1010 */
/**************************/
//Unicode block character
const cchar_t vert_sep_right = {A_NORMAL, 0x2590};
const cchar_t vert_sep_full = {A_NORMAL, 0x2588};
int *tt; /* row major 10x10 bitarray in int[4] */
/* Rows and cols to pop */
int xs[10];
int ys[10];
/* Read tt
* i>>5 <=> i/32
* i&31 <=> i%32
*/
int rtt(int x, int y) {
int i = 10*y+x; /* 2D -> 1D */
return tt[i>>5] & (1<<(i&31));
}
/* Write true tt */
void wttt(int x, int y) {
int i = 10*y+x;
tt[i>>5] |= (1<<(i&31));
}
/* Write false tt */
void wftt(int x, int y) {
int i = 10*y+x;
tt[i>>5] &= ~(1<<(i&31));
}
/* Print tt */
void printtt() {
int x, y;
move(0, 0);
for (y=0; y<10; y++) {
attron(A_UNDERLINE);
for (x=0; x<10; x++) {
if (rtt(x, y)) {
attron(COLOR_PAIR(2));
addstr(" ");
// Fill + Rightwards border = full block
add_wch(&vert_sep_full);
attroff(COLOR_PAIR(2));
} else {
addstr(" ");
add_wch(&vert_sep_right);
}
attroff(COLOR_PAIR(2));
}
attroff(A_UNDERLINE);
attron(COLOR_PAIR(1));
addstr(" ");
attroff(COLOR_PAIR(1));
addch('\n');
}
attron(COLOR_PAIR(1));
addstr(" ");
attroff(COLOR_PAIR(1));
}
int updatett() {
int x, y, f, xc, yc, i;
xc = 0;
yc = 0;
for (x=0; x<10; x++) { /* Find full cols */
f = 1;
for (y=0; y<10; y++)
if (!rtt(x, y)) {
f = 0;
break;
}
if (f) {
xs[xc] = x;
xc++;
}
}
for (y=0; y<10; y++) { /* Find full rows */
f = 1;
for (x=0; x<10; x++)
if (!rtt(x, y)) {
f = 0;
break;
}
if (f) {
ys[yc] = y;
yc++;
}
}
for (i=0; i<xc; i++) /* Empty full cols */
for (y=0; y<10; y++)
wftt(xs[i], y);
for (i=0; i<yc; i++) /* Empty full rows */
for (x=0; x<10; x++)
wftt(x, ys[i]);
return 5*(xc+yc)*(xc+yc+1);
}