कोच स्नोफ्लेक का चित्रमय प्रतिनिधित्व


13

एक कोच हिमपात का एक खंड उत्पन्न करें

एक कोच स्नोफ्लेक एक त्रिकोण है जो प्रत्येक के लिए n, प्रत्येक पक्ष के बीच में एक और समबाहु बिंदु जोड़ा जाता है: http://en.wikipedia.org/wiki/Koch_snowflake#Properties

हमारे पास पहले से ही एक कोच स्नोफ्लेक चुनौती थी n=4। नई चुनौती किसी भी nबीच 1और के साथ एक कोच हिमपात का एक खंड खींचना है 10

नियम

स्नोफ्लेक को प्रोग्राम में या फाइलों में हार्डकोड नहीं किया जा सकता है - उन्हें आपके प्रोग्राम द्वारा उत्पन्न किया जाना चाहिए।

आपके कार्यक्रम को n1 और 10 के बीच सभी आकार का समर्थन करना चाहिए ।

उपयोगकर्ता द्वारा std-in के माध्यम से पक्षों की संख्या का इनपुट होना चाहिए।

आपको स्क्रीन पर स्नोफ्लेक के चित्रमय प्रतिनिधित्व को प्रिंट करना होगा।

n1, 2, 3 और 4 की बराबरी के साथ नमूना कोच स्नोफ्लेक्स (केवल स्पष्टता के लिए हरी रेखाएं, उन्हें पुन: उत्पन्न न करें):

कोच स्नोफ्लेक्स

एक टाई-ब्रेकर की स्थिति में, सबसे अधिक संख्या में उत्थान जीत (पॉप-प्रतियोगिता) के साथ कार्यक्रम।


मैं इसका कोई मतलब नहीं निकाल रहा हूं: "आपको पिक्सेल को रखने के लिए गणना करने के लिए फ़ंक्शन का उपयोग करना होगा। यदि आपके कार्यक्रम में इस उद्देश्य के लिए अंतर्निहित फ़ंक्शन नहीं है, तो आप अपने स्कोर से एक को लागू करने की लागत में कटौती कर सकते हैं। " क्या पिक्सेल?
xnor

@xnor यह मूल रूप से गणना करने के लिए था कि प्रति पिक्सेल / चरित्र के आधार पर स्नोफ्लेक कैसे आकर्षित किया जाए (चुनौती मूल रूप से एक ASCII- कला चुनौती भी थी)। ज्यादातर लोग शायद सिर्फ लाइनों का उपयोग करेंगे, इसलिए मैं इसे हटा दूंगा।

क्या कोई पूरा बर्फ का टुकड़ा भर सकता है?
xnor

बेशक। इस टिप्पणी को लंबा करने की आवश्यकता है।

परे n=7, आप कंप्यूटर स्क्रीन पर स्नोफ्लेक में नए जोड़े गए त्रिकोण नहीं देख सकते हैं। क्या कोई "सर्वश्रेष्ठ प्रयास" यहाँ ठीक है? क्या पिक्सेल-आधारित समाधान के लिए न्यूनतम रिज़ॉल्यूशन है?
xnor

जवाबों:


7

गणितज्ञ 72

Region@Line@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]

n = 3

यहाँ छवि विवरण दर्ज करें

Alephalpha के लिए धन्यवाद।


अच्छी नौकरी। इसे दो वर्णों के साथ गोल्फ करें, और आपको जीत मिले!

@ Hosch250 अपडेट किया गया, धन्यवाद।
chyanog

आप AnglePathMathematica 10.1 में उपयोग कर सकते हैं ।
alephalpha

@chyaongGraphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
alephalpha

1
@ जालपहाड़ा 73 चरस:ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
च्यवनग

15

MATLAB, 119 115

घटनाओं के एक असामान्य मोड़ में, मैंने पाया कि इस कार्यक्रम ने वास्तव में बेहतर काम किया क्योंकि मैंने इसे गॉल्फ़ किया। पहले, यह वैश्वीकरण के कारण बहुत तेज हो गया। अब, यह एक उपयोगी संकेत प्रदर्शित करता है, ~n:~जिसमें उपयोगकर्ता को यह याद दिलाया जाता है कि किस मात्रा में प्रवेश करना है!

न्यूलाइन्स कार्यक्रम का हिस्सा नहीं हैं।

x=exp(i*pi/3);
o='~n:~';
P=x.^o;
for l=2:input(o);
P=[kron(P(1:end-1),~~o)+kron(diff(P)/3,[0 1 1+1/x 2]) 1];
end;
plot(P)

n = 9: एन = 9

oएक मनमाना तार है जो मोदुलो के बराबर होता है। [0 2 4 0]6. इन शक्तियों के लिए उठाए गए ई i / 3 जटिल विमान में एक समभुज त्रिभुज के कोने देता है। पहले kronका उपयोग 4 बार प्रत्येक एक के साथ अंकों की सूची की प्रतिलिपि बनाने के लिए किया जाता है। ~~o4 लोगों का वेक्टर पाने का सुविधाजनक तरीका है। दूसरे diff(P)को लगातार बिंदुओं के प्रत्येक जोड़े के बीच वेक्टर पाता है। इस वेक्टर के गुणक (0, 1/3, (1 + e -i 3/3 ) / 3, और 2/3) प्रत्येक पुराने बिंदुओं में जोड़े जाते हैं।


उह, क्या आप कुछ और बता सकते हैं कि यह कोड कैसे काम करता है? मुझे लगा कि मैं कुछ मतलूबों को जानता हूं लेकिन यह ... पागलपन है ?? =)
20

@flawr मैंने कुछ नोट जोड़े, क्या इससे कोई मदद मिलती है?
फेर्सुम

आपका बहुत बहुत धन्यवाद! मैं उस स्ट्रिंग-
एब्यूज

9

T-SQL: 686 (स्वरूपण को छोड़कर)

SQL सर्वर 2012+ के लिए।

हालांकि यह कभी भी दावेदार नहीं होगा, मुझे यह देखना था कि क्या मैं इसे टी-एसक्यूएल में करवा सकता हूं। तीन प्रारंभिक किनारों के साथ शुरू होने के दृष्टिकोण के लिए गया, फिर प्रत्येक किनारे के माध्यम से पुनरावृत्ति और उन्हें प्रत्येक स्तर के लिए 4 किनारों के साथ बदल दिया। अंत में यह सब @i के लिए निर्दिष्ट स्तर के लिए एक एकल ज्यामिति में मिलाना

DECLARE @i INT=8,@ FLOAT=0,@l FLOAT=9;
WITH R AS(
    SELECT sX,sY,eX,eY,@l l,B,1i
    FROM(VALUES(@,@,@l,@,0),(@l,@,@l/2,SQRT(@l*@l-(@l/2)*(@l/2)),-120),(@l/2,SQRT(@l*@l-(@l/2)*(@l/2)),@,@,-240))a(sX,sY,eX,eY,B)
    UNION ALL
    SELECT a.sX,a.sY,a.eX,a.eY,l/3,a.B,i+1
    FROM R 
        CROSS APPLY(VALUES(sX,sY,sX+(eX-sX)/3,sY+(eY-sY)/3,sX+((eX-sX)/3)*2,sY+((eY-sY)/3)*2))x(x1,y1,x2,y2,x3,y3)
        CROSS APPLY(VALUES(x2+((l/3)*SIN(RADIANS(B-210.))),y2+((l/3)*COS(RADIANS(B-210.)))))n(x4,y4)
        CROSS APPLY(VALUES(x1,y1,x2,y2,B),
            (x3,y3,eX,eY,B),
            (x2,y2,x4,y4,B+60),
            (x4,y4,x3,y3,B-60)
        )a(sX,sY,eX,eY,B)
WHERE @i>i)
SELECT Geometry::UnionAggregate(Geometry::Parse(CONCAT('LINESTRING(',sX,' ',sY,',',eX,' ',eY,')')))
FROM R 
WHERE i=@i

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


मुझे नहीं पता था कि टी-एसक्यूएल के साथ ऐसी विजार्ड्री हासिल की जा सकती है!
हैरी मस्टे-प्लेफेयर

9

लोगो: 95

to w:c ifelse:c=1[fd 2 lt 60][w:c-1 w:c-1 lt 180 w:c-1 w:c-1]end
to k:c repeat 3[w:c rt 180]end

kएकल स्तर पैरामीटर के साथ फ़ंक्शन को परिभाषित करता है ।

संपादित करें

इस ऑनलाइन संपादक http://www.calormen.com/jslogo/ में आप k readwordइनपुट के लिए प्रॉम्प्ट का उपयोग करने के लिए जोड़ सकते हैं , लेकिन किसी कारण से यह कमांड मानक संक्षिप्त नाम का समर्थन नहीं करता है rw

नीचे दिए गए 102 वर्ण सोल्यूगो में मानक इनपुट के साथ काम करता है जैसा कि प्रश्न में निर्दिष्ट है। हालाँकि कोड को थोड़े बदलाव की ज़रूरत थी क्योंकि UCBLogo में कुछ अजीब पार्सर हैं। इसकी आवश्यकता होती है toऔर endपहले अलग-अलग लाइनों और स्थान में :होना आवश्यक होता है लेकिन दूसरी तरफ :वैकल्पिक होते हैं।

to w c
ifelse c=1[fd 2 lt 60][w c-1 w c-1 lt 180 w c-1 w c-1]
end
to k c
repeat 3[w c rt 180]
end
k rw

आप लोगो को कैसे चलाते हैं?
बीटा क्षय

@ BetaDecay मैंने इसका उपयोग किया: logo.twentygototen.org लेकिन यह पहली बार मैंने पाया था: calormen.com/jslogo आप USBLogo भी स्थापित कर सकते हैं
Nutki

8

बीबीसी बेसिक, 179

REV 1

INPUTn
z=FNt(500,470,0,0,3^n/9)END
DEFFNt(x,y,i,j,a)
LINEx-36*a,y-21*a,x+36*a,y-a*21PLOT85,x,y+a*42IFa FORj=-1TO1FORi=-1TO1z=FNt(x+24*a*i,y+j*14*a*(i*i*3-2),i,j,-j*a/3)NEXTNEXT
=0

पहले की तरह, लेकिन काले और सफेद रंग में, अनगुल्फेड (लेकिन सुव्यवस्थित) और गोल्फ वाले संस्करणों में। विजेता नहीं, इस तथ्य के बावजूद कि ऐसा करने का तरीका n = 1 के लिए एक विशेष विश्वास की आवश्यकता से बचा जाता है।

  INPUTn
        REM call function and throw return value away to z
  z=FNt(500,470,0,0,3^n/9)
  END

        REM x,y=centre of triangle. a=scale.
        REM loop variables i,j are only passed in order to make them local, not global.
  DEFFNt(x,y,i,j,a)

        REM first draw a line at the bottom of the triangle. PLOT85 then draws a filled triangle,
        REM using the specified point (top of the triangle) and the last two points visited (those used to draw the line.)
  LINEx-36*a,y-21*a,x+36*a,y-21*a
  PLOT85,x,y+42*a

        REM if the absolute magnitude of a is sufficient to be truthy, recurse to the next level.
        REM j determines if the triangle will be upright, inverted or (if j=0) infinitely small.
        REM i loops through the three triangles of each orientation, from left to right.
  IFa FORj=-1TO1 FORi=-1TO1:z=FNt(x+24*a*i,y+j*14*a*(i*i*3-2),i,j,-j*a/3):NEXT:NEXT

        REM return 0
  =0

यहाँ छवि विवरण दर्ज करें

REV 0

@Xnor को ओपी के जवाब के मुताबिक, स्नोफ्लेक्स में भरा हुआ ओके है। यह उत्तर xnor की टिप्पणी से प्रेरित था। रंग केवल मनोरंजन के लिए हैं और इसके निर्माण के तरीके को दिखाने के लिए। एक त्रिकोण लें (इस मामले में मैजेंटा) और आधार के 6 त्रिकोण 1/3 के साथ ओवरप्लेट करें।

  INPUTn
  z=FNt(500,470,n,1,0,0)
  END

  DEFFNt(x,y,n,o,i,a)
  a=3^n/22
  GCOLn
  MOVEx-36*a,y-o*21*a
  MOVEx+36*a,y-o*21*a
  PLOT85,x,y+o*42*a
  IFn>1FORi=-1TO1:z=FNt(x+24*a*i,y+14*a*(i*i*3-2),n-1,-1,i,a):z=FNt(x+24*a*i,y-14*a*(i*i*3-2),n-1,1,i,a)NEXT
  =0

यहाँ छवि विवरण दर्ज करें


1
मुझे पसंद है कि यह कैसे दिखता है जैसे उनमें से 7 एक साथ विलय हो गए।

@ hosch250 वास्तव में, मुझे लगता है कि "आविष्कार" एक नया भग्न है जिसका सिल्हूट एक कोच स्नोफ्लेक होता है, और यदि आप मैजेंटा भाग को हटाते हैं तो आपको 6 छोटे कोच स्नोफ्लेक के साथ छोड़ दिया जाता है। गोल्फ संस्करण सिर्फ एक सादे काले सिल्हूट होगा, लेकिन मैं इस छवि को भी छोड़ दूंगा।
स्तर नदी सेंट

क्या आप इसे बीबीसी बेसिक या बीबीसी बेसिक लिखते हैं? मैं बाद के लिए जाता हूं, लेकिन मुझे नहीं पता कि यह सही है ...
बीटा डिके

2
@BetaDecay बुनियादी शुरुआती के सर्व-मानक मानक / प्रतीकात्मक निर्देश कोड के लिए एक बैरोनियम है। "मानक" बिट बहस योग्य है क्योंकि बहुत सारे संस्करण हैं। en.wikipedia.org/wiki/BASIC । BASIC के अधिकांश संस्करण पूंजीकृत संस्करण को पसंद करते हैं, लेकिन विकिपीडिया पृष्ठ के अनुसार, Visual Basic पसंद करता है। मुझे लगता है कि बीबीसी बेसिक को अपरकेस के रूप में भेज दिया गया था। मैं bbcbasic.co.uk/bbcwin/bbcwin.html पर संस्करण का उपयोग कर रहा हूं । यह वेबसाइट और IDE में अपरकेस है, इसलिए मैं कहूंगा कि अपरकेस संस्करण अधिक सही है। लेकिन मुझे नहीं लगता कि यह ज्यादा मायने रखता है।
लेवल रिवर सेंट

आह ठीक है, मैं अपरकेस संस्करण
बीटा डेके

8

गणितज्ञ - १ 17।

r[x_, y_] := Sequence[x, RotationTransform[π/3, x]@y, y]
Graphics@Polygon@Nest[
 ReplaceList[#, {___, x_, y_, ___}  Sequence[x,r[2 x/3 + y/3, 2 y/3 + x/3], y]
  ] &, {{0, 0}, {.5, √3/2}, {1, 0}, {0, 0}}, Input[]]

यहाँ छवि विवरण दर्ज करें

मध्य टुकड़े के कोण को अलग करने की बोनस क्लिप

यहाँ छवि विवरण दर्ज करें


6

पायथन 3 - 139

कछुए ग्राफिक्स लाइब्रेरी का उपयोग करता है।

from turtle import*
b=int(input())
a=eval(("FR"*3)+".replace('F','FLFRFLF')"*~-b)
for j in a:fd(9/b*("G">j));rt(60*(2-3*("Q">j))*("K"<j))])

ठंडा। मुझे कोड के दो से अधिक लाइनों के साथ आकार खोजने का आपका स्ट्रिंग-आधारित दृष्टिकोण पसंद है! लेकिन क्या आप 3 बाइट्स को बचाने के लिए जाँच नहीं कर सकते "G">j, "Q"<jऔर इसका उपयोग नहीं कर सकते fd(9/b)? इसके अलावा, आप तर्क के साथ ifगुणा करने वाले कथनों से बच सकते हैं , उदाहरण ("G">j)के लिए 9/bऔर उन सभी को एक पंक्ति में रखें for। ओह! तब आप संयोजन rtऔर ltउपयोग भी कर सकते हैं120*(...)-60*(...)
Falko

यह कोख स्नोफ्लेक इनपुट + 1 को प्रस्तुत करता है। 1 का एक इनपुट सिर्फ एक त्रिकोण होना चाहिए जैसा कि ऊपर दिए गए चित्र में है।

@ फालो सभी कि मदद के लिए धन्यवाद!
बीटा डेके

@ hosch250 संपादित
बीटा डिके

अब यह कुछ भी आकर्षित नहीं करता है, और 1 का इनपुट 0 त्रुटि से एक विभाजन बनाता है।

4

पायथन 3, 117 बाइट्स

from turtle import*
ht();n=int(input())-1
for c in eval("'101'.join("*n+"'0'*4"+")"*n):rt(60+180*(c<'1'));fd(99/3**n)

तरीका:

  • समाधान पायथन के कछुए ग्राफिक्स का उपयोग करता है।
  • n है input - 1
  • स्ट्रिंग से शुरू करते हुए 0000हम इसके हर चरित्र के साथ 101 nसमय के साथ eval trick (उस के लिए @xnor के लिए धन्यवाद) के साथ जुड़ते हैं।
  • अंतिम स्ट्रिंग में प्रत्येक वर्ण के लिए हम वर्ण मान ( 1या 0) के आधार पर 60 डिग्री दाएं या 120 डिग्री बाएं मुड़ते हैं और फिर एक लंबाई ( 99/3^n) आगे बढ़ते हैं जो सभी के लिए समान आकार की गारंटी देता है n
  • 0स्ट्रिंग में अंतिम बेकार होगा लेकिन यह केवल उसी रेखा को फिर से बनाता है जो पहले 0ड्रॉ करता है।

उदाहरण के लिए आउटपुट input = 3:

कोच


2

आर: 240 175

क्योंकि मैं अपने सिर को आर के आसपास लाने की कोशिश कर रहा हूं, यहां एक और संस्करण है। ऐसा करने के लिए बहुत बेहतर तरीके होने की संभावना है और मुझे पॉइंटर्स प्राप्त करने में खुशी हो रही है। मैंने जो किया है, वह बहुत जटिल है।

n=readline();d=c(0,-120,-240);c=1;while(c<n){c=c+1;e=c();for(i in 1:length(d)){e=c(e,d[i],d[i]+60,d[i]-60,d[i])};d=e};f=pi/180;plot(cumsum(sin(d*f)),cumsum(cos(d*f)),type="l")

यहाँ छवि विवरण दर्ज करें


2

समझदार fwom youw gwave ...

मुझे पता था कि मैं इसे TURT का उपयोग करके Befunge-98 में लागू करने का प्रयास करना चाहता हूं, लेकिन मैं इसके बारे में कैसे पता लगा सकता हूं और मैं कई महीनों तक इस पर बैठा रहा। अब, हाल ही में, मैंने आत्म-संशोधन का उपयोग किए बिना इसे करने का एक तरीका निकाला! इसलिए...

TURT फिंगरप्रिंट के साथ Befunge-98, 103

;v;"TRUT"4(02-&:0\:0\1P>:3+:4`!*;
>j$;space makes me cry;^
^>1-:01-\:0\:01-\:0
0>I@
^>6a*L
^>ca*R
^>fF

आइए पहले कुछ कार्यान्वयन विवरण प्राप्त करें:

  • मैंने CCBI 2.1 का उपयोग करके इसका परीक्षण किया , जिसका TURT (कछुए ग्राफिक्स फिंगरप्रिंट) का कार्यान्वयन एसवीएफ Iफ़ाइल में छवि को "प्रिंट" करता है। यदि आप इसे CCBI में कमांड-तर्क के बिना चलाते हैं --turt-line=PATH, तो यह डिफ़ॉल्ट रूप से CCBI_TURT.svg नामक एक फ़ाइल के रूप में सामने आएगा। यह सबसे निकटतम है जो मुझे "स्क्रीन पर स्नोफ्लेक के चित्रमय प्रतिनिधित्व को प्रिंट करने के लिए आ सकता है " उपलब्ध फंज दुभाषियों के साथ मैं पा सकता था। हो सकता है किसी दिन वहाँ एक बेहतर दुभाषिया होगा जो कछुए के लिए एक ग्राफिकल डिस्प्ले है, लेकिन अब के लिए ...
  • CCBI के लिए इसे बिना लटकाए चलाने के लिए अंत में एक नई रूपरेखा होनी चाहिए (यह वर्ण गणना के साथ शामिल है)। मुझे सही पता है?

मूल रूप से, यह स्टैक को एक प्रकार की makeshift L- प्रणाली के रूप में उपयोग करके और इसे मक्खी पर विस्तारित करके काम करता है। प्रत्येक पास पर, यदि स्टैक पर शीर्ष संख्या है:

  • -2, फिर यह प्रिंट और बंद हो जाता है;
  • -1, कछुआ वामावर्त 60 डिग्री बदल जाता है;
  • 0, यह दक्षिणावर्त 120 डिग्री पर मुड़ता है;
  • 1, यह आगे बढ़ता है (यहां 15 पिक्सेल तक, लेकिन आप इसे fअंतिम पंक्ति पर संशोधित करके बदल सकते हैं );
  • कुछ संख्या n जो कि 2 या अधिक है, तो इसे स्टैक पर विस्तारित किया जाता है n-1, -1, n-1, 0, n-1, -1, n-1

इसके लिए n = 10, इस प्रक्रिया में बहुत लंबा समय लगता है (मेरे सिस्टम पर कुछ मिनट), और परिणामस्वरूप SVG ब्राउज़र में देखे जाने पर ~ 10MB आकार और अदृश्य है क्योंकि आप TURT का उपयोग करके ब्रश के आकार को समायोजित नहीं कर सकते हैं। यदि आपके पास सही प्लगइन्स हैं तो इरफ़ानव्यू शालीनता से काम करता है। मैं एसवीजी से सुपर परिचित नहीं हूं, इसलिए मुझे नहीं पता कि उन फ़ाइलों को देखने के लिए पसंदीदा तरीका क्या है (विशेषकर जब वे वास्तव में बड़े हैं)।

अरे, कम से कम यह काम करता है - जो, इसे बेफंग मानते हुए, अपने दम पर आभारी होने के लिए कुछ है।


1

पायथन 2, 127 बाइट्स

from turtle import *
def L(l,d=input()-1):
 for x in[1,-2,1,0]:[L(l,d-1),rt(60*x)] if d>0 else fd(l)
for i in'lol':lt(120);L(9)

1
यहाँ पर 50,000 वीं पोस्ट होने के लिए अनुदान।
एंड्रयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.