पीनो कर्व खींचना


13

परिचय

ज्यामिति में, पीनो वक्र 1890 में Giuseppe Peano द्वारा खोजे जाने वाले स्पेस-फिलिंग कर्व का पहला उदाहरण है। पीनो कर्व एक सर्वेयर है, जो यूनिट स्क्वायर पर यूनिट अंतराल से निरंतर कार्य करता है, हालांकि यह इंजेक्शन नहीं है। Peano को जॉर्ज कैंटर के पहले के परिणाम से प्रेरित किया गया था कि इन दो सेटों में एक ही कार्डिनिटी है। इस उदाहरण के कारण, कुछ लेखक "पीनो कर्व" वाक्यांश का उपयोग किसी भी स्थान-भरने वाले वक्र के लिए अधिक सामान्यतः करने के लिए करते हैं।

चुनौती

कार्यक्रम एक इनपुट लेता है जो एक पूर्णांक होता है n, और nइस छवि के सबसे निचले हिस्से में दिखाए गए बग़ल 2 से शुरू होने वाले पीनो वक्र के वें पुनरावृत्ति का प्रतिनिधित्व करने वाले एक ड्राइंग को आउटपुट करता है : पीनो वक्र के तीन पुनरावृत्तियों

इनपुट

nपीनो वक्र की पुनरावृति संख्या देने वाला पूर्णांक । वैकल्पिक, अतिरिक्त इनपुट बोनस सेक्शन में वर्णित है।

उत्पादन

nपीनो वक्र के वें पुनरावृत्ति का एक चित्र । ड्राइंग ASCII कला या "वास्तविक" ड्राइंग दोनों हो सकती है, जो भी सबसे आसान या कम हो।

नियम

  • इनपुट और आउटपुट किसी भी सुविधाजनक प्रारूप में दिए जा सकते हैं (अपनी भाषा / समाधान के लिए सबसे उपयुक्त प्रारूप चुनें)।
  • नकारात्मक मान या अमान्य इनपुट को संभालने की आवश्यकता नहीं है
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
  • यदि संभव हो, तो कृपया ऑनलाइन परीक्षण वातावरण का लिंक शामिल करें ताकि अन्य लोग आपके कोड को आज़मा सकें!
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

बोनस

चूंकि यह पार्क में चलना नहीं चाहिए (कम से कम अधिकांश भाषाओं में मैं सोच सकता हूं), बोनस अंक निम्नलिखित के लिए प्रदान किए जाते हैं:

  • -100 बाइट्स यदि आपका कोड पीनो कर्व्स के निर्माण का एक जिफ उत्पन्न करता है n
  • -100 बाइट्स यदि आपका कोड किसी आयताकार आकार के लिए स्पेस-फिलिंग कर्व बनाता है (पीनो कर्व केवल स्क्वायर के लिए काम करता है, तो जाहिर है)। आप मान सकते हैं कि इनपुट फिर उस फॉर्म को लेता है n l wजहां nपहले (पुनरावृति की संख्या) के समान अर्थ है, लेकिन जहां lऔर wआयत की लंबाई और चौड़ाई बनती है जिसमें वक्र को आकर्षित करना है। यदि l == w, यह नियमित पीनो वक्र बन जाता है।

नकारात्मक स्कोर की अनुमति है (लेकिन क्या वे संभव हैं ...)।

संपादित करें

कृपया अपने प्रोग्राम के आउटपुट को समाधान में शामिल करें n == 3 (l == w == 1)


1
PPCG में आपका स्वागत है :) यह, एक नज़र में, एक अच्छी पहली चुनौती की तरह लग रहा है। हालांकि यह परिचित लगता है, मुझे लगता है कि मैं जिस चुनौती के बारे में सोच रहा हूं वह शायद ASCII कला थी। ध्यान दें, हालांकि, हम दृढ़ता से बोनस को हतोत्साहित करते हैं और यह कि गोल्फ भाषाएं होंगी जो 100 बाइट्स से कम में इसे प्राप्त कर सकती हैं। इसके अलावा, और सबसे महत्वपूर्ण बात, आपको एक जीत की कसौटी चाहिए। यह देखते हुए कि आपके बोनस एक समाधान के स्कोर से बाइट्स घटाते हैं, मुझे संदेह है कि आप इसे कोड-गोल्फ होने का इरादा रखते हैं ।
झबरा

4
हाँ, मुझे नहीं लगता कि बोनस एक अच्छा विचार है, खासकर क्योंकि कम से कम दो एनीमेशन-सक्षम ASCII- कला केंद्रित गोल्तांग
केवल

2
ओह भी क्या होगा nयदि लिए इस्तेमाल किया जा lऔर wहैं भी आदानों ??????????? और पीनो वक्र एक विशेष मामला होगा - यह एकमात्र स्पेसफिलिंग वक्र नहीं है, इसलिए कुछ एल्गोरिदम को इसे विशेष रूप से बदलना पड़ सकता है
ASCII-only

2
इसके अलावा, जो किसी को भी गैर-वर्ग आयामों के लिए एक तुच्छ स्पेसफिलिंग वक्र (बस आगे और पीछे zigzagging) बनाने से रोकता है
ASCII-only

7
कोड गोल्फ में बोनस चुनौतियों को लिखते समय बचने के लिए सबसे सहमत चीजों में से एक है। मेरा सुझाव है कि आप उन्हें हटा दें और तय करें कि चुनौती का विहित संस्करण कौन सा है।
lirtosiast

जवाबों:


6

गणितज्ञ, स्कोर 60 - 100 - 100 = -140

Graphics[PeanoCurve@a~Reverse~3~Scale~#2]~Animate~{a,1,#,1}&

शुद्ध कार्य। इनपुट के रूप में लेता है nऔर {l, w}(चौड़ाई और ऊंचाई), और आउटपुट के रूप में एक एनिमेटेड ग्राफिक देता है। यह पहली बार n n ऑर्डर पीनो कर्व बनाता है PeanoCurve। चूंकि l = w मामले में अभी भी एक पीनो वक्र बनाने की आवश्यकता है, हम डेविडसी के उत्तर के समान अभिव्यक्ति 3 को स्तर 3 पर फ्लिप करते हैं ; के लिए एलडब्ल्यू , हम बस Scaleआयत को वक्र। यह वक्र अभी भी स्थान-भरने वाला होगा, दूसरे बोनस को संतुष्ट करेगा। पहले बोनस के लिए, हम Animateइसे सभी आकारों के ऊपर रखते हैं। ध्यान दें कि ओपी ने सुझाव दिया कि यह डेविडसी से पर्याप्त रूप से अलग था, अपने स्वयं के उत्तर को वारंट करने के लिए। N = 3, l = w के लिए परिणाम = 1 इस प्रकार है:


बहुत अच्छा! (उचित अभिविन्यास के साथ)
DavidC

13

जीएफए बेसिक 3.51 (अटारी एसटी), 156 134 124 बाइट्स

एक .LST प्रारूप में मैन्युअल रूप से संपादित लिस्टिंग। CRअंतिम एक सहित सभी लाइनें समाप्त हो जाती हैं ।

PRO f(n)
DR "MA0,199"
p(n,90)
RET
PRO p(n,a)
I n
n=n-.5
DR "RT",a
p(n,-a)
DR "FD4"
p(n,a)
DR "FD4"
p(n,-a)
DR "LT",a
EN
RET

विस्तार किया और टिप्पणी की

PROCEDURE f(n)      ! main procedure, taking the number 'n' of iterations
  DRAW "MA0,199"    !   move the pen to absolute position (0, 199)
  p(n,90)           !   initial call to 'p' with 'a' = +90
RETURN              ! end of procedure
PROCEDURE p(n,a)    ! recursive procedure taking 'n' and the angle 'a'
  IF n              !   if 'n' is not equal to 0:
    n=n-0.5         !     subtract 0.5 from 'n'
    DRAW "RT",a     !     right turn of 'a' degrees
    p(n,-a)         !     recursive call with '-a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,a)          !     recursive call with 'a'
    DRAW "FD4"      !     move the pen 4 pixels forward
    p(n,-a)         !     recursive call with '-a'
    DRAW "LT",a     !     left turn of 'a' degrees
  ENDIF             !   end
RETURN              ! end of procedure

उदाहरण आउटपुट

Peano-GFA


10

पर्ल 6 , 117 बाइट्स

{map ->\y{|map {(((++$+y)%2+$++)%3**(y+$^v,*/3...*%3)??$^s[$++%2]!!'│')xx$_*3},<┌ ┐>,$_,<└ ┘>,1},^$_}o*R**3

इसे ऑनलाइन आज़माएं!

0 अनुक्रमित। यूनिकोड वर्णों का 2 डी सरणी देता है। मूल विचार यह है कि निचली पंक्तियों के लिए, अभिव्यक्ति

(x + (x+y)%2) % (3 ** trailing_zeros_in_base3(3*(y+1)))

पैदावार देता है

|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|................||........  % 9
..||....||....||....||....|  % 3
|....||....||....||....||..  % 3
........||................|  % 9
|....||....||....||....||..  % 3
..||....||....||....||....|  % 3
|..........................  % 27

ऊपरी पंक्तियों के लिए, अभिव्यक्ति है

(x + (x+y+1)%2) % (3 ** trailing_zeros_in_base3(3*(y+3**n)))

व्याख्या

{ ... }o*R**3  # Feed $_ = 3^n into block

map ->\y{ ... },^$_  # Map y = 0..3^n-1

|map { ... },<┌ ┐>,$_,<└ ┘>,1  # Map pairs (('┌','┐'),3^n) for upper rows
                               # and (('└','┘'),1) for lower rows.
                               # Block takes items as s and v

( ... )xx$_*3  # Evaluate 3^(n+1) times, returning a list

 (++$+y)%2  # (x+y+1)%2 for upper rows, (x+y)%2 for lower rows
(         +$++)  # Add x
                   (y+$^v,*/3...*%3)  # Count trailing zeros of 3*(y+v) in base 3
                3**  # nth power of 3
               %  # Modulo
??$^s[$++%2]  # If there's a remainder yield chars in s alternately
!!'│'         # otherwise yield '│'

6

कश्मीर (NGN / ट) , 37 27 26 बाइट्स

{+y,(|'y:x,,~>+x),x}/1,&2*

इसे ऑनलाइन आज़माएं!

बूलियन मैट्रिक्स लौटाता है

|'yngn / k के लिए सिंटैक्स विशिष्ट है। अन्य बोलियों के लिए :प्रत्येक को एक-क्रिया क्रिया को विवादास्पद बनाने की आवश्यकता होती है :|:'y


1
आउटपुट को और अधिक सुंदर बनाने के लिए, (यदि आपके ब्राउज़र द्वारा समर्थित है) की सभी घटनाओं को उजागर करें
user202729

3
@ user202729 किया - पाद लेख में तो यह बाइट काउंट को प्रभावित नहीं करता है
ngn

5

वोल्फ्राम भाषा 83 36 बाइट्स, (संभवतः -48 बाइट्स बोनस के साथ)

संस्करण 11.1 के रूप में, PeanoCurveएक अंतर्निर्मित है।

मेरा मूल, अनाड़ी प्रस्तुत कई बाइट बर्बाद कर दिया GeometricTransformationऔरReflectionTransform.

यह बहुत कम संस्करण alephalpha द्वारा सुझाया गया था । Reverseआउटपुट को ठीक से उन्मुख करने के लिए आवश्यक था।

Graphics[Reverse/@#&/@PeanoCurve@#]&

उदाहरण 36 बाइट्स

Graphics[Reverse/@#&/@PeanoCurve@#]&[3]

पीनो कर्व


बक्शीश

यदि यह 100 pt बोनस के लिए अर्हता प्राप्त करता है, तो इसका वजन 52 में होता है - 100 = -48 कोड [5]की गणना नहीं की गई थी, केवल शुद्ध कार्य।

Table[Graphics[Reverse/@#&/@PeanoCurve@#]&@k{k,#}&[5]

अनुक्रम


Graphics[Reverse/@#&/@PeanoCurve@#]&
एलेफाल्फा

ऐसा लगता है कि धोखा देने के लिए एक फ़ंक्शन है जो अपने आप ही पीनो वक्र की गणना करता है, लेकिन मैं इसे स्वीकार किए गए उत्तर के रूप में लूंगा क्योंकि यह बहुत प्रभावशाली है;)। @ LegionMammal978 मुझे लगता है कि आप अपना जवाब पोस्ट करने के लायक हैं, मैं तर्क दूंगा कि इसे जीतने के जवाब के रूप में स्वीकार करने के लिए वारंट पर्याप्त है।
Peiffap


4

HTML + SVG + JS, 224 213 बाइट्स

आउटपुट को क्षैतिज रूप से प्रतिबिंबित किया जाता है।

n=>document.write(`<svg width=${w=3**n*9} height=${w}><path d="M1 ${(p=(n,z)=>n--&&(p(n,-z,a(a(p(n,-z,d+=z)),p(n,z))),d-=z))(n*2,r=d=x=y=1,a=_=>r+=`L${x+=~-(d&=3)%2*9} ${y+=(2-d)%2*9}`)&&r}"fill=#fff stroke=red>`)

इसे ऑनलाइन आज़माएं! (HTML को प्रिंट करता है)


3

लोगो, 89 बाइट्स

to p:n:a
if:n>0[rt:a
p:n-1 0-:a
fw 5
p:n-1:a
fw 5
p:n-1 0-:a
lt:a]end
to f:n
p:n*2 90
end

पोर्ट ऑफ @ अरनौलद का अटारी बेसिक उत्तर। उपयोग करने के लिए, ऐसा कुछ करें :

reset
f 3

3

स्टैक्स , 19 बाइट्स

∩▐j>♣←╙~◘∩╗╢\a╘─Ràô

इसे चलाएं और डीबग करें

3 के लिए आउटपुट:

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