হিলবার্ট কার্ভ আঁকুন


12

একটি হিলবার্ট কার্ভ হ'ল একধরণের স্থান-পূরণের বক্ররেখা এবং এটি মূলত একটি লাইনে একটি প্লেনের মানচিত্র করে। লাইনের প্রতিটি বিন্দু সমতলে কেবলমাত্র একটি বিন্দুর সাথে সামঞ্জস্য করে এবং বিমানের প্রতিটি বিন্দু লাইনের কেবল একটি বিন্দুর সাথে মিলিত হয়। হিলবার্ট কার্ভের 0 থেকে 4 এর মধ্যে পুনরাবৃত্তিগুলি দেখানো হয়েছে:

0 থেকে 4 অবধি:

এই কাজের উদ্দেশ্য: উপরের সংজ্ঞা অনুসারে হিলবার্ট কার্ভের চতুর্থ পুনরাবৃত্তি আঁকতে কোড লিখুন। আপনার কোডটি সম্পূর্ণ হওয়া উচিত - অন্য কথায়, আপনি যদি হিলবার্ট কার্ভ আঁকার জন্য কোনও ফাংশন তৈরি করেন তবে আপনার কোডটিকে অবশ্যই সেই ফাংশনটি কল করতে হবে। আউটপুটটি হয় সরাসরি স্ক্রিনে প্রদর্শিত হতে পারে, বা আপনি কোনও চিত্র ফাইলে আউটপুট লিখতে পারেন। বক্ররেখাটি ঘোরানো বা উল্টানো হতে পারে তবে লাইনগুলি অবশ্যই সঠিক কোণগুলিতে ছেদ করতে হবে এবং আউটপুট প্রসারিত করা যাবে না। ASCII শিল্প প্রশংসা করা হয় কিন্তু গৃহীত হবে না। বাইটের মধ্যে সংক্ষিপ্ততম কোড জয়!


একটি ইনপুট বার সংখ্যা? অথবা আমরা কমপক্ষে 4 টির কোনও মান বেছে নিতে পারি?
লুইস মেন্ডো

এএসসিআইআই শিল্পকে গ্রাফিক্যাল হিসাবে বিবেচনা করা হয়?
গ্যাব্রিয়েল বেনামি

না; দুঃখিত - তাহলে এটি অন্য প্রশ্নের সদৃশ হবে
জে আন্তোনিও পেরেজ

@ জোর্জেপিরেজ কি বক্ররেখার আলাদা ঝোঁক থাকতে পারে? আপনার উদাহরণগুলির উল্লম্বভাবে উল্টানো বা 90-ডিগ্রি ঘোরান সংস্করণটির মতো
লুইস মেন্ডো

হ্যাঁ! যদিও সামগ্রিক আকারটি এখনও বর্গাকার হতে হবে
জে আন্তোনিও পেরেজ

উত্তর:


7

আর, 90 বাইট

n=scan();a=1+1i;b=1-1i;z=0;for(k in 1:n)z=c((w<-1i*Conj(z))-a,z-b,z+a,b-w)/2;plot(z,t="s")

@ লুইস মেন্ডো পোস্ট করা লিঙ্কটিতে ব্যবহৃত অ্যালগরিদমের নির্লজ্জ আর-বন্দর।

জন্য n=5আমরা পাই:

এখানে চিত্র বর্ণনা লিখুন


7

এমএটিএল , 39 38 বাইট

O5:"tZjJ*JQ-wJq+t2+&y2j+_v2/]XG25Y01ZG

এটি ইনপুট হিসাবে পুনরাবৃত্তির সংখ্যা নেয়। আপনি যদি এটি হার্ড-কোড করতে চান iতবে সংখ্যাটি দিয়ে প্রতিস্থাপন করুন।

প্রোগ্রামটি এখানে দেখানো জোনাস লন্ডগ্রেনের মতলব কোডের একটি বন্দর ।

ফলাফলটি নীচে দেখানো হয়েছে। আপনি এটি এমএটিএল অনলাইনেও চেষ্টা করতে পারেন ! আউটপুট উত্পাদন করতে কয়েক সেকেন্ড সময় লাগে। এই সংকলক পরীক্ষামূলক; আপনার পৃষ্ঠাটি রিফ্রেশ করার প্রয়োজন হতে পারে এবং এটি প্রাথমিকভাবে কাজ না করে থাকলে আবার "রান" টিপুন।

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা

O          % Push 0. This is the initial value of "z" in the original code
5:"        % Do 5 times
  t        %   Duplicate
  Zj       %   Complex conjugate
  J*       %   Multiply by 1j (imaginary unit). This is "w" in the original code
  JQ-      %   Subtract 1+1j
  w        %   Swap: brings copy of "z" to top
  Jq+      %   Add 1-1j
  t        %   Duplicate
  2+       %   Add 2
  &y       %   Duplicate the third element from top
  2j+_     %   Add 2j and negate
  v        %   Concatenate the three matrices vertically
  2/       %   Divide by 2
]          % End
XG         % Plot (in complex plane). The numbers are joined by straight lines
25Y0       % Push string 'square'
1ZG        % Make axis square

আপনার কোড কীভাবে কাজ করে তা আপনি ব্যাখ্যা করতে পারেন?
জে আন্তোনিও পেরেজ

অ্যালগরিদম ঠিক যেমনটি লিঙ্কে রয়েছে। তবে আমি একটি ব্যাখ্যা যুক্ত করব
লুইস মেন্ডো

@ জর্জের ব্যাখ্যা যুক্ত হয়েছে
লুইস মেন্ডো


@ ফ্লোয়ার জোনাস লন্ডগ্রেনের সমস্ত কৃতিত্ব :-)
লুইস মেন্ডো

6

ম্যাটল্যাব, 264 262 161 বাইট

এটি এখনও একইভাবে কাজ করে, ব্যতীত আমরা মূলত ইলবার্ট কার্ভের "ডেরাইভেটিভ" গণনা করি, আমরা তখন `cumsum`` এর মাধ্যমে" সংহত "করি `` এটি কোডের আকারকে একগুচ্ছ বাইট দ্বারা হ্রাস করে।

function c;plot(cumsum([0,h(1,1+i,4)]));axis equal;end function v=h(f,d,l);v=d*[i*f,1,-i*f];if l;l=l-1;D=i*d*f;w=h(f,d,l);x=h(-f,D,l);v=[x,D,w,d,w,-D,-x];end;end

পুরনো সংস্করণ

এটি কেবল একটি সরল পুনরাবৃত্তি পদ্ধতির। সরলতার জন্য ভেক্টোরিয়াল তথ্য সঞ্চয় করতে আমি জটিল সংখ্যা ব্যবহার করেছি। আপনি অংশে বক্ররেখা পরিবর্তন করতে পারেন h(0,1,1+i,4)। প্রথম যুক্তিটি p=0প্রাথমিক অবস্থান, দ্বিতীয় যুক্তি fহ'ল অভিমুখীকরণের জন্য পতাকা ( +1বা -1), তৃতীয় যুক্তিটি dসেই দিক / ঘূর্ণন যা বক্ররেখা আঁকতে হবে এবং চতুর্থটি lপুনরাবৃত্তির গভীরতা depth

function c;hold on;h(0,1,1+i,4);axis equal;end function p=h(p,f,d,l);q=@plot;if l;l=l-1;d=i*d*f;p=h(p,-f,d,l);q(p+[0,d]);p=p+d;d=-i*d*f;p=h(p,f,d,l);q(p+[0,d]);p=p+d;p=h(p,f,d,l);d=-i*d*f;q(p+[0,d]);p=p+d;p=h(p,-f,d,l);else;q(p + d*[0,i*f,1+i*f,1]);p=p+d;end;end

এটি পুরানো সংস্করণগুলির মতো দেখাচ্ছে:

2015 বি-তে এটির মতো দেখাচ্ছে:

->

1
মতলব আর ২০১৫ বিতে এটি রঙে প্লট করে <3
লুইস মেন্ডো


@ লুইসমেডো আমি এখন cumsumএকেবারে উজ্জ্বল ধারণাটি দিয়ে একে একে গল্ফ করতে সক্ষম হয়েছি !
flawr

3

ম্যাটল্যাব / অক্টোবায়, 202 বাইট

আমি লক্ষ্য করেছি সংস্করণ @LuisMendo লিঙ্ক হল পূর্ববর্তী চেয়ে পথ খাটো ছিল "হস্তনির্মিত" সমাধান কিন্তু একটি সম্পূর্ণরূপে ভিন্ন পদ্ধতি ব্যবহার করে। আমি এখানে এখন একটি গল্ফযুক্ত সংস্করণ সিডাব্লু হিসাবে পোস্ট করছি:

এই সংস্করণটি লিন্ডেনমায়ার সিস্টেম পদ্ধতির উপর ভিত্তি করে:

A=zeros(0,2);B=A;C=A;D=A;n=[0,1];e=[1,0];for k=1:4;a=[B;n;A;e;A;-n;C];b=[A;e;B;n;B;-e;D];c=[D;-e;C;-n;C;e;A];D=[C;-n;D;-e;D;n;B];A=a;B=b;C=c;end;A=[0,0;cumsum(A)];plot(A(:,1),A(:,2));axis off;axis equal

এখানে চিত্র বর্ণনা লিখুন


3

জাভাস্ক্রিপ্ট (ES6), 266 ... 233 232 বাইট

হিলবার্ট কার্ভের একটি এসভিজি রেন্ডারিং।

document.write('<svg><path fill=none stroke=red d="M8 8'+(f=(i,s='2',d=x=y=8)=>i?f(i-1,s.replace(/./g,c=>[32410401423,,10432423401][+c]||c)):s.replace(/./g,c=>c-4?(d+=c&1&&c-2,''):`L${x+=4-'4840'[d&=3]} ${y+=4-'0484'[d]}`))(5)+'">')

নীলকে ধন্যবাদ 1 বাইট সংরক্ষিত


1
চেষ্টা করুনfill=none
নীল

2

পাইথন 3, 177 175 171 বাইট

হিলবার্ট কার্ভের জন্য লিন্ডেনমায়ার সিস্টেমের একটি সহজ বাস্তবায়ন। গল্ফিং পরামর্শ স্বাগত!

সম্পাদনা করুন: -২ বাইট কেডকে ধন্যবাদ হিলবার্ট বক্ররেখা কীভাবে তৈরি তা পুনর্গঠন থেকে -3 বাইট। ইটিএইচ প্রডাকশনগুলির জন্য ধন্যবাদ -1 বাইট।

from turtle import*;s="a";exec('t=""\nfor c in s:t+=c>"F"and"+-abFF-+baFFba-+FFab+-"[c<"b"::2]or c\ns=t;'*5)
for c in s:
 if"-">c:rt(90)
 elif"F">c:lt(90)
 elif"a">c:fd(9)

এখানে চিত্র বর্ণনা লিখুন

Ungolfing

import turtle

hilbert_seq = "a"

for _ in range(5):
    new_seq = ""
    for char in hilbert_seq:
        if char == "a":
            new_seq += "-bF+aFa+Fb-"
        elif char == "b":
            new_seq += "+aF-bFb-Fa+"
        else:
            new_seq += char
    hilbert_seq = new_seq

for char in hilbert_seq:
    if char == "F":
        turtle.forward(9)
    elif char == "+":
        turtle.right(90)
    elif char == "-":
        turtle.left(90)

পরিবর্তন কিভাবে আপনি গঠনের tদুই বাইট সংরক্ষণ করতে পারেন: t+=[[c,"+AF-BFB-FA+"][c=="B"],"-BF+AFA+FB-"][c=="A"]। যেহেতু এই দুটির জন্য প্যাটার্নটি প্রায় একই রকম আমি ভাবছি এটি ব্যবহারের কোনও উপায় আছে কিনা ..
কেড

সম্ভবত একটি বাইট সংরক্ষণ if c>"E":করতে পরিবর্তন if"E"<c:?
ইটিএইচ প্রোডাকশনস

1

MSWLogo (সংস্করণ 6.5 বি), 136 বাইট

এখানে চূড়ান্ত হিলবার্ট কার্ভ প্রোগ্রামের ভিত্তিতে ।

to h :n :a :l
if :n=0[stop]
rt :a
h :n-1(-:a):l
fd :l
lt :a
h :n-1 :a :l
fd :l
h :n-1 :a :l
lt :a
fd :l
h :n-1(-:a):l
rt :a
end
h 5 90 9

একটি ফাংশন hসংজ্ঞায়িত করা হয়, যা পুনরাবৃত্তির সংখ্যা নেয় :n(1-ভিত্তিক), কোণ :a, দৈর্ঘ্য :l। এটি পুনরাবৃত্ত হয়, :aঅভিমুখটি সঠিক হওয়ার জন্য দুটি ক্ষেত্রে বিরতিযুক্ত কোণ দিয়ে নিজেকে একটি নিম্ন পুনরাবৃত্তি বলে ।

  • rt :a, lt :aকচ্ছপটি ঘোরান (ত্রিভুজ জিনিস যার পথটি চিহ্নিত) ডানদিকে বামে, :aডিগ্রি বামে ।
  • fd :lকচ্ছপকে :lধাপে এগিয়ে নিয়ে যায়।

অবশেষে, ফাংশন বলা হয়: h 5 90 9। কচ্ছপ অতিরিক্ত 2 বাইটের জন্য আড়াল হতে পারে ht,।

(5-1) -পরিবর্তন


উপরের বাম কোণে কী হচ্ছে?
flawr

@ ফ্লোয়ার এটি কচ্ছপ। এটি সংযোজন করে আড়াল করা যায় ht
মনিকার

1

গণিত 128 বাইট

Graphics[Line@AnglePath[Total/@Split[Cases[Nest[#/.{-2->(s=##&@@#&)[l={-1,2,0,1,-2,0,-2,1,0,2,-1}],2->s@-l}&,{-2},4],-1|1|0],#!=0&][[;;-2,;;-2]]*Pi/2]]

আপনি যদি পছন্দ করেন তবে উপরের 4 টি পৃথক সংখ্যক পুনরাবৃত্তির সাথে প্রতিস্থাপন করুন।

স্ট্রিং সিকোয়েন্সের চেয়ে পূর্ণসংখ্যার সিকোয়েন্স সহ লিন্ডেনমায়ার সিস্টেম হিসাবে সম্পন্ন হয়েছে যাতে দ্বিতীয় উত্পাদনের নিয়মটি প্রথম নিয়মের কেবল নেতিবাচক। এই সংস্করণটি 151 বাইট।

জোনাস লন্ডগ্রেনের ম্যাটল্যাব কোডটির বন্দরটি কেবল 128 বাইট।

z=0;Graphics[Line[{Re[#],Im[#]}&/@Flatten[Table[w=I*Conjugate[z];z={w-(a=1+I),z-(b=1-I),z+a,b-w}/2,{k,5}][[5]]]],AspectRatio->1]

আমি দেখছি যে ম্যাথেম্যাটিকার ভবিষ্যতের সংস্করণে এটি সত্যিই সংক্ষিপ্ত হয়ে উঠতে পারে, এরকম কিছু:

Graphics@HilbertCurve[n]

http://mathworld.wolfram.com/HilbertCurve.html


1

LindenMASM , 63 বাইট

একটি LindenMASM উত্তর সঙ্গে অন্য প্রশ্ন? অসাধারণ!

STT
AXI A
INC 5
SET F 0
RPL A -BF+AFA+FB-
RPL B +AF-BFB-FA+
END

আবার, পাইথনের সাথে কিছু অঙ্কন বাগের কারণে turtle, কখনও কখনও আপনি যখন এটি চালান তখন পুরো অঙ্কনটি সেখানে থাকে না। তবে আপনি দেখতে পাচ্ছেন এটি আসলে কাজ করে:

চতুর্থ পুনরাবৃত্তি

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