Golf Yaşam Çiçeği


19

Buradaki zorluk, yaşam çiçeğini (bazılarına göre kutsal bir geometrik figür olan) seçtiğiniz dilde doğru bir şekilde tasvir etmektir.

Hayat çiçeği

Tasarım gösterildiği gibi merkezleri yarıçapı 1 olan üçgen bir ızgara üzerinde düzenlenmiş olan yarıçapı 1 olan kısmi daireler ve artı onları çevreleyen yarıçapı 3 olan daha büyük bir daire içerir.

Tasarım istediğiniz gibi ölçeklenebilir, ancak matematiksel olarak doğru olan% 2'lik bir maksimum hataya izin verilir. Raster grafikler kullanılıyorsa, bu, küçük dairelerin çapını en az yaklaşık 100 piksel ile etkili bir şekilde sınırlar.

Bu kod golf olduğundan, en kısa kod (bayt) kazanır.


10
Siteye Hoşgeldiniz! Bildiğiniz gibi, genellikle bir yanıtı kabul etmeden önce bir süre beklemek teşvik edilir, bu şekilde diğer kullanıcılar yarışmayı "bitmiş" olarak görmez ve daha fazla katılım ve rekabet olur.
DJMcMayhem

2
“görsel, tanınabilir ve doğru” ne açık ne de nesneldir. Bir gönderimin nesnel geçerlilik kriterleri olmadan geçerli olup olmadığını belirlemek imkansızdır. Sandbox'ı zorluklarla ilgili olası sorunları ana siteye göndermeden önce çözmek için kullanmanızı öneririz .
Mego

“Tanınabilir” gibi soyut kurallara ek olarak, minimum bir boyut belirtmek daha iyi olacaktır.
manatwork

Henüz kimse takmadığından, metada yeni zorlukların geri bildirim almasına yardımcı olmak için tasarlanmış bir sanal alanımız var. Burada bulabilirsiniz: meta.codegolf.stackexchange.com/questions/2140/…
tuskiomi

1
Aslında sadece 19 daire değil. Kenarlarda da bazı dairesel yaylar vardır. (6 tanesi 2π / 3, 12 kaplama π, 18 kaplama π / 6 açısını kapsar)
Martin Ender

Yanıtlar:


23

Mathematica 177 173 128 124 120 bayt

c=Circle;Graphics@{{0,0}~c~3,Rotate[Table[If[-3<x-y<4,c[{√3x,-x+2y}/2,1,Pi/{6,2}]],{x,-3,2},{y,-4,2}],Pi/3#]&~Array~6}

resim açıklamasını buraya girin

Ana fikir, bunun altı döndürülmüş versiyonundan sonuç oluşturmaktır:

resim açıklamasını buraya girin

Bu da, iki köşesi kesilmiş aynı daire yaylarından oluşan dikdörtgen bir tablodur. Kesmeyi kaldırır ve her daire merkezini a ile temsil #edersek, temel olarak bu modeldeki daireleri dağıtmak isteriz:

####
#####
######
######
 #####
  ####

Bu kenarlar -3 < x-y < 4, 2D indekslere koşul dayatılarak kesilir (çünkü değeri x-ydiyagonaller boyunca sabittir) ve kesme, bunların çoğalmasından xve yaradığımız ızgarayı kapsayan dik olmayan temel vektörlerle gelir.

Döndürülemeyen yayların bu özel yönelimi, arkın her iki ucu Pida yay olarak ifade edilebilecek şekilde eşit şekilde bölündüğü için en kısa olarak ortaya çıkar Pi/{6,2}(diğer tüm yaylar ya ek olarak ek ek işareti veya tamsayı gerektirir).


Bir sayısal hata kaynağını ortadan kaldırırken 2 karakter ve 0 bayt kaydetmek için √3 kullanın.
Kelly Lowder

@KellyLowder İyi bir nokta, düzeltildi.
Martin Ender

8

OpenSCAD, 228 bayt

$fn=99;module o(a=9){difference(){circle(a);circle(a-1);}}function x(n)=9*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o();q(g-1);}}else{intersection(){translate(x(i))o();circle(9);}}}q(2);o(27);

Aşağıda, birinin r (yarıçap) ve w (halkaların genişliği) parametrelerini ayarlamasına izin veren bir sürüm bulunmaktadır.

r=1;w=.1;$fn=99;module o(n){difference(){circle(n);circle(n-w);}}function x(n)=(r-w/2)*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o(r);q(g-1);}}else{intersection(){translate(x(i))o(r);circle(r);}}}q(2);o(3*r-w);

Bu sürüm tam 246 karakterdir.
Bu kodun bir kısmı teknik olarak gereksizdir ancak resme daha çok benzemektedir.


Bu hatayı OpenSCAD.net'te alıyorum (Firefox 47): Error: Error: Parse error on line 1: ...x(k))o();circle(9);};}}}q(2);o(27); -----------------------^ Expecting 'TOK_ID', '}', 'TOK_IF', '!', '#', '%', '*', got ';'
HyperNeutrino

@AlexL. Macimde gerçek OpenSCAD istemcisini kullandığımda bu hatayı almıyorum. Ancak hayal kırıklığı yaratan krom kullanarak OpenSCAD.net bu hatayı çoğaltmak mümkün. Bu onların hizmet ile ilgili bir sorun olduğunu düşünüyorum. Masaüstü uygulamasını deneyebilir misiniz?
Henry Wildermuth

1
Masaüstü sürümünde (Ubuntu 14.04 LTS) benim için çalıştı.
Benjamin Spector

1
Kodunuzdaki};} desenini fark ettim. Her iki sürüm için de bir karakteri tıraş edecek olan}} ile güvenle değiştirebileceğinizi düşünüyorum. Kendim test ettim ve işe yarıyor gibiydi.
Benjamin Spector

6

Mathematica 263 Bayt

@ MartinEnder'in gönderimi ile gerçekten rekabetçi değil ama yine de bu konuda eğlendim. Yaprakların rastgele bir yürüyüş yapmasına izin verdim! Petal, rastgele seçilen son noktalardan biri etrafında rastgele 60 derece dönerek yürür. Petalın dönen ucunun büyük diskin dışında olup olmadığını test ediyorum ve eğer öyleyse rotasyon diğer yöne gidiyor.

c=Circle;a=√3;v={e=0{,},{0,2}};f=RandomChoice;Graphics@{e~c~6,Table[q=f@{1,2};t=f@{p=Pi/3,-p};r=RotationTransform[#,v[[q]]]&;v=r[If[r[t]@v[[-q]]∈e~Disk~6,t,-t]]@v;Translate[Rotate[{c[{1,a},2,p{4,5}],c[{1,-a},2,p{1,2}]},ArcTan@@(#-#2)&@@v,e],v[[2]]],{5^5}]}

İşte animasyon için kullandığım sonraki kod.

Export[NotebookDirectory[]<>"flower.gif", Table[Graphics[Join[{c[e,6]},(List@@%)[[1,2,1;;n-1]],{Thick,Red,(List@@%)[[1,2,n]]}]],{n,1,3^4,1}]]

Rastgele Petal Yürüyüşü

Bir yerde 2 boyutlu rastgele yürüyüşlerin sonunda başlangıç ​​noktasına dönmesi gerektiğini okudum. Birkaç bin adım büyük diski doldurmayı garanti ediyor gibi görünüyor.


Bu gerçekten güzel bir fikir, ancak sınırlı sayıda yinelemeyle, tüm çiçeği doldurmama olasılığı da sıfır değil. 30 yaprak çizdikten sonra muhtemelen bir sonlandırma koşulu eklemelisiniz (gerçekten yapılıp yapılmadığınızı belirlemenin en kısa yolu gibi görünüyor). Sonra çizimin sona erdirildiğinde yapıldığını bilirsiniz ve sona ermeme olasılığı sıfır olur.
Martin Ender

Bağımsız Bunun, kaydedebilirsiniz bayt bir sürü vardır: Sqrt[3]olup 3^.5. eİlk kullanıma kadar tanımlamanıza gerek yoktur ve bu hileyi üzerine bir bayt kaydetmek için kullanabilirsiniz v={e=0{,},{0,2}}. Ayrıca gibi bazı infix notasyonu kullanabilir e~c~6veya e~Disk~6ve ArcTan@@Subtract@@veşdeğer olmalıdır ArcTan@@(#-#2)&@@v.
Martin Ender

15 bayt tıraş etmek için infix ve √ operatörü kullanılır. @MartinEnder ipuçları için teşekkürler. / 2 ve 2 kurtuldum * hangi iptal edildi. 180 yaprak vardır, bu nedenle 4 ^ 4 yinelemeleri genellikle diskin yaklaşık yarısını kapsar ve 5 ^ 5 işi yapar. 9 ^ 9 diski kaplamama olasılığı 10 ^ 400.000'den ~ 1'dir, bu da% 2'den daha az hataya sahiptir, bu nedenle kontrol etmek için boşa harcanan baytlara değmez.
Kelly Lowder

3

JavaScript (ES6) / SVG, 299 bayt

with(document){write(`<svg height=250 width=250><circle${b=` fill=none stroke=black `}cx=125 cy=125 r=120 />`);for(i=0;i<24;i++)write(`<path${b}d=M5,125${`${a=`a60,60,0,0,1,`}40,0`.repeat(i%4+3)+`${a}-40,0`.repeat(i%4+3)} transform=${`rotate(60,125,125)`.repeat(i>>2)}rotate(-60,${i%4*4}5,125) />`)}

Çeşitli uzunluklarda birden fazla ark çifti oluşturarak ve sonra onları döndürerek çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.