Python, 456 429 381
import turtle as t
L="fl"
R="fr"
d=L*3+R*3
b=(d+R)*3
a=[b,120,L*3+"fflflffflflfrflflfffl"+R*4+"flf",90,b+"ffrfrflffrffrfrfrflflf",120,(R*5+L*5+R+L)*5+"rrfr"+L*5+R*2+L*2+R*4+"f",72,(d+"f")*5+"rfl"+((d+"b")*5)[:-1],120]
l=t.lt
f=t.fd
b=t.bk
r=t.rt
p=input()*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
for c in a[p]:exec c+"(a[p+1])"
t.getscreen().getcanvas().postscript(file="o")
Saya menerapkan penerjemah primitif dengan l r f b
sebagai operator yang menggerakkan kursor penyu di sudut bentuk. Pada satu waktu, ternyata hanya satu sudut. Saya mengompresi string dengan menggunakan kembali string (semacam psuedo-subroutines), selain itu, saya tidak memeriksa untuk melihat apakah saya menggunakan jalur terbaik. Ini output ke file postscript.
Sedikit penjelasan tentang kode yang tidak di-golf:
import turtle as t
Left="fl"
Right="fr"
diamond= Left*3 + Right*3
tetrahedron=(d+R)*3 #used to be b
Impor modul penyu bawaan dan tentukan makro yang memperpendek string. Modul kura-kura menggunakan perintah untuk memindahkan 'kura-kura' di sekitar layar (yaitu maju (100), kiri (90))
netList=[
#tetrahedron
tetrahedron,120,
#cube
Left*3+"fflflffflflfrflflfffl"+Right*4+"flf",90,
#octohedron, builds off the tetrahedron
tetrahedron+"ffrfrflffrffrfrfrflflf",120,
#dodecahedron
(Right*5 + Left*5 + Right + Left)*5
+"rrfr"+
Left*5 + Right*2 + Left*2 + Right*4 + "f",72,
#icosahedron
(diamond+"f")*5 +"rfl"+((diamond+"b")*5)[:-1],120
]
Daftar ini berisi sudut dan urutan gerakan. Tetrahedron diselamatkan untuk digunakan kembali dengan oktahedren.
l=t.left
f=t.forward
b=t.back
r=t.right
Ini adalah bagian yang saya suka, itu membuat fungsi lokal karakter tunggal sehingga panggilan dapat dipersingkat dan otomatis melalui string yang telah ditentukan.
input=int(raw_input())*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
Ini dimulai dengan mengambil input (antara 1 dan 5), dan mengubahnya menjadi indeks yang menunjuk ke string bentuk di netList. Penyetelan penyetelan ini menunjukkan seluruh jaring. Ini bisa ditinggalkan jika tugas itu hanya untuk menggambar mereka, tetapi karena kita membutuhkan output gambar mereka diperlukan.
for command in netList[input]:
exec command+"(netList[input+1])"
t.getscreen().getcanvas().postscript(file="o")
For loop mengambil perintah dalam string urutan perintah dan mengeksekusinya, jadi untuk string seperti "fl", ini mengeksekusi "maju (sudut); kiri (sudut);" dengan memanggil fungsi lokal yang baru dibuat. baris terakhir menampilkan file yang disebut 'o' yang dalam format format postscript menggunakan fungsi penyu.
Untuk berlari :
Salin ke file dan jalankan dari sana. Ketika Anda menjalankannya, ia akan menunggu input angka antara 1 dan 5 (saya baru saja mengubahnya sehingga ia meminta sebelum menyiapkan kura-kura). Saat Anda memasukkan angka, sebuah jendela muncul dan menarik jaring. jika Anda ingin lebih cepat, Anda dapat menambahkan t.speed(200)
sebelumnya setup
.
Anda dapat menyalin-menempelkannya ke dalam juru bahasa, tetapi ketika raw_input()
dipanggil, ia akan menggunakan string yang Anda masukan berikutnya"t.setup(.9,.9)"
sebagai ganti nomor. Jadi, jika Anda melakukan ini, salin hingga raw_input()
, masukkan nomor, lalu salin tempel sisanya. Ini dimaksudkan untuk dijalankan secara keseluruhan. Atau Anda bisa menyalinnya ke suatu fungsi dan menyebutnya.
Ini adalah outputnya (dikonversi dari postscript):
Catatan: posisi ini di jendela telah berubah, tetapi bentuk keseluruhannya sama.
Ini sedikit kekuatan kasar untuk golf kode, tapi saya bosan mencoba menemukan pola yang konsisten antara bentuk.
d
adalah string yang melakukan dua segitiga, jadi(d+'f')*5+setupPosition+(d+'b')*5
setup
membuat jendela kura-kura menjadi cukup besar untuk menahan jaring. Hal yang sama dengangoto
itu, memindahkan 'kura-kura' ke -200, 150.clear
membersihkan garis yang dibuat olehgoto
. Hanya perintah mereka untuk mengatur gambar.p=(ord(raw_input())-49)*2
mengambil angka, 1 hingga 5, sesuai dengan bentuk apa yang Anda inginkan.Mathematica
Keluar dari kompetisi, bukan bahasa gratis (kecuali uji coba gratis dianggap gratis)
Pemakaian:
sumber
Python 2 (dengan cairo) - 239
Hasil:
sumber
Logo, 199 byte
Membaca ini kembali saya melihat versi asli saya tidak sesuai dengan spesifikasi seperti yang tertulis (mengambil argumen numerik dan menggambar satu bentuk) tetapi lebih seperti ditafsirkan oleh beberapa jawaban lain (menggambar semua bentuk.) Versi baru memperbaikinya. Diharapkan akan dipanggil sebagai contoh
q 5
.cs
harus dilakukan sebelumnya untuk membersihkan layar dan mengarahkan kura-kura utara.q
memanggil fungsi utamap
dengan 3 argumen. Sintaksnya sangat membengkak, jadi untuk mengalahkan skor saya sebelumnya, saya harus memotong byte di tempat lain.versi baru dari
p
membutuhkan 3 argumen. Tidak perlu untukx
dany
karena kami hanya merencanakan satu jaring, tetapid
nada antara subunit tetap.s
masih jumlah sisi per poligon, dann
sekarang dikodekan untuk dua hal berbeda>n/8
adalah jumlah subunit yang akan diplot, dann*45
merupakan sudut di mana kura-kura harus diputar sebelum mulai (mengambil keuntungan dari mod 360 alami untuk rotasi. )Perulangan yang ditingkatkan menghasilkan
s
garis gambar dengan rotasi tangan kanan dans+2
garis dengan rotasi kiri dalam satu loop tunggal.juru bahasa calormen tampaknya kurang toleran terhadap ruang kosong yang hilang sekarang daripada pada saat posting pertama saya, tetapi kode tersebut berjalan dengan baik di http://turtleacademy.com/playground/en
Logo, 200 byte
Penerjemah di http://www.calormen.com/jslogo/# Diasumsikan kura-kura menunjuk ke Utara sebelum program dijalankan. Gunakan
cs
perintah untuk menghapus layar, arahkan kura-kura ke utara, dan letakkan di tempat asal di tengah layar.Unit dasar dari semua jaring di atas adalah sepasang poligon dari belakang ke belakang. Ini diatur dalam 2 baris terhuyung-huyung, membuat subunit 4 poligon yang dapat diterjemahkan secara vertikal untuk membuat semua jaring (kecuali octahedron, yang menumpang pada gambar icosahedron dan tetrahedron). Subunit membentuk 1 jaring tetrahedron, 1/5 dari jaring icosahedron, 1/3 dari jaring dodecahedron dan 2/3 dari jaring kubus (dua subunit ditarik, dengan dua kotak tengah tumpang tindih.)
Kode tidak dikunci
sumber
ht
untuk menyembunyikannya untuk gambar. Saya senang saya tidak melakukannya!