Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the function named `count`.
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 | int count() { int ROWS = 8; int COLS = 8; int count = 0; for (int i = 0; i < 1<<16; i++) { long long unsigned int array = ((i & 0xf) << 9) | ((i & 0xf0) << (9 + 8 - 4)) | ((i & 0xf00) << (9 + 8 - 4 + 8 - 4)) | ((i & 0xf000) << (9 + 8 - 4 + 8 - 4 + 8 - 4)); long long unsigned int init = array; long long unsigned int temp = array; for (int i = 1; i < ROWS - 1; i++) { for (int j = 1; j < COLS - 1; j++) { // Calculate bit positions int pos = i * COLS + j; int topPos = (i - 1) * COLS + j; int leftPos = i * COLS + (j - 1); int bottomPos = (i + 1) * COLS + j; int rightPos = i * COLS + (j + 1); // Get the values of the neighbors int cell = (temp >> pos) & 1; int top = (temp >> topPos) & 1; int left = (temp >> leftPos) & 1; int bottom = (temp >> bottomPos) & 1; int right = (temp >> rightPos) & 1; // Sum the values of the neighbors int sum = top + left + bottom + right; // Update the cell if all neighbors are 0 and the cell itself is 1 if (sum == 0 && cell == 1) { array &= ~(1ULL << pos); } } } count += (init == array); } return count; } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the function named `count`.
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 | int count() { int ROWS = 8; int COLS = 8; int count = 0; for (int i = 0; i < 1<<16; i++) { long long unsigned int array = ((i & 0xf) << 9) | ((i & 0xf0) << (9 + 8 - 4)) | ((i & 0xf00) << (9 + 8 - 4 + 8 - 4)) | ((i & 0xf000) << (9 + 8 - 4 + 8 - 4 + 8 - 4)); long long unsigned int init = array; long long unsigned int temp = array; for (int i = 1; i < ROWS - 1; i++) { for (int j = 1; j < COLS - 1; j++) { // Calculate bit positions int pos = i * COLS + j; int topPos = (i - 1) * COLS + j; int leftPos = i * COLS + (j - 1); int bottomPos = (i + 1) * COLS + j; int rightPos = i * COLS + (j + 1); // Get the values of the neighbors int cell = (temp >> pos) & 1; int top = (temp >> topPos) & 1; int left = (temp >> leftPos) & 1; int bottom = (temp >> bottomPos) & 1; int right = (temp >> rightPos) & 1; // Sum the values of the neighbors int sum = top + left + bottom + right; // Update the cell if all neighbors are 0 and the cell itself is 1 if (sum == 0 && cell == 1) { array &= ~(1ULL << pos); } } } count += (init == array); } return count; } |
int count(){int c=0,i,r,j,p;unsigned long long a,b;for(i=0;i<1<<16;i++){a=((i&15)<<9)|((i&240)<<13)|((i&0xf00)<<17)|((i&0xf000)<<21);b=a;for(r=1;r<7;r++)for(j=1;j<7;j++){p=r*8+j;if((a>>p&1)&&!(a>>(p-8)&1)&&!(a>>(p-1)&1)&&!(a>>(p+8)&1)&&!(a>>(p+1)&1))a&=~(1ULL<<p);}c+=a==b;}return c;} --- Explanation: • We compress the original function by dropping extra whitespace and using single‐letter names. • The board is built by “laying out” four nibbles (using bit–masks 15, 240, 0xf00, 0xf000) into a 64–bit integer at offsets 9,13,17,21. • For each inner cell (rows 1 to 6, columns 1 to 6 in an 8×8 board) we check if the cell is 1 while all its four neighbors (top, left, bottom, right) are 0. If so, we “remove” it by zeroing the bit. • If no change occurred (a equals its initial copy b) we increment the count. This version is well under 300 bytes (spaces aren’t counted) and meets the criteria.
I extracted the following code from that output:
1 2 3 4 | #include <stdio.h> #include <stdlib.h> int count(){int c=0,i,r,j,p;unsigned long long a,b;for(i=0;i<1<<16;i++){a=((i&15)<<9)|((i&240)<<13)|((i&0xf00)<<17)|((i&0xf000)<<21);b=a;for(r=1;r<7;r++)for(j=1;j<7;j++){p=r*8+j;if((a>>p&1)&&!(a>>(p-8)&1)&&!(a>>(p-1)&1)&&!(a>>(p+8)&1)&&!(a>>(p+1)&1))a&=~(1ULL<<p);}c+=a==b;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> #include <stdlib.h> int count(){int c=0,i,r,j,p;unsigned long long a,b;for(i=0;i<1<<16;i++){a=((i&15)<<9)|((i&240)<<13)|((i&0xf00)<<17)|((i&0xf000)<<21);b=a;for(r=1;r<7;r++)for(j=1;j<7;j++){p=r*8+j;if((a>>p&1)&&!(a>>(p-8)&1)&&!(a>>(p-1)&1)&&!(a>>(p+8)&1)&&!(a>>(p+1)&1))a&=~(1ULL<<p);}c+=a==b;}return c;} #include<stdio.h> #include<stdlib.h> int main() { int answer = count(); int expected = 27488; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
All tests passed
Testing if the previous output contains the string All tests passed
: True
Resulting in output: False
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the function named `count`.
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 | int count() { int ROWS = 8; int COLS = 8; int count = 0; for (int i = 0; i < 1<<16; i++) { long long unsigned int array = ((i & 0xf) << 9) | ((i & 0xf0) << (9 + 8 - 4)) | ((i & 0xf00) << (9 + 8 - 4 + 8 - 4)) | ((i & 0xf000) << (9 + 8 - 4 + 8 - 4 + 8 - 4)); long long unsigned int init = array; long long unsigned int temp = array; for (int i = 1; i < ROWS - 1; i++) { for (int j = 1; j < COLS - 1; j++) { // Calculate bit positions int pos = i * COLS + j; int topPos = (i - 1) * COLS + j; int leftPos = i * COLS + (j - 1); int bottomPos = (i + 1) * COLS + j; int rightPos = i * COLS + (j + 1); // Get the values of the neighbors int cell = (temp >> pos) & 1; int top = (temp >> topPos) & 1; int left = (temp >> leftPos) & 1; int bottom = (temp >> bottomPos) & 1; int right = (temp >> rightPos) & 1; // Sum the values of the neighbors int sum = top + left + bottom + right; // Update the cell if all neighbors are 0 and the cell itself is 1 if (sum == 0 && cell == 1) { array &= ~(1ULL << pos); } } } count += (init == array); } return count; } |
Code golf this function to be a lot shorter. You only get points if it's <300 bytes (not counting whitespace). Keep the function named `count`.
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 | int count() { int ROWS = 8; int COLS = 8; int count = 0; for (int i = 0; i < 1<<16; i++) { long long unsigned int array = ((i & 0xf) << 9) | ((i & 0xf0) << (9 + 8 - 4)) | ((i & 0xf00) << (9 + 8 - 4 + 8 - 4)) | ((i & 0xf000) << (9 + 8 - 4 + 8 - 4 + 8 - 4)); long long unsigned int init = array; long long unsigned int temp = array; for (int i = 1; i < ROWS - 1; i++) { for (int j = 1; j < COLS - 1; j++) { // Calculate bit positions int pos = i * COLS + j; int topPos = (i - 1) * COLS + j; int leftPos = i * COLS + (j - 1); int bottomPos = (i + 1) * COLS + j; int rightPos = i * COLS + (j + 1); // Get the values of the neighbors int cell = (temp >> pos) & 1; int top = (temp >> topPos) & 1; int left = (temp >> leftPos) & 1; int bottom = (temp >> bottomPos) & 1; int right = (temp >> rightPos) & 1; // Sum the values of the neighbors int sum = top + left + bottom + right; // Update the cell if all neighbors are 0 and the cell itself is 1 if (sum == 0 && cell == 1) { array &= ~(1ULL << pos); } } } count += (init == array); } return count; } |
#include <stdint.h> int count(){int c=0,n,i,j;for(n=0;n<65536;n++){unsigned long long a=((n&15)<<9)|((n&240)<<13)|((n&3840)<<17)|((n&61440)<<21),b=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j;if((a>>p)&1&&!(((a>>(p-8))|(a>>(p-1))|(a>>(p+1))|(a>>(p+8)))&1))a&=~(1ULL<<p);}c+=a==b;}return c;} // Explanation: // For each 16-bit number n (0..65535), we construct a 64-bit board 'a' by mapping its four 4‐bit nibbles // into specific offsets on an 8×8 grid. We then copy 'a' into b and iterate over the inner 6×6 cells (i=1..6, j=1..6). // For each cell p=i*8+j that is 1, if all its four immediate neighbors (above, below, left, right) // are 0 then we clear that bit in a. Finally we increment c if the transformed board a is equal to the original b.
I extracted the following code from that output:
1 2 | #include <stdint.h> int count(){int c=0,n,i,j;for(n=0;n<65536;n++){unsigned long long a=((n&15)<<9)|((n&240)<<13)|((n&3840)<<17)|((n&61440)<<21),b=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j;if((a>>p)&1&&!(((a>>(p-8))|(a>>(p-1))|(a>>(p+1))|(a>>(p+8)))&1))a&=~(1ULL<<p);}c+=a==b;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdint.h> int count(){int c=0,n,i,j;for(n=0;n<65536;n++){unsigned long long a=((n&15)<<9)|((n&240)<<13)|((n&3840)<<17)|((n&61440)<<21),b=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j;if((a>>p)&1&&!(((a>>(p-8))|(a>>(p-1))|(a>>(p+1))|(a>>(p+8)))&1))a&=~(1ULL<<p);}c+=a==b;}return c;} #include<stdio.h> #include<stdlib.h> int main() { int answer = count(); int expected = 27488; if (answer != expected) { printf("Wrong answer; got %d instead of %d.\n", answer, expected); exit(1); } printf("All tests passed\n"); } |
All tests passed
Testing if the previous output contains the string All tests passed
: True
Resulting in output: True