Zhegalkin

by evgkch

HTML

<canvas id='canvas'></canvas>

JavaScript

const { cos, sin, PI } = Math;

const canvas = document.getElementById('canvas'),
		  ctx		 = canvas.getContext('2d');
      
canvas.width  = 512;
canvas.height = canvas.width;

const r = canvas.width;

const cx = canvas.width / 2;

const fstHalf = n => x => x & ((1 << (n / 2)) - 1),
			scdHalf = n => x => x >> (n / 2);

const T = n => x => {
	const fst = fstHalf(n)(x);
  const scd = scdHalf(n)(x);
  
	return n == 1
  	? x
    : T(n / 2)(fst) ^ (T(n / 2)(fst ^ scd) << (n / 2));
}
    
const main = n => {
	ctx.beginPath();
	ctx.arc(cx, cx, r, 0, 2 * PI);
	
  for (let i = 0; i < n; n++)
  {
  	const step = 2 * PI / n;
  	ctx.moveTo(
	    cx + r * cos(step * i),
     	cx + r * sin(step * i),
    );
    ctx.lineTo(
    	cx + r * cos(step * i),
     	cx + r * sin(step * i),
    );
  }
  
  ctx.stroke();
}

main(4)