Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a weakness for 3d nets which when cut out and folded allow you to make 3d shapes out of paper or card. The task is simple, written the shortest program you can that draws nets for the 13 Archimedean solids. The output should be an image file in any sensible format (png, jpg).

All thirteen shapes are described at and in the following table taken from there.

enter image description here

Input: An integer from 1 to 13. Assume the shapes are numbered exactly as in the table above so that the "truncated tetrahedron" is number 1 and the "snub dodecahedron" is number 13.

Output: An image file containing the net for that shape. Just the outline including the internal lines is OK. There is no need to fill it in with colors

You can use any programming language you like as well as any library that was not made especially for this competition. Both should be available freely however (in both senses) online.

I will accept the answer with the smallest number of characters in exactly one week's time. Answers will be accepted whenever they come.

(No) Winner yet. Sadly no valid entrants. Maybe it is too hard?

share|improve this question
Maybe do away with the time-limit altogether? What if somebody finds this a year from now. Do you want them not to try?...Might've been better to do the Platonic first, wait, then the hard one. You may have divided the interest. For me personally (all of this is extrapolation), when I saw two similar ones, I kind of withdrew from it, feeling I didn't have the time to really look at both and plan out how to solve both. And I wouldn't want to do it any other way....On the other hand, others here have had difficulty with Part-2 challenges. See the Minsky Register Machine ones. Maybe it's not you. – luser droog Feb 18 '13 at 0:15
@luserdroog Thanks. Question edited. I should maybe add that I have emailed the answer to the related question around lots of people who love it! FWIW. – felipa Feb 20 '13 at 16:16
I don't think it's hard to do, but to golf it requires several hours of thinking and experimenting because there are many possible nets for each polyhedron and they won't compress equally well. – Peter Taylor Mar 2 '13 at 12:58

Java, 1552

import java.awt.*;import java.awt.image.*;import*;import javax.imageio.*;class
A{public static void main(String[]x)throws
m=new BufferedImage(1300,1300,1);Graphics2D g=m.createGraphics();g.translate(500,500);String
s=a[Integer.valueOf(x[0])-1];int f=1,i=0,n,t;while(i<s.length()){n=s.charAt(i++)-48;t=s.charAt(i++);while(t-->48){g.drawLine(0,0,20,0);g.translate(20,0);g.rotate(f*Math.PI*2/n);}f=-f;}ImageIO.write(m,"png",new File("o.png"));}}


import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;

public class A {
    static int f = 1;
    static Graphics2D g;

    static void fixtrans() {
        double[] m = new double[6];
        for (int i = 0; i < 6; ++i) {
            if (Math.abs(m[i] - Math.round(m[i])) < 1e-5) {
                m[i] = Math.round(m[i]);
        g.setTransform(new AffineTransform(m));

    static void d(String s) {
        for (int i = 0; i < s.length();) {
            int n = s.charAt(i++) - '0';
            int t = s.charAt(i++) - '0';
            for (int j = 0; j < t; ++j) {
                g.drawLine(0, 0, 20, 0);
                g.translate(20, 0);
                g.rotate(f * Math.PI * 2 / n);
                fixtrans(); // optional, straightens some lines
            f = -f;

    public static void main(String[] args) throws Exception {
        String[] a = {
// bad          "333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353531333459343434355935323335345935323335345935323335345935323335345935353455"

        BufferedImage img = new BufferedImage(1300, 1300, BufferedImage.TYPE_INT_RGB);
        g = img.createGraphics();
        g.translate(500, 500);
        d(a[Integer.parseInt(args[0]) - 1]);
        String f = args[0] + ".png";
        ImageIO.write(img, "png", new File(f));

Results (trimmed, negated, joined and scaled):


The shapes are quite unusual :) but correct as far as I can tell (let me know if you find any errors). They were generated (in a separate program) by constructing the face graph and cutting cycles in a DFS.

I'm sure this can be golfed quite a lot more using e.g. python and turtle.

Edit: oops, the last case was self-intersecting a bit. I fixed the code (by hand), here's the updated image:

13 corrected

share|improve this answer
Does the fix by hand mean the code still outputs a self intersection? Is that the only thing separating this from being a valid answer? – trichoplax Apr 17 '14 at 10:31
@githubphagocyte If it still outputted a self-intersection, it wouldn't be a fix. This is a valid answer. – aditsu Apr 18 '14 at 2:56
This has been flagged because it violates one of the rules in our help center: All solutions to challenges should [...] be a serious contender for the winning criteria in use. For example, an entry to a code golf contest needs to be golfed. – Dennis Mar 11 at 16:48
@Dennis better now, mr. policeman? :p – aditsu Mar 11 at 17:24
Much better. – Dennis Mar 11 at 17:37


Out of competition, not a free language

f[n_] := PolyhedronData[Sort[PolyhedronData["Archimedean", 
                                             {"FaceCount", "StandardName"}]][[n, 2]],  "NetImage"]


f /@ Range@13

Mathematica graphics

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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