एक फूल का ग्राफ फूल


31

इस कैमोमाइल फूल पर एक नज़र डालें:

सुंदर, है ना? ठीक है, क्या होगा अगर मैंने आपको बताया कि यह वास्तव में एक फूल नहीं था?

बहुत सारे फूल (सूरजमुखी, कैमोमाइल, डेज़ी और अन्य सहित) वास्तव में एक फूल सिर पर कई बहुत छोटे फूलों (सूरजमुखी पर काले डॉट्स) से मिलकर होते हैं। इन लघु फूलों को फ्लोरेट्स कहा जाता है , और उन्हें बहुत ही खास तरीके से व्यवस्थित किया जाता है।

मूल रूप से, फूलों के सिर पर nth फ्लोरेट की स्थिति है (ध्रुवीय निर्देशांक में):

जहाँ c = 1 (ध्यान दें कि 137.508 डिग्री = सुनहरा कोण। आपको इस सटीक सटीकता का उपयोग करने की आवश्यकता नहीं है।)

इसके कारण फ्लोरेट्स एक सर्पिल में बनता है जिसे फ़र्मेटस स्पाइरल कहा जाता है। फ्लोरेट्स की स्थिति भी फिबोनेसी संख्याओं से जुड़ी है, लेकिन यह एक और समय के लिए एक कहानी है।

तो, यहाँ चुनौती है। इनपुट के रूप में एक पूर्णांक n को देखते हुए, पहले n पुष्पों की स्थिति की गणना करें और उन्हें प्लॉट करें । यह , इसलिए मैं वास्तव में चाहता हूं कि आप किसी प्रकार की विंडो में अंक प्रदर्शित करें या रूप में कुछ सामान्य छवि प्रारूप में डेटा को STDOUT या फ़ाइल में प्रदर्शित करें। इसके अलावा, यह चुनौती काफी सीधी होनी चाहिए। यह , इसलिए सबसे छोटा कोड जीतता है। GLHF!

यहाँ एक नमूना चित्र है जो एक आउटपुट जैसा दिख सकता है:


क्या हमें सर्पिल को ऊपर की ओर खींचने की अनुमति है?
lirtosiast 12

1
एफडब्ल्यूआईडब्ल्यू कई फल इस पैटर्न को प्रदर्शित करते हैं, जैसे कि अनानास, अगौजे और पाइनकोन। यह आश्चर्यजनक नहीं होना चाहिए क्योंकि फल फूल से विकसित होते हैं। दिलचस्प रूप से कुछ कैक्टस निकाय भी इस पैटर्न को प्रदर्शित करते हैं। मेरा पसंदीदा फ्रैक्टल
रोमनस्को

1
यह अच्छा है! मैंने पहले रोमनस्क्यू ब्रोकोली देखा है; मुझे लगता है कि यह वास्तव में अच्छा है कि उनके पास यह फ्रैक्टल पैटर्न कैसे है। शायद मैं उसके बारे में एक चुनौती बना सकता हूं ...
एक

जवाबों:


21

टीआई-बेसिक, 34 बाइट्स

गणनाकर्ताओं की TI-83 + / 84 + श्रृंखला के लिए।

Input N
2πe^(-2sinh⁻¹(.5→θstep
AnsN→θmax
"√(θ→r₁
Polar                      ;Displays polar mode graphs to graph screen
Dot                        ;Prevents lines from connecting points
DispGraph                  ;Displays graph screen

यह मूल में डॉट को 0 वें बिंदु के रूप में मानता है।

एक-बाइट sinh⁻¹(टोकन के लिए धन्यवाद , 2πe^(-2sinh⁻¹(.5रेडियन में स्वर्ण कोण प्राप्त करने का एक छोटा तरीका है। यह इस तथ्य से लिया गया है कि e^(sinh⁻¹(.5स्वर्ण अनुपात है।

यहाँ N = 50 के लिए स्क्रीनशॉट हैं।

(हाँ, यह एक TI-84 + पर 96x64 मोनोक्रोम डिस्प्ले है । नए रंग कैलकुलेटर में रिज़ॉल्यूशन अपग्रेड होता है, लेकिन फिर भी एक iPhone का केवल 3.7% पिक्सेल होता है।)

निर्देशांक के बिना प्रदर्शित

TRACEप्रत्येक बिंदु पर कदम रखने के लिए दबाएँ ।

निर्देशांक के साथ


5
ध्रुवीय निर्देशांक के लिए TI-BASIC एक प्राकृतिक विकल्प है।
कॉनर ओ'ब्रायन

आपने बाइट्स की संख्या कैसे निर्धारित की? 34 से अधिक की तरह लग रहा है। एक पूर्व क्रमादेशित कुंजी, जैसा कि sinh⁻¹प्रतीत होता है (यदि मैं आपकी व्याख्या समझ गया), तो एक से अधिक बाइट की गणना करेगा।
डेविड ऑक्ट

@DavidCarraher TI-BASIC का टोकन है ; ये सभी टोकन कैलकुलेटर की मेमोरी में एक-एक बाइट होते हैं।
lirtosiast

1
आप मेम (2 -> +) -> 7 पर जाकर किसी प्रोग्राम में बाइट्स की संख्या निर्धारित कर सकते हैं। फिर आपको अपने कैलकुलेटर पर सभी कार्यक्रमों की सूची और उनके द्वारा उठाए गए बाइट्स की संख्या दिखाई देगी। ध्यान दें कि सभी TI-BASIC प्रोग्रामों में एक 9 बाइट हैडर है। नाम में बाइट्स की संख्या है, इसलिए उचित बाइट गिनती प्राप्त करने के लिए उन्हें घटाना सुनिश्चित करें।
एक

सिंटैक्स त्रुटि -2sin ^ -1
username.ak

15

पायथन 2, 85 82 81 बाइट्स

from pylab import*
for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')
show()

मारिनस द्वारा एक बाइट द्वारा छोटा किया गया।

रेडियन में सुनहरे कोण का उपयोग करना। बाइट की लंबाई समान है अगर मैं इसके बजाय 137.508 का उपयोग करता हूं, लेकिन किसी भी तरह अच्छा नहीं दिखता है। पाइलैब का उपयोग करके एक ध्रुवीय भूखंड बनाता है। नीचे तब है जब 300 (पुराने संस्करण के लिए) इनपुट है और 7000 (नए संस्करण के लिए) इनपुट है। बाइट्स की संख्या को 77 तक कम करने के लिए कोण को 2.4 तक गोल कर सकते हैं।

पुराना संस्करण जब इनपुट 300 है

नया संस्करण जब इनपुट 7000 है

यहां एक लंबा संस्करण है जो ग्रिड और अक्ष को हटाकर एक क्लीनर लुक तैयार करता है:

from pylab import *
def florets(n):
    for i in arange(0, n, 2.39996):polar(i, sqrt(i), 'o')
    grid(0)#turn off grid
    xticks([])#turn off angle axis
    yticks([])#turn off radius axis
    show()

अलग-अलग रंगों का कारण यह है कि प्रत्येक बिंदु को अलग-अलग प्लॉट किया जाता है और डेटा के अपने सेट के रूप में माना जाता है। यदि कोण और त्रिज्या को सूचियों के रूप में पारित किया गया था, तो उन्हें एक सेट के रूप में माना जाएगा और एक रंग का होगा।


1
मुझे लगता है कि यह अब तक का सबसे सुंदर जवाब है। यह केंद्र में स्पष्ट सर्पिल पैटर्न को देखने के लिए बहुत अच्छा है।
एल'एंडिया स्ट्रोमैन

आप forसूची बोध के बजाय सामान्य लूप का उपयोग करके एक बाइट को बचा सकते हैं । यह अपने आप लाइन पर होना है, लेकिन चाहते हैं ;और \nइसलिए उस बात नहीं है, एक ही लंबाई हैं। Ie: from pylab import*- for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')-show()
मारिनस

@marinus लेकिन फिर अब इसका सुपरक्यूलर वन लाइनर नहीं रहा! लेकिन धन्यवाद, मैंने इसे जोड़ा है।
स्थिति

14

ब्लिट्ज 2D / 3D , 102 बाइट्स

(इस साइट पर बहुत पहले कभी ब्लिट्ज 2 डी / 3 डी जवाब!)

Graphics 180,180
Origin 90,90
n=Input()
For i=1To n
t#=i*137.508
r#=Sqr(t)
Plot r*Cos(t),r*Sin(t)
Next

50विंडो भरने का एक इनपुट । (हां, मैं दो बाइट्स करके दाढ़ी बना सकता था Graphics 99,99, लेकिन यह लगभग इतना दिलचस्प या उपयोगी नहीं है।)

50 पुष्प

Prettier संस्करण (और अधिक अच्छी तरह से बाहर निकलता है):

Graphics 400,400
Origin 200,200

n=Input("How many florets? ")

For i = 1 To n
    t# = i * 137.508
    r# = Sqr(t)

    Oval r*Cos(t)-3,r*Sin(t)-3,7,7,1
Next

WaitKey
End

200 पुष्प उदाहरण


हे, साफ! मुझे यह पढ़ने से पहले ब्लिट्ज के बारे में पता नहीं था।
टिमोथी ग्रोट

वाह, ब्लिट्ज 3 डी कुछ 15 साल पहले मेरी पहली भाषा थी: डी ... आह ..: '(
नॉनकॉम

डिफ़ॉल्ट के रूप में डिग्री? "दिलचस्प" ...
lirtosiast

1
@ गनकॉम: यह पहली भाषा थी जिसे मैंने वास्तव में महत्वपूर्ण कार्यक्रम बनाया था। आठ साल पहले। यह आज भी मेरी शीर्ष दो सर्वश्रेष्ठ भाषाओं में से एक है (दूसरा पायथन है)।
एल'एंडिया स्ट्रैटन

1
@noncom, यह मेरी पहली भाषा भी थी। मुझे आश्चर्य है कि मैं इसे पेशेवर रूप से अब कैसे उपयोग करना चाहूंगा।
जेम्स वेबस्टर

12

गणितज्ञ, ४३ ४२ बाइट्स

ListPolarPlot@Array[(2.39996#)^{1,.5}&,#]&

यह एक अनाम फ़ंक्शन है, जो पूर्णांक तर्क देता है, उदा

यहाँ छवि विवरण दर्ज करें
स्क्रीनशॉट एक पुराने संस्करण का उपयोग करता है, लेकिन आउटपुट समान दिखता है।

Mathematica वास्तव में GoldenAngleऔर भी अधिक सटीक परिणामों के लिए एक अंतर्निहित है , लेकिन यह इससे अधिक लंबी है 2.39996


GoldenAngle! क्या यह गणितज्ञ 10.2 में एक नया कार्य है?
एलेफाल्फा

@alephalpha हां।
मार्टिन एंडर

11

MATLAB, 42 बाइट्स

t=2.39996*(1:input(''));polar(t,t.^.5,'.')

इनपुट नंबर प्राप्त करता है, 1 से उस संख्या तक एक सीमा बनाता है।

रेडियन में सुनहरे कोण द्वारा सीमा को गुणा किया जाता है (उपयोग किया गया मूल्य 137.508 डिग्री से 6 एसएफ तक सही मूल्य के करीब है)।

तो बस डॉट्स का उपयोग करके एक ध्रुवीय निर्देशांक चार्ट पर थीटा बनाम आर प्लॉट करें । यहां 2000 अंकों के साथ दिखाया गया है

ध्रुवीय

थोड़ा प्रिटियर लुकिंग ग्राफ (कोई ग्रिड लाइन नहीं) यह कोड होगा:

t=2.39996*(1:input(''));[x,y]=pol2cart(t,t.^.5);plot(x,y,'.');axis equal

हालांकि यह 31 बाइट की कीमत पर है। यहां फिर से इसे 2000 अंकों के साथ दिखाया गया है

भूखंड


मुझे polarसमाधान पसंद है , मैंने पहले कभी इसका इस्तेमाल नहीं किया है। मुझे लगता है कि आप t.^.5instad का उपयोग करके दो बाइट्स बचा सकते हैं sqrt(t)!
13:10

@flawr धन्यवाद दो बाइट्स वास्तव में बचाया।
टॉम कारपेंटर

8

आर, 58 55 54 बाइट्स

x=2.39996*1:scan();plotrix::radial.plot(x^.5,x,rp="s")

इसके लिए plotrixपैकेज को स्थापित करने की आवश्यकता है, लेकिन पैकेज को आयात करने की आवश्यकता नहीं है क्योंकि हम स्पष्ट रूप से नाम स्थान का संदर्भ दे रहे हैं।

Ungolfed:

# Read a number of STDIN
n <- scan()

x <- 2.39996*(1:n)

# The rp.type = "s" option specifies that we want to plot points rather
# than lines (the default)
plotrix::radial.plot(lengths = sqrt(x), radial.pos = x, rp.type = "s")

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

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

3 बाइट्स को प्लेनैपस के लिए धन्यवाद!


8

आर, 55 54 बाइट्स

t=1:scan()*2.39996;r=t^.5;plot(r*cos(t),r*sin(t),as=1)

यहाँ n = 1000 के लिए परिणाम है:

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

संपादित करें: @AlexA। के लिए तर्कों के asबजाय आंशिक मिलान का उपयोग करके 1 बाइट aspको सहेजा गया।


6

आर, 48 47 बाइट्स

मुझे लगता है कि यह अब तक के अन्य आर समाधानों से पर्याप्त रूप से अलग है। यह निर्देशांक बनाने के लिए जटिल वैक्टर का उपयोग करता है। t और t के sqrt को मापांक और तर्क मापदंडों में रखा गया है और x, y वास्तविक और काल्पनिक से ले रहे हैं। @AlexA को धन्यवाद। बाइट के लिए।

plot(complex(,,,t^.5,t<-1:scan()*2.39996),as=1)

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


1
न केवल यह अलग है, यह छोटा है! +1।
एल'एंडिया स्ट्रोमैन

आप फ़ंक्शन मापदंडों के आंशिक मिलान का उपयोग करके एक बाइट बचा सकते हैं: के asस्थान पर उपयोग किया जा सकता है asp
एलेक्स ए।

@AlexA। धन्यवाद एलेक्स, मैं उन लोगों का परीक्षण करने के लिए भूल रहा हूं :)
मिकी

3

एचटीएमएल + जावास्क्रिप्ट 179

<canvas id=C></canvas><script>n=1500,C.width=C.height=400,T=C.getContext('2d');for(n=prompt(M=Math);n--;)r=M.sqrt(t=n*2.4)*9,T.fillRect(M.cos(t)*r+200,M.sin(t)*r+200,2,2)</script>


2

जोल्फ, 25 बाइट्स

yG@@KyoΜzXDyOUH*Hm°yT'.}

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

(n = 5000 के लिए आउटपुट)

इसे ऑनलाइन आज़माएं। (ध्यान दें कि परिणामस्वरूप सर्पिल छोटा है)

इस चुनौती के बाद जोल्फ का निर्माण किया गया था। आईएसओ-8859-7 के साथ एनकोड होने पर यह 25 बाइट्स होता है, और इसमें एक अनुचित (यहां एक हेक्सडंप) होता है:

0000000: 7947 4096 404b 796f cc7a 5844 794f 5548  yG@.@Kyo.zXDyOUH
0000010: 2a48 6db0 7954 272e 7d                   *Hm.yT'.}

व्याख्या

yG@@KyoΜzXDyOUH*Hm°yT'.}
yG@@K                      goto (150,75) (center of the canvas)
     yo                    set current location as the origin
       MzX                 map over range 1...input
          D                start of function
           yO              goto polar coordinates ....
             UH            radius: square root of argument
               *Hm°        angle: argument times golden angle
                   yT'.    draw a dot there
                       }

2
कुंआ। मुझे लगता है कि मुझे अजीब घबराहट के बावजूद अब जोल्फ में देखना होगा।
lirtosiast


1

Matl , 20 बाइट्स (गैर-प्रतिस्पर्धात्मक)

गैर-प्रतिस्पर्धी के रूप में चिह्नित किया जाता है क्योंकि भाषा चुनौती का सामना करती है

:2.4*tX^wJ*Ze*'.'&XG

MATL ऑनलाइन पर यह कोशिश करो !

गोल्डन एंगल, 137.708deg = pi*(3-sqrt(5))rad = 2.39996...rad के रूप में अनुमानित है2.4 रेड के ।

निम्नलिखित संस्करण ( 25 बाइट्स ) doubleफ्लोटिंग-पॉइंट सटीक तक सटीक मान का उपयोग करता है :

:YPI5X^-**tX^wJ*Ze*'.'&XG

MATL ऑनलाइन पर यह कोशिश करो !


1

Tcl / Tk, 114

grid [canvas .c]
proc P n {time {incr i
.c cr o [lmap h {cos sin cos sin} {expr sqrt($i*2.4)*$h\($i*2.4)+99}]} $n}

उपयोग का उदाहरण:

P 1024

और विंडो को आउटपुट करता है

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

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