পিয়ানো কার্ভ আঁকছে


13

ভূমিকা

জ্যামিতিতে, পিয়ানো কার্ভটি 1890 সালে জিউসেপ পেরো দ্বারা আবিষ্কার করা স্পেস-ফিলিং বক্রের প্রথম উদাহরণ Pe পেয়ানো জর্জি ক্যান্টোরের পূর্ববর্তী ফলাফল দ্বারা অনুপ্রাণিত হয়েছিল যে এই দুটি সেটের একই কার্ডিনালিটি রয়েছে। এই উদাহরণের কারণে, কিছু লেখক যেকোন স্থান-ভরাট বাঁককে আরও সাধারণভাবে উল্লেখ করতে "পিয়ানো কার্ভ" বাক্যাংশটি ব্যবহার করেন।

চ্যালেঞ্জ

প্রোগ্রামটি একটি ইনপুট নেয় যা একটি পূর্ণসংখ্যা nএবং nএই চিত্রের বাম অংশে দেখানো পাশের রাস্তা 2 থেকে শুরু করে পিয়ানো কার্ভের মঞ্চের পুনরাবৃত্তিকে উপস্থাপন করে এমন একটি অঙ্কন আউটপুট দেয় : পিয়ানো কার্ভের তিনটি পুনরাবৃত্তি

ইনপুট

nপিয়ানো কার্ভটির পুনরাবৃত্তি সংখ্যা প্রদান করে এমন একটি পূর্ণসংখ্যা । Usesচ্ছিক, অতিরিক্ত ইনপুট বোনাস বিভাগে বর্ণিত হয়।

আউটপুট

nপিয়ানো কার্ভের তম পুনরাবৃত্তির একটি অঙ্কন । অঙ্কনটি ASCII শিল্প বা একটি "আসল" অঙ্কন উভয়ই হতে পারে, যা সহজ বা সংক্ষিপ্ততম।

বিধি

  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে দেওয়া যেতে পারে (আপনার ভাষা / সমাধানের জন্য সবচেয়ে উপযুক্ত বিন্যাসটি চয়ন করুন)।
  • নেতিবাচক মান বা অবৈধ ইনপুট হ্যান্ডেল করার প্রয়োজন নেই
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য।
  • যদি সম্ভব হয় তবে দয়া করে একটি অনলাইন পরীক্ষার পরিবেশের একটি লিঙ্ক অন্তর্ভুক্ত করুন যাতে অন্য লোকেরা আপনার কোড চেষ্টা করে দেখতে পারে!
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

বোনাসেস

যেহেতু এই পার্কে হাঁটা উচিত নয় (কমপক্ষে বেশিরভাগ ভাষায় আমি ভাবতে পারি), বোনাস পয়েন্টগুলি নিম্নলিখিতগুলির জন্য প্রদান করা হয়:

  • -100 বাইট যদি আপনার কোড পর্যন্ত পিয়ানো কার্ভগুলি নির্মাণের একটি জিআইএফ উত্পন্ন করে n
  • -100 বাইট যদি আপনার কোড কোনও আয়তক্ষেত্রাকার আকৃতির জন্য স্থান-পূরণের বক্ররেখা আঁকেন (স্পষ্টতই পিয়ানো কার্ভগুলি স্কোয়ারগুলির জন্য কাজ করে)। আপনি ধরে নিতে পারেন যে ইনপুটটি সেই ফর্মটি গ্রহণ করবে n l wযেখানে nআগের মতো একই অর্থ রয়েছে (পুনরাবৃত্তির সংখ্যা) তবে কোথায় lএবং wযে আয়তক্ষেত্রটি আঁকতে হবে তার দৈর্ঘ্য এবং প্রস্থে পরিণত হয়। যদি l == w, এটি নিয়মিত পিয়ানো কার্ভ হয়ে যায়।

নেতিবাচক স্কোর অনুমোদিত (কিন্তু তারা কি সম্ভব ...)।

সম্পাদন করা

এর সমাধানে আপনার প্রোগ্রামটির আউটপুট অন্তর্ভুক্ত করুন n == 3 (l == w == 1)


1
পিপিসিজিতে আপনাকে স্বাগতম :) এটি এক নজরে এক দুর্দান্ত প্রথম চ্যালেঞ্জের মতো দেখাচ্ছে। যদিও এটি পরিচিত অনুভব করে, আমি মনে করি যে চ্যালেঞ্জটি আমি ভাবতে পারি তা হ'ল এএসসিআইআই আর্ট। নোট করুন, যদিও, আমরা বোনাসগুলিকে দৃ strongly়ভাবে নিরুৎসাহিত করি এবং গল্ফিংয়ের ভাষা থাকবে যা এটি 100 বাইটেরও কম সময়ে অর্জন করতে পারে। এছাড়াও, এবং সবচেয়ে গুরুত্বপূর্ণ, আপনার একটি বিজয়ী মানদণ্ড প্রয়োজন। প্রদত্ত যে আপনার বোনাসগুলি কোনও সমাধানের স্কোর থেকে বাইটগুলি বিয়োগ করে, আমি সন্দেহ করি যে আপনি এটি কোড-গল্ফ বলে অভিহিত করেছেন
শেগি

4
হ্যাঁ, আমি বোনাসগুলি একটি ভাল ধারণা বলে মনে করি না, বিশেষত যেহেতু কমপক্ষে দুটি অ্যানিমেশন-সক্ষম এএসসিআইআই-আর্ট ফোকাসড গল্ফ্ল্যাংগুলি
এএসসিআই-কেবল

2
ওহ এছাড়াও হবে nযদি জন্য ব্যবহার করা যেতে lএবং wহয় এছাড়াও ইনপুট ??????????? এবং পিয়ানো কার্ভটি কি একটি বিশেষ কেস হবে - এটি কেবলমাত্র স্পেসফিলিং বক্ররেখা নয়, তাই কিছু অ্যালগরিদম এটির বিশেষায়িত হতে পারে
ASCII- কেবল

2
এছাড়াও, অ-বর্গক্ষেত্রের মাত্রার জন্য কাউকে তুচ্ছ স্পেসফিলিং কার্ভ (কেবল পিছনে পিছনে জিগজাগিং করা) করা থেকে কী থামায়
ASCII- কেবল

7
কোড গল্ফের বোনাসগুলি চ্যালেঞ্জগুলি লেখার সময় এড়াতে সর্বাধিক সম্মত বিষয়গুলির মধ্যে একটি। আমি আপনাকে সেগুলি সরিয়ে ফেলার পরামর্শ দিচ্ছি এবং চ্যালেঞ্জের প্রমিত সংস্করণটি কোনটি তা স্থির করুন।
lirtosiast

উত্তর:


6

গণিত, 60 - 100 - 100 = -140 স্কোর

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

খাঁটি ফাংশন। ইনপুট হিসাবে nএবং {l, w}(প্রস্থ এবং উচ্চতা) নেয় এবং আউটপুট হিসাবে একটি অ্যানিমেটেড গ্রাফিক দেয়। এটি প্রথমে একটি n ম অর্ডার দিয়ে পিয়ানো বক্ররেখা তৈরি করে PeanoCurve। যেহেতু l = w কেসটি এখনও পিয়ানো বক্ররেখা তৈরি করা দরকার, আমরা ডেভিডসির উত্তরের অনুরূপ 3 স্তরে অভিব্যক্তিটি ফ্লিপ করি ; lw এর জন্য আমরা কেবল Scaleআয়তক্ষেত্রের বক্ররেখা। এই বক্ররেখাটি এখনও দ্বিতীয় স্থানের বোনাস সন্তুষ্ট করে স্থান পূরণ করবে। প্রথম বোনাসের জন্য, আমরা এটি Animateসমস্ত আকারের চেয়ে বেশি করেছি। নোট করুন যে ওপি পরামর্শ দিয়েছে যে এটি তার নিজের উত্তরটি প্রমাণ করার জন্য ডেভিডসির চেয়ে যথেষ্ট আলাদা। এর ফলাফল এন = 3, = W = 1 নিম্নরূপ:


খুব সুন্দর! (যথাযথ ওরিয়েন্টেশন সহ)
ডেভিডসি

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-ইন্ডেক্স। ইউনিকোড অক্ষরের 2D অ্যারে প্রদান করে। মূল ধারণাটি হ'ল নিম্ন সারিগুলির জন্য, প্রকাশ

(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

কে (এনএনজি / কে) , 37 27 26 বাইট

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

এটি অনলাইন চেষ্টা করুন!

একটি বুলিয়ান ম্যাট্রিক্স প্রদান করে

|'yএনএনজি / কে-তে নির্দিষ্ট সিনট্যাক্স। অন্যান্য উপভাষাগুলি :প্রতিটি এড ক্রিয়াটি monadic করতে একটি প্রয়োজন :|:'y


1
আউটপুটটিকে আরও সুন্দর করতে, সমস্ত উপস্থিতি হাইলাইট করুন (যদি আপনার ব্রাউজার দ্বারা সমর্থিত হয়)
ব্যবহারকারী 202729

3
@ ব্যবহারকারী 202729 সম্পন্ন করেছেন - ফুটারে যাতে এটি বাইট গণনাটিকে প্রভাবিত করে না
ngn

5

ওল্ফ্রাম ভাষা 83 36 বাইট, (সম্ভবত -4 বাইট বোনাস সহ)

সংস্করণ 11.1 হিসাবে, PeanoCurveএকটি অন্তর্নির্মিত।

আমার আসল, আনাড়ি জমাতে GeometricTransformationএবং আরও অনেকগুলি বাইট নষ্ট করেReflectionTransform.

এই অনেক হ্রাস করা সংস্করণটি আলেফালফার দ্বারা প্রস্তাবিত হয়েছিল । Reverseআউটপুটটি সঠিকভাবে পরিচালিত করার জন্য প্রয়োজন ছিল।

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

উদাহরণ 36 বাইট

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

পেয়ানো বাঁক


বোনাস

যদি এটি 100 পিটি বোনাসের জন্য যোগ্যতা অর্জন করে, তবে এর ওজন 52 - 100 = -48 এ হওয়াতে কোডটি [5]গণনা করা হয়নি, কেবল খাঁটি ফাংশন।

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

ক্রম


Graphics[Reverse/@#&/@PeanoCurve@#]&
আলেফাল্ফ

এটি কিছুটা প্রতারণার মতো অনুভব করে যা নিজে থেকেই পিয়ানো বক্ররেখা গণনা করে এমন কোনও ক্রিয়াকলাপ করার জন্য, তবে আমি এটি গ্রহণযোগ্য উত্তর হিসাবে গ্রহণ করব কারণ এটি তবে বেশ চিত্তাকর্ষক;)। @ লিজিওনম্যামাল ৯৮৮ আমি মনে করি আপনি নিজের উত্তর পোস্ট করার যোগ্য, আমি যুক্তি দিয়েছি যে এটি জয়ের উত্তর হিসাবে গ্রহণের পরোয়ানা দেওয়া যথেষ্ট আলাদা।
পেইফাপ


4

এইচটিএমএল + এসভিজি + জেএস, 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>`)

এটি অনলাইন চেষ্টা করুন! (এইচটিএমএল প্রিন্ট করে)


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

@ Arnauld এর আটারি বেসিক উত্তরের বন্দর। ব্যবহার করার জন্য, ভালো কিছু করতে এই :

reset
f 3

3

স্ট্যাক্স , 19 বাইট

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

এটি চালান এবং এটি ডিবাগ করুন

3 এর জন্য আউটপুট:

███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ ███ ███ ███ ███ ███ ███ █ █ ███ ███ ███ ███
█                                 █ █                
█ ███ ███ ███ ███ ███ ███ ███ ███ █ █ ███ ███ ███ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ ███ ███ ███ █ █ ███ ███ ███ ███ ███ ███ ███ ███ █
                █ █                                 █
███ ███ ███ ███ █ █ ███ ███ ███ ███ ███ ███ ███ ███ █
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
█         █ █         █ █         █ █         █ █    
█ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
    █ █         █ █         █ █         █ █         █
███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █ █ ███ ███ █
█ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.