... jadi ini adalah tantangan untuk menjadikanku pohon.
Menghasilkan program atau fungsi yang disebut tree yang mengambil argumen integer tunggal, N dan menggambar level Pythagoras Tree N dalam, di mana level 0 hanya trunk.
Setiap persimpangan pohon harus menempatkan simpul segitiga pada titik acak pada perimeter (titik ini harus terdistribusi secara merata di setidaknya 5 titik yang sama jaraknya, atau seragam di seluruh setengah lingkaran).
Opsional pohon Anda mungkin 3d, berwarna-warni, atau menyala sesuai waktu. Namun, ini adalah kode-golf, jadi file terkecil menang.
EDIT: Saya akan menutup kontes dan menerima jawaban terkecil saat berumur seminggu
code-golf
graphical-output
alexander-brett
sumber
sumber
Jawaban:
Mathematica,
246234221 karakterIni tentu bukan cara yang paling elegan / terpendek untuk melakukan ini.
Pemakaian:
f[8]
Dan berikut adalah contoh output untuk
f[6]
danf[10]
masing - masing.Agak tidak terserang:
sumber
Show
di sana, danModule
juga tidak perlu.Show
petunjuknya, tetapi bagaimana saya bisa menyingkirkannyaModule
? Jika saya tidak mendeklarasikanp
lokal, itu akan ditimpa dalam panggilan rekursif, jadi saya tidak bisa melakukan keduanya dengan yang samap
, kan?Block
, yang lebih pendek dariModule
.CFDG, 134 karakter
Yang ini tidak persis benar, karena Anda tidak dapat membatasi kedalaman rekursi. Tetapi masalahnya hanya membutuhkan solusi dalam hal ini . :)
Hasilnya terlihat seperti ini
Untuk 46 karakter lainnya ( total 180 karakter ), Anda dapat mewarnai:
sumber
Catatan tambahan,
322270Sunting: Tampaknya
realtime
tidak dapat digunakan sebagai seed generator acak yang tepat. Karenanya, kami akan menggunakan variabel lingkungan untuk tujuan ini dan menjalankan program seperti itu:atau
Sekarang pohon kita kurang dapat diprediksi. 14 byte ditambahkan ke jumlah total. Perubahan lain: 1) Argumen program sekarang diteruskan pada baris perintah. 2) Tidak ada ukuran counter - stack iterasi eksplisit yang berfungsi untuk tujuan ini (sudut rotasi cabang kiri disimpan pada stack, untuk menggambar cabang kanan, nanti). 3) Tidak ada variabel bernama untuk kedalaman yang diperlukan - ukuran stack adalah offsetnya, pada stack. Ditinggalkan di sana saat keluar, artinya tidak dikonsumsi.
Saya pikir itu cukup jelas - keadaan grafis disiapkan dan
f
prosedur disebut secara rekursif untuk setiap tingkat kedalaman berturut-turut, dua kali - untuk cabang 'kiri' dan 'kanan'. Bekerja dengan1x1
ukuran persegi panjang (lihat skala asli) menghemat kesulitan mengalikan dengan panjang sisi. Sudut rotasi cabang kiri diacak - salah satu dari 5 pembagian acak yang berjarak sama - saya pikir itu mencegah kemungkinan kasus jelek untuk keseragaman yang seragam.Mungkin lambat untuk kedalaman yang dibutuhkan lebih dari 20 atau lebih.
Berikutnya adalah versi golf, menggunakan token biner berkode ASCII (lihat jawaban luser droog dari topik tertaut). Catatan,
cos
,sin
,rand
tidak dapat menggunakan notasi ini..
sumber
-dGraphicsAlphaBits
adalah flag ke keluaran anti-alias untuk mencegah tepi bergerigi dari kotak yang lebih besar, dapat dihilangkan (atau 'disembunyikan' dalam misalnya variabel lingkungan). Beberapa orang mungkin lebih menyukainya tanpa bendera ini (daun pohon mendapatkan lebih banyak 'volume'). Ya, 20 byte itu tidak terlalu penting. Saya akan mengatakan 20-25% off menggunakan token biner berkode ascii (dilihat dari jawaban topik terkait). Mungkin diskon 50% tanpa pengkodean ascii, 2 byte biner per token nama sistem. Akan terlihat seperti beberapa bahasa yang biasanya menang;)Coffeescript
377B352BSaya merasa kotor menulis coffeescript tetapi saya tidak dapat menemukan paket gambar yang layak untuk python3: - /
Javascript
393B385BAgak cantik dalam javascript dan saya jauh lebih bahagia dengan for-loop tetapi tanpa [x, y, z] = Sintaksis saya tidak bisa membuatnya cukup pendek untuk mengalahkan naskah kopi
Saya harus mengatakan bahwa saya agak kesal ini hampir dua kali lebih lama dari solusi Mathematica: - / Saya melihatnya dalam aksi: http://jsfiddle.net/FK2NX/3/
sumber
X
pengembalianX
, Anda dapat rantai mereka. Dan Anda dapat menyimpan banyak karakter lain dengan menyimpanM.sin
danM.cos
dalam variabel karakter tunggal.s=M.sin
.rotate
menggunakanthis
, dansin
tidak. Anda perlu melakukan sesuatu sepertiR=X.rotate.bind(X)
, tetapi itu mungkin tidak sepadan lagi.