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; } |
Here's a golfed version under 300 bytes:
1 | int count(){int c=0,i,j,p,t,l,b,r,s;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,x=a;for(j=8;j<56;j++)if(j%8&&j%8<7){p=(x>>j)&1;t=(x>>(j-8))&1;l=(x>>(j-1))&1;b=(x>>(j+8))&1;r=(x>>(j+1))&1;if(!t+l+b+r&&p)a&=~(1LL<<j);}c+=x==a;}return c;} |
I extracted the following code from that output:
1 | int count(){int c=0,i,j,p,t,l,b,r,s;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,x=a;for(j=8;j<56;j++)if(j%8&&j%8<7){p=(x>>j)&1;t=(x>>(j-8))&1;l=(x>>(j-1))&1;b=(x>>(j+8))&1;r=(x>>(j+1))&1;if(!t+l+b+r&&p)a&=~(1LL<<j);}c+=x==a;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int count(){int c=0,i,j,p,t,l,b,r,s;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,x=a;for(j=8;j<56;j++)if(j%8&&j%8<7){p=(x>>j)&1;t=(x>>(j-8))&1;l=(x>>(j-1))&1;b=(x>>(j+8))&1;r=(x>>(j+1))&1;if(!t+l+b+r&&p)a&=~(1LL<<j);}c+=x==a;}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"); } |
Wrong answer; got 1 instead of 27488.
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
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; } |
Here's a significantly shortened version of the function that maintains the same logic but in under 300 bytes:
1 | int count(){int c=0,i,j,k;for(k=0;k<1<<16;k++){long long a=((k&0xf)<<9)|((k&0xf0)<<13)|((k&0xf00)<<17)|((k&0xf000)<<21),t=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1));if(!s&&(t>>p&1))a&=~(1ULL<<p);}c+=t==a;}return c;} |
I extracted the following code from that output:
1 | int count(){int c=0,i,j,k;for(k=0;k<1<<16;k++){long long a=((k&0xf)<<9)|((k&0xf0)<<13)|((k&0xf00)<<17)|((k&0xf000)<<21),t=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1));if(!s&&(t>>p&1))a&=~(1ULL<<p);}c+=t==a;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int count(){int c=0,i,j,k;for(k=0;k<1<<16;k++){long long a=((k&0xf)<<9)|((k&0xf0)<<13)|((k&0xf00)<<17)|((k&0xf000)<<21),t=a;for(i=1;i<7;i++)for(j=1;j<7;j++){int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1));if(!s&&(t>>p&1))a&=~(1ULL<<p);}c+=t==a;}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
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; } |
Here's a golfed version of the function that's under 300 bytes:
1 | int count(){int c=0,i,j,p,t;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,b=a;for(j=8;j<56;j++)if((j+1)%8&&j%8)if((b>>j&1)&&!((b>>(j-8)&1)+(b>>(j-1)&1)+(b>>(j+1)&1)+(b>>(j+8)&1)))a&=~(1LL<<j);c+=b==a;}return c;} |
I extracted the following code from that output:
1 | int count(){int c=0,i,j,p,t;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,b=a;for(j=8;j<56;j++)if((j+1)%8&&j%8)if((b>>j&1)&&!((b>>(j-8)&1)+(b>>(j-1)&1)+(b>>(j+1)&1)+(b>>(j+8)&1)))a&=~(1LL<<j);c+=b==a;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int count(){int c=0,i,j,p,t;for(i=0;i<1<<16;i++){long long a=(i&15L)<<9|(i&240L)<<13|(i&3840L)<<17|(i&61440L)<<21,b=a;for(j=8;j<56;j++)if((j+1)%8&&j%8)if((b>>j&1)&&!((b>>(j-8)&1)+(b>>(j-1)&1)+(b>>(j+1)&1)+(b>>(j+8)&1)))a&=~(1LL<<j);c+=b==a;}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"); } |
Wrong answer; got 22946 instead of 27488.
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
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; } |
Here's a golfed version that's under 300 bytes:
1 | int count(){int c=0,i,j,p,s;for(i=0;i<65536;i++){unsigned long long t=((i&15L)<<9)|((i&240L)<<13)|((i&3840L)<<17)|((i&61440L)<<21),a=t;for(p=9;p<47;p++)if((p%8)&&(p/8)<7&&(t>>p&1)){s=!!(t>>(p-8)&1)+!!(t>>(p-1)&1)+!!(t>>(p+1)&1)+!!(t>>(p+8)&1);if(!s)a&=~(1ULL<<p);}c+=t==a;}return c;} |
I extracted the following code from that output:
1 | int count(){int c=0,i,j,p,s;for(i=0;i<65536;i++){unsigned long long t=((i&15L)<<9)|((i&240L)<<13)|((i&3840L)<<17)|((i&61440L)<<21),a=t;for(p=9;p<47;p++)if((p%8)&&(p/8)<7&&(t>>p&1)){s=!!(t>>(p-8)&1)+!!(t>>(p-1)&1)+!!(t>>(p+1)&1)+!!(t>>(p+8)&1);if(!s)a&=~(1ULL<<p);}c+=t==a;}return c;} |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int count(){int c=0,i,j,p,s;for(i=0;i<65536;i++){unsigned long long t=((i&15L)<<9)|((i&240L)<<13)|((i&3840L)<<17)|((i&61440L)<<21),a=t;for(p=9;p<47;p++)if((p%8)&&(p/8)<7&&(t>>p&1)){s=!!(t>>(p-8)&1)+!!(t>>(p-1)&1)+!!(t>>(p+1)&1)+!!(t>>(p+8)&1);if(!s)a&=~(1ULL<<p);}c+=t==a;}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"); } |
Wrong answer; got 22946 instead of 27488.
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True
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; } |
Here's a golfed version of the function that's under 300 bytes:
1 2 3 4 5 6 7 8 9 10 11 12 | int count(){ int c=0,i,j,k; for(k=0;k<1<<16;k++){ long long a=(k&15L)<<9|(k&240L)<<13|(k&3840L)<<17|(k&61440L)<<21,t=a; for(i=1;i<7;i++)for(j=1;j<7;j++){ int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1)); if(!s&&(t>>p&1))a&=~(1LL<<p); } c+=t==a; } return c; } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 | int count(){ int c=0,i,j,k; for(k=0;k<1<<16;k++){ long long a=(k&15L)<<9|(k&240L)<<13|(k&3840L)<<17|(k&61440L)<<21,t=a; for(i=1;i<7;i++)for(j=1;j<7;j++){ int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1)); if(!s&&(t>>p&1))a&=~(1LL<<p); } c+=t==a; } 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 21 22 23 24 25 26 27 28 29 | int count(){ int c=0,i,j,k; for(k=0;k<1<<16;k++){ long long a=(k&15L)<<9|(k&240L)<<13|(k&3840L)<<17|(k&61440L)<<21,t=a; for(i=1;i<7;i++)for(j=1;j<7;j++){ int p=i*8+j,s=((t>>(p-8)&1)+(t>>(p-1)&1)+(t>>(p+1)&1)+(t>>(p+8)&1)); if(!s&&(t>>p&1))a&=~(1LL<<p); } c+=t==a; } 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"); } |
Wrong answer; got 22946 instead of 27488.
Testing if the previous output contains the string All tests passed
: False
Resulting in output: True