# Canonical Voices

Colin Ian King

## Another seasonal obfuscated C program

During an idle moment while on vacation I was reading the paper "Reliable Two-Dimensional Graphing Methods for Mathematical Formulae with Two Free Variables" by Jeff Tupper and I stumbled upon rather amusing inequality at the end of section 12.   In tribute to this most excellent graphing formula, I felt inspired to use the same concept in my Christmas 2015 obfuscated C offering.

 tupper.c

I cheated a little by also using a Makefile, but I hope this also adds to the magic of the resulting code.  To make the program more fun I thought I'd use a lot of confusion logic operator names in the code and mix in some incorrect Roman numeral constants too.  I could have obfuscated the code more and made it smaller, but life is too short. I will leave that as an exercise to the reader.

The source is available in my Christmas Obfuscated C git repository if you want to try it out:

`` git clone https://github.com/ColinIanKing/christmas-obfuscated-C.git   cd christmas-obfuscated-C/2015   make   ./tupper | less  ``

Enjoy!

Colin Ian King

## Infinite Snowflake

So it's close to the Christmas Holiday season, so I thought I would spend some time writing something seasonal.   My son, who is rather mathematically minded, was asking me about finding reoccurring digits in reciprocals of primes, for example 1/7, 1/11, 1/13 etc., and somehow this got me looking at the binary digits of Pi, and after a little more browsing around wikipedia onto the Thue-Morse binary sequence.

The Thue-Morse binary sequence starts with zero and one successively appends to the existing sequence the boolean compliment of the sequence so far.   One interesting feature is that a turtle graphics program can be written to control the turtle by feeding it the successive digits from the sequence so that:

• A zero moves the cursor forward by a step
• A one turns the cursor anti-clockwise by 60 degress (or pi/3 radians)
..and a Koch snowflake is drawn.  So, I've implemented this in C and obfuscated it a little just for fun:

``#include<stdio.h>#include <math.h>#define  Q (1<<9)#define M /**/for#define E(b,a) {\J q=1^(X+b)[3+Q*\a];printf("%c%c%\c",q,q,q);/*//*/}int /*/*/ typedef#define  W double#define  z (Q<<5)       J;J X[3+(Q              *Q)]     ,t[z       ] ;J          main(    ){ W         o= Q        >>1,V=   o/5,           a=0;      M (1 [X   ]=1;           X[1]         <z;X  [1 ]             *=2)        for(  X[2]             =0;X        [2]<  X[1]             ;X[2        ]++,  t[X[             2]+X        [1]]  =1^t             [X[2        ]]);  for(             0[X]        =0;X  [0]<             3;0[        X]++   )for           (X[2]        =0;X   [2]<           z;X[         2]++    )if(         t[X[          2]])     a-=(       M_PI           /3.0       );else{o+=          cos(a ); V+=sin(a);X[3+( int)o+Q*(int)V]|=1;}printf("P6 %d %d 1 ",Q,Q);M(1[X] =0;X[1]<Q;X[1]++)M(2[X]=0;X[ 2]<Q;X[2]++)E(2[X],X[1]);return 0;} /* Colin Ian King 2013    */``
To build and run:
``gcc koch-binary.c -lm -o koch-binary ./koch-binary | ppmtojpeg > koch-binary.jpg``
And the result is a koch-snowflake:

The original source code can be found here. It contains a 512 x 512 turtle graphics plotter, a Thue-Morse binary sequence generator and a PPM output backend. Anyway, have fun figuring out how it works (it is only mildly obfuscated) and have a great Christmas!

``#include <stdio.h>#include <stdbool.h>#include <malloc.h>#define H malloc (1237) ;#define c while#define W >> /* fallen right tree */#define w << /* fallen left tree */#define B(wish,times) ((_ &wish) times 2)#define L {o Q=q;p(3[Z]),P(false[Z],q),\p(q>2?"th":N),p(Z[2]);c(true+Q)p(q|Q?Q?\N:4[Z]:"a "),P(1[Z],Q),p(Q>1?", ":N),--\Q;p(".\n\n"),++q;}char typedef o;void typedef d                         ;                        o*N                       ="";o                      q;o*O(o                       *p){o                      *P,_;o*                     f=P=H;c(_                    =*p)_^=1,*f                   ++=B(1,w)|B(4                    ,W)|B(2,w)|                   B(8,W)|(_&240                  ),++p,*f=false;                 return P;}d p(o*f                ){fputs(f,stdout);}                 d P(o*s,o o){c( o                --){c(122-*s)s++; s               ++;}c(122-*s)putchar(              *s++);} o main(void){o*             Z[]={O("hgy}p{}dmnj`{pcg"              "y`{hny{hgh{}gs{}dxdj{"             "dglc{jgj{pdj{dbdxdj{p|d"            "bh{"),O("qeypyg`ld!gj!e!q"           "dey!pydd{p|n!ptypbd!`nxd}{p"          "cydd!Hydjmc!Cdj}{hnty!mnbbw!i"                       "gy`"                       "}{h"                       "gxd"                       "!ln"                       "b`d"                 "j!ygjl}{}gs!ldd}"                 "d&e&bewgjl{}dxdj"                  "!}|ej}&e&}|gff"                  "gjl{dglcp!feg`""}&e&fgbogjl{jgjd!be`gd}!`ejmgjl{pdj!bny`}&e&bdeqgjl{""dbdxdj!qgqdy}&qgqgjl{p|dbxd!`ytffdy}!`ytffgjl{") ,O ("!`ew!nh!Mcyg}pfe}!fw!pytd!bnxd!lexd!pn!fd!"),O("Nj!p""cd!"),O("!ej`!e!")};L L L L L L L L L L L L /*Xmas*/}``