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 http://en.wikipedia.org/wiki/Archimedean_solid 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?

  • \$\begingroup\$ 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. \$\endgroup\$ Feb 18, 2013 at 0:15
  • \$\begingroup\$ @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. \$\endgroup\$
    – user7467
    Feb 20, 2013 at 16:16
  • \$\begingroup\$ 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. \$\endgroup\$ Mar 2, 2013 at 12:58

2 Answers 2


Java, 1552

import java.awt.*;import java.awt.image.*;import java.io.*;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 java.io.File;

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

  • \$\begingroup\$ 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? \$\endgroup\$
    – trichoplax
    Apr 17, 2014 at 10:31
  • \$\begingroup\$ @githubphagocyte If it still outputted a self-intersection, it wouldn't be a fix. This is a valid answer. \$\endgroup\$ Apr 18, 2014 at 2:56
  • \$\begingroup\$ 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. \$\endgroup\$
    – Dennis
    Mar 11, 2016 at 16:48
  • \$\begingroup\$ @Dennis better now, mr. policeman? :p \$\endgroup\$ Mar 11, 2016 at 17:24
  • \$\begingroup\$ Much better. \$\endgroup\$
    – Dennis
    Mar 11, 2016 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


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy