See Also: Prologue and part 1.
Rules to the Challenge
❄️ Vintage Computing Christmas Challenge 2025 ❄️ – Logiker
The Pattern

Observations
- Since this is a symmetrical pattern, if we can figure out how to draw one quadrant, we can draw the others.
- The pattern is 19 characters wide, which contains a center column of asterisks, and a left and right column that are spaces except for the center row of asterisks.
- “As if they had planned it,” this means the pattern in each quadrants is 8 characters, matching the number of bits in a byte.
I typed it up to figure out what the bit pattern would be. (Actually, I typed up a bit of it, then pasted that into Copilot and had it tell me the bit pattern.)
. *
.------*- = 2
.-*-*---* = 81
.--**---- = 48
.-***--*- = 114
.----*--* = 9
.-----*-- = 4
.*-*---*- = 162
.-*-*---* = 81
*******************
That’s a mess, but in the left the “.” would represent the blank space down the left side up to the row of 19 asterisks. After that is the 8-bit pattern with “-” representing a space in the pattern (0 bit) and the “*” representing the asterisk (1 bit).
This let me quickly cobble together a proof-of-concept:
1 READ V
2 A$=STRING$(19,32):MID$(A$,10,1)="*"
3 FOR B=0 TO 7
4 IF V AND 2^B THEN MID$(A$,9-B,1)="*":MID$(A$,B+11,1)="*"
5 NEXT
6 PRINT A$:A$(L)=A$
7 L=L+1:IF L<8 THEN 1
8 PRINT STRING$(18,42)
9 FOR B=7 TO 0 STEP -1:PRINT A$(B):NEXT
10 DATA 2,81,48,114,9,4,162,81
- Line 10 are the 8 rows of byte data for a quadrant of the snowflake.
- Line 1 reads the first value from the DATA statement.
- Line 2 builds a string of 19 spaces, then sets the character at position 10 (in the center) to an asterisk. Every row has this character set.
- Line 3 begins a loop representing each bit in the byte (0-7).
- Line 4 checks the read DATA value and ANDs it with the bit value (2 to the power of the the FOR/NEXT loop value). If it is set, the appropriate position in the left side of the string is set to an asterisk, and then the same is done for the right side. To mirror, the left side is center-minus-bit, and the right side is center-plus-bit.
- Line 5 is the NEXT to continue doing the rest of the bits.
- Line 6 prints the completed string, then stores that string in an A$() array. L has not been used yet so it starts at 0.
- Line 7 increments L, and as long as it is still ess than 8 (0-7 for the first eight lines of the pattern) it goes back to line 1 to continue with the next DATA statement.
- Line 8 once 8 lines have been done, the center row of 19 asterisks is printed.
- Line 9 is a loop to print out the A$() lines we saved, backwards. As they were built in line 6, they went from 0 to 7. Now we print them backwards 7 to 0.
…and there we have a simple way to make this pattern, slowly:

On a CoCo 3, adding a WIDTH 40 or WIDTH 80 before it would show the full pattern:

My example program can be made much smaller by packing lines together and removing unnecessary spaces. One minor optimization I already did was doing the bits from 0 to 7 which removed the need to use “STEP -1” if counting backwards. Beyond that, this is the raw proof-of-concept idea of using bytes.
Other options folks have used in past challenges included rune-length type encoding (DATA showing how many spaces, then how many asterisks, to make the pattern) so that probably is worth investigating to see if it helps here.
Then, of course, someone will probably figure out a math pattern to make this snowflake.
What thoughts do you have?
