The Challenge

Program a comic strip. As artistically rich and detailed as you can possibly make it, so long as it complies with the following rules:

  • the comic must be your own original work, not a duplicate or approximation of an existing comic (you may however use characters from an existing strip as an homage, if you desire)
  • the comic must contain at least one panel, and all panels must be surrounded by a clear border
  • the comic must contain at least one blurb of readable text with ≥ 10 characters that is clearly recognizable as text; this may come in the form of a caption, a text bubble, a thought bubble, a sign, etc.
  • the comic may be graphic-based or text-based (more on this below)
    • if text-based, the comic must have dimensions of at least 30x25 chars, and no greater than 160x80 chars
    • if graphic-based, the comic must have dimensions of at least 300x300 pixels, but no greater than 1600x1000 pixels
  • the comic must be generated by a program whose core code contains at most 512 bytes
  • the comic must comply with the StackExchange content policy

What is "Core Code"?

This is a somewhat novel concept, hence please bear with me in patience.

For programming language X, consider the most elementary code that outputs a single (black) circle or ASCII letter o at coordinates (10,10) on a (white) canvas and then terminates. The colours black and white above may refer to any two colours. "Output" refers to text being printed to stdout/console, text being outputted to a file, a graphic being drawn to a window, or a graphic being saved to a file. The two key points are that

  • the code is able to render this most basic output
  • the code contains nothing nonessential (within reason, and subject to reader scrutiny) for rendering this specific output, which includes comments (whitespace is fine)

This elementary program is called your shell. From the shell, delete as many or as few commands as you wish and identify at most two insertion points where new code can/will go. Any code inserted at these points is called your core code. The length of your core code is the total length (in bytes) of code inserted at these points.

The following are six representative examples of acceptable shells:

--- Text Output with C (type 1) ---

#include <stdio.h>
#include <Windows.h>

void P( int x, int y, char c ) {
    COORD p = { x, y };

    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), p );
    printf( "%c", c );

int main() {
    system( "cls" );
    P( 10, 10, 'o' );
    return 0;

--- Text Output with C (type 2) ---

int main() {
    puts( "\n\n\n\n\n\n\n\n\n         o" );
    return 0;

--- Graphical Output with Javascript ---

    document.body.innerHTML = '<canvas id="cvs1" width="300" height="300"></canvas>';

    with( document.getElementById('cvs1').getContext('2d') ) {
        fillStyle = 'rgb(192,192,192)';
        strokeStyle = 'rgb(0,0,0)';
        fillRect( 0, 0, 300, 300 );
        arc( 10, 10, 5, 0, 2*Math.PI );

--- Text Output with HTML ---

<html><body bgcolor="#CCCCCC">

--- Graphical Output with Python (Turtle Library) ---

from turtle import*

fd( 10 );
rt( 90 );
fd( 10 );
circle( 5, 360 );

--- Text Output with MATLAB ---

G = repmat( ' ', 30, 30 );
G(10,10) = 'o';
disp( G );

If you prefer, your shell may be empty.

I have started a discussion here for readers unsure of what the community considers appropriate in this respect. Note that this is a popularity contest, so making sure the community doesn't consider you to be breaking the rules is important.

What To Present

  1. your core code, either as a single block or as two separate blocks if you have two separate insertion points
  2. your shell, using the distinctive ✰ character (Unicode U+2730) to mark any insertion points (or simply say "no shell")
  3. your comic in a text block, or as an image, or as a link to either of the aforementioned. If your comic is text-based and looks better in a different font, charset, etc., you can provide a screenshot or a link to an online environment where the text can be viewed.


This is a popularity contest and hence your score is at the whim of the voters.

This is a competition about artistically rich comic book (or graphic novel) style artwork. Humour is a nice touch, but should not be used as a principle criterion for judging entries.

Voters can of course vote any way they want, but as a rough set of guidelines they (you) might wish to consider:

  • artistry (whether the comic is especially artful within the artist's chosen medium), with emphasis on features such as
    • beautiful art
    • texturing
    • detailed and/or recognizable characters
    • rich embellishments such as call-outs, fancy borders, shading effects, etc.
  • complexity (whether the artist/programmer really gets his/her money's worth out of 512 characters)
  • creativity (special additional "wow" factors that make the comic stand out in some way)

Feel free to raise questions or concerns in the comments section.

  • \$\begingroup\$ What's with the [code-golf] tag? \$\endgroup\$
    – Justin
    Oct 30, 2014 at 2:35
  • \$\begingroup\$ @Quincunx: Your core code is limited to 512 bytes. That's an incredibly tight restriction. [code-golf] seemed appropriate. Maybe [restricted-source]? \$\endgroup\$
    – COTO
    Oct 30, 2014 at 2:36
  • 2
    \$\begingroup\$ This seems to be a contest about art and writing, and not about programming. I understand there's a strict character requirement that forces efficient code, but that's likely to be a question of limiting the number and type of shape used in the comic, making it an "art golf". Previous meta discussion about art. I'm leaning towards close voting, but will discuss in chat. \$\endgroup\$
    – xnor
    Oct 30, 2014 at 2:38
  • 1
    \$\begingroup\$ The size requirements need rewording. Is 500 x 200 pixels smaller or greater than 300 x 300 pixels? \$\endgroup\$
    – Dennis
    Oct 30, 2014 at 3:29
  • 5
    \$\begingroup\$ This question appears to be off-topic because its focus is on art, not programming \$\endgroup\$ Oct 30, 2014 at 4:49

1 Answer 1


HTML (with JS)


<canvas id='cnv' width=410 height=300></canvas>
var c = document.getElementById('cnv');
with (C = c.getContext('2d')) {
    arc(10, 10, 5, 0, 2*Math.PI);

Full code (511 characters of core code)

It's a runnable Stack Snippet! You can try it yourself, right here, from your own browser. (Note: text may overflow if you have a different font than me.)

<canvas id='cnv' width=410 height=300></canvas>
var c = document.getElementById('cnv');
with (C = c.getContext('2d')) {
font='9px serif'
function f(x,y,t,l,T){for(i=0;i<(l||100);++i)C.fillRect(x+r(),y+r(),3,3),x+=m.sin(t),y+=m.cos(t),t+=(T||0)}
j=0;["Wow, I don't0know why I0wrote this awful0code for0Programming0Puzzles &0Code Golf.".split(0),["Isn't that...",'PUZZLING?'],[''],['...no? Okay.'],['']][n].map(function(x){

XKCD-style! (The hand-drawn effect is a bit subtle; I might make it more pronounced later.)


  • \$\begingroup\$ Whew, that was fun! I don't have any more time though, since I have to go, so edits coming some time in the future. \$\endgroup\$
    – Doorknob
    Oct 30, 2014 at 3:26
  • \$\begingroup\$ If I understood the size requirements correctly, your comic isn't tall enough. \$\endgroup\$
    – Dennis
    Oct 30, 2014 at 3:39
  • \$\begingroup\$ @Dennis Ah, good point. I'm on mobile right now so I can't fix it, but I guess I could make it a bit taller tomorrow. \$\endgroup\$
    – Doorknob
    Oct 30, 2014 at 3:50

Not the answer you're looking for? Browse other questions tagged or ask your own question.