Disegno di reti 3d - solidi di Archimede


12

Ho un debole per le reti 3d che, se ritagliate e piegate, ti consentono di creare forme 3d con carta o carta. Il compito è semplice, scritto il programma più breve possibile che disegna reti per i 13 solidi di Archimede. L'output dovrebbe essere un file di immagine in qualsiasi formato sensibile (png, jpg).

Tutte e tredici le forme sono descritte su http://en.wikipedia.org/wiki/Archimedean_solid e nella seguente tabella presa da lì.

inserisci qui la descrizione dell'immagine

Input: un numero intero compreso tra 1 e 13. Supponiamo che le forme siano numerate esattamente come nella tabella sopra in modo che il "tetraedro troncato" sia il numero 1 e il "dodecaedro" in sospensione sia il numero 13.

Output: un file di immagine contenente la rete per quella forma. Solo il contorno, comprese le linee interne, è OK. Non è necessario riempirlo con i colori

Puoi usare qualsiasi linguaggio di programmazione che ti piace e qualsiasi libreria non creata appositamente per questa competizione. Entrambi dovrebbero essere disponibili gratuitamente comunque (in entrambi i sensi) online.

Accetterò la risposta con il minor numero di personaggi in esattamente una settimana. Le risposte saranno accettate ogni volta che arrivano.

(No) Vincitore ancora. Purtroppo nessun concorrente valido. Forse è troppo difficile?


Forse eliminare del tutto il limite di tempo? E se qualcuno lo trovasse tra un anno. Vuoi che non provino? ... Potrebbe essere stato meglio fare prima il Platonico, aspettare, poi quello difficile. Potresti aver diviso l'interesse. Per me personalmente (tutto questo è estrapolazione), quando ne ho visti due simili, mi sono ritirato, sentendo di non aver avuto il tempo di guardare entrambi e pianificare come risolverli entrambi. E non vorrei farlo in nessun altro modo ... D'altra parte, altri qui hanno avuto difficoltà con le sfide della Parte 2. Vedi quelli Minsky Register Machine. Forse non sei tu.
Luser droog

@luserdroog Grazie. Domanda modificata. Forse dovrei aggiungere che ho inviato via email la risposta alla domanda relativa a molte persone che la adorano! FWIW.
Felipa,

Non credo sia difficile da fare , ma per giocare a golf sono necessarie diverse ore di riflessione e sperimentazione perché ci sono molte reti possibili per ogni poliedro e non si comprimeranno altrettanto bene.
Peter Taylor,

Risposte:


9

Java, 1552

import java.awt.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;class
A{public static void main(String[]x)throws
Exception{String[]a={"33623368356:356;66","33413341334535463547354735473444","33823382338:3586338>358>358>358?88","66456:466:466845684668466766","334144453546354635474746464646464647354634463446344744","88456:466:466:4668458<468<468<468:456846684668466788","33343535353231333535313133353447353434353534313133353447353545343535313133353447353545343444","33513351335233593554335433593554335935543359355433593559355835593559355935593455","33:233:233:433:B35:833:833:B35:833:B35:833:B35:833:B35:B35:833:B35:B35:B35:B35:C::","66566:576:57696869576969586969586:586969576969586857685868586766","334155453546354635463547594658465846584658473546354634463546344635463446354634463547584657465746574657473546344634463446344755","::456:466:466:466:466845:@46:@46:@46:@46:>4568466:4668466:4668466:4668466:4668466845:>46:>46:>46:>46:<45684668466846684667::","333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353535593432333234355935323335345935323335345935323335345935343459313334353455"};BufferedImage
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"));}}

Ungolfed:

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];
        g.getTransform().getMatrix(m);
        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 = {
                "33623368356:356;66",
                "33413341334535463547354735473444",
                "33823382338:3586338>358>358>358?88",
                "66456:466:466845684668466766",
                "334144453546354635474746464646464647354634463446344744",
                "88456:466:466:4668458<468<468<468:456846684668466788",
                "33343535353231333535313133353447353434353534313133353447353545343535313133353447353545343444",
                "33513351335233593554335433593554335935543359355433593559355835593559355935593455",
                "33:233:233:433:B35:833:833:B35:833:B35:833:B35:833:B35:B35:833:B35:B35:B35:B35:C::",
                "66566:576:57696869576969586969586:586969576969586857685868586766",
                "334155453546354635463547594658465846584658473546354634463546344635463446354634463547584657465746574657473546344634463446344755",
                "::456:466:466:466:466845:@46:@46:@46:@46:>4568466:4668466:4668466:4668466:4668466845:>46:>46:>46:>46:<45684668466846684667::",
// bad          "333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353531333459343434355935323335345935323335345935323335345935323335345935353455"
                "333531333434343132333434353531313335343434323232323334343435353231333133343556343434313233323335345935353532313331313132333233353535343557343133343556343434355934353535593432333234355935323335345935323335345935323335345935343459313334353455"};

        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));
    }
}

Risultati (tagliato, negato, unito e ridimensionato):

risultati

Le forme sono abbastanza inusuali :) ma corrette per quanto ne so (fammi sapere se trovi errori). Sono stati generati (in un programma separato) costruendo il grafico frontale e tagliando i cicli in un DFS.

Sono sicuro che questo può essere giocato molto di più usando ad esempio pitone e tartaruga.

Modifica: oops, l'ultimo caso si è autointersecato un po '. Ho corretto il codice (a mano), ecco l'immagine aggiornata:

13 corretto


La correzione a mano significa che il codice genera ancora un autointersezione? È l'unica cosa che lo separa dall'essere una risposta valida?
trichoplax,

@githubphagocyte Se emettesse ancora un autointersezione, non sarebbe una soluzione. Questa è una risposta valida
Aditsu ha smesso perché SE è MALE

Questo è stato segnalato perché viola una delle regole del nostro centro assistenza : tutte le soluzioni alle sfide dovrebbero [...] essere un serio contendente per i criteri vincenti in uso. Ad esempio, è necessario giocare a golf per partecipare a una gara di codice golf.
Dennis,

@Dennis meglio ora, signor. poliziotto? : p
aditsu abbandonato perché SE è EVIL l'


6

matematica

Fuori concorso, non un linguaggio libero

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

Uso:

f /@ Range@13

Grafica Mathematica

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.