3Dネットの描画-アルキメデスの立体


12

3Dネットには弱点があり、切り取って折りたたむと、紙やカードで3D形状を作成できます。タスクは簡単で、13のアルキメデスの立体のネットを引くことができる最短のプログラムを作成しました。出力は、適切な形式の画像ファイル(png、jpg)である必要があります。

13個の形状はすべて、http://en.wikipedia.org/wiki/Archimedean_solidおよびそこから引用した次の表で説明されています。

ここに画像の説明を入力してください

入力: 1〜13の整数。形状に上記の表とまったく同じ番号が付けられ、「切り捨てられた四面体」が1番、「スナブ十二面体」が13番となると仮定します。

出力:その形状のネットを含む画像ファイル。内部線を含むアウトラインだけで問題ありません。色で塗りつぶす必要はありません

好きなプログラミング言語と、このコンペティション用に特別に作成されていないライブラリを使用できます。ただし、どちらもオンラインで(両方の意味で)自由に利用できる必要があります。

正確に1週間以内に最小文字数の回答を受け入れます。 回答はいつでも受け入れられます。

(いいえ)まだ勝者です。 残念ながら、有効な参加者はいません。たぶん難しすぎる?


制限時間を完全に廃止するのでしょうか?誰かが今から1年後にこれを見つけたらどうなるでしょう。あなたは彼らに試さないようにしたいですか?...最初にプラトニックをし、待ってから、ハードなものをする方が良いかもしれません。あなたは興味を分けているかもしれません。個人的には(これはすべて外挿です)、似たようなものを2つ見たとき、私はそれをやめて、両方を実際に見て、両方を解決する方法を計画する時間がないと感じました。そして、私は他の方法でそれをやりたくありません。その一方で、ここの他の人はパート2の課題に苦労しました。Minsky Register Machineを参照してください。たぶんそれはあなたではありません。
luserはドローグ

@luserdroogありがとう。質問を編集しました。私はそれを愛する多くの人々に関連する質問への回答をメールで送信したことを追加する必要があります!FWIW。
フェリパ

難しいと思いませんが、ゴルフには数時間の思考と実験が必要です。なぜなら、各多面体には多くのネットがあり、それらは等しく圧縮されないからです。
ピーターテイラー

回答:


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

ゴルフをしていない:

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

結果(トリミング、否定、結合、スケーリング):

結果

形状は非常に珍しいです:)が、私が知る限り正しいです(エラーを見つけたら教えてください)。それらは、DFSでフェイスグラフとカットサイクルを構築することにより(別のプログラムで)生成されました。

これは、例えばpythonやturtleを使ってもっともっとゴルフできると確信しています。

編集:おっと、最後のケースは少し自己交差していました。コードを(手動で)修正しました。更新された画像は次のとおりです。

13修正済み


手で修正すると、コードはまだ自己交差を出力しますか?これが有効な答えであることを区別する唯一のものですか?
センモウヒラムシ

@githubphagocyteそれでも自己交差が出力される場合は、修正されません。これは有効な答えです。
SEは悪であるためaditsuはやめ

それは内ルールのいずれかに違反しているため、これはフラグが付けられているヘルプセンター課題へのすべてのソリューションは、[...]使用中の受賞基準の深刻な候補でなければなりません。たとえば、コードゴルフコンテストへのエントリはゴルフする必要があります。
デニス

@Dennisの方が良くなりました。警官?:p
SEがEVILであるためaditsuが終了する


6

Mathematica

自由な言語ではなく、競争の外

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

使用法:

f /@ Range@13

Mathematicaグラフィックス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.