12 December, 2013

# A Christmas tree in 46 bytes

As holiday season is near, I came across one of the old source codes, which was written originally in C for a small competition. The goal was to display the following tree with a source code of minimal length:

0 000 00000 0000000 000000000 00000000000 0000000000000 000000000000000 00000000000000000 0

The solution ported to MATLAB is 46 characters long:

for w=[0:8 0]fprintf('%*.*d0\n',8+w,w*2,0),end

A zero character – which follows the *d* character – is wired into the string, so the remaining number of the zeros in a line is 0, 2, 4... The *\n* stands for the line break.

The trick is to use the capabilities of string formatting:

- The first parameter – belongs to the first asterisk – stands for the width of the displayed number. It should start from eight and increased by one in each step.
- The second parameter – belongs to the second asterisk – is for giving the precision: since we are displaying an integer value, the print function treats this as leading zeros. This parameter shall be increased by two in each step.
- The third parameter – belongs to the
*%d*identifier – tells, that we want to print a zero value with the given parameters.

This way we can have leading spaces and leading zeros in the same function call. The last value of vector *w* is zero: it generates us the trunk of the Cristmas tree.