View difference between Paste ID: KgXS2jEX and M6XDf0aw
SHOW: | | - or go back to the newest paste.
1
int main()
2
{
3-
    int world[2048];
3+
    int board[2048];
4-
    int O = (int)&O;
4+
    int randNum = (int)&randNum;
5
    int i;
6
    
7-
    // bit 5 (=32) of world[i] is old cell state
7+
    // Board contains 64 columns, 32 rows.
8-
    // bit 4 (=16) of world[i] is new cell state
8+
    // bit 5 (=32) of board[i] is old cell state
9-
    // World contains 64 columns, 32 rows
9+
    // bit 4 (=16) of board[i] is new cell state
10
11
    // Generate random initial state.
12
    for(i = 0; i < 2048; ++i)
13-
        O = (O*0x41C64E6D + 12345) & 0x7fffffff;
13+
14-
        world[i] = (O & 1024) ? 32 : 0;
14+
        randNum = (randNum*0x41C64E6D + 12345) & 0x7fffffff;
15
        board[i] = (randNum & 1024) ? 32 : 0;
16
    }
17
18
    usleep(102400);
19
    for(;;)
20
    {
21
    
22-
            // For each neighbor, increase world[i]. This is at max 8 = 2**3, so this won't affect bits 4 and 5.
22+
        // For each cell, calculate new board state.
23-
            const int diffNeighbor[4] = {1, 63, 64, 65};
23+
24
        {
25
            // For each neighbor, increase board[i]. This is at max 8 = 2**3, so this won't affect bits 4 and 5.
26
27
            const int neighborOffset[4] = {1, 63, 64, 65};
28-
                if(world[(i + diffNeighbor[j]) % 2048] & (1 << 5))
28+
29
            int j;
30-
                    ++world[i];
30+
31
            {
32-
                if(world[(i - diffNeighbor[j]) % 2048] & (1 << 5))
32+
                if(board[(i + neighborOffset[j]) % 2048] & (1 << 5))
33
                {
34-
                    ++world[i];
34+
                    ++board[i];
35
                }
36
                if(board[(i - neighborOffset[j]) % 2048] & (1 << 5))
37
                {
38
                    ++board[i];
39
                }
40-
                    world[i] |= ((world[i] ^ 34) && (world[i] ^ 35)) ? ( (world[i]^3) ? 0 : (1<<4)) : (1<<4);
40+
41
                if(j==3)
42
                {
43
                    // Apply "game of life" rule.
44
                    board[i] |= ((board[i] ^ 34) && (board[i] ^ 35)) ? ( (board[i]^3) ? 0 : (1<<4)) : (1<<4);
45
                }
46
            }
47-
            world[i] = ( world[i] & (1 << 4) ) << 1; // set new call state from old state
47+
48-
            putchar(world[i] ? 'X':' ');
48+
49
        // Copy old board state to new board state and print board.
50
        for (i = 1; i < 2048; ++i)
51
        {
52
            // Set new cell state from old state
53
            board[i] = ( board[i] & (1 << 4) ) << 1; 
54
            
55
            // Print cell
56
            putchar(board[i] ? 'X':' ');
57
            if((i-1)%64==0) //if(!(63^i % 64))
58
            {
59
                putchar('\n');
60
            }
61
        }
62
        
63
        usleep(102400);
64
    }
65
}