"দুঃখিত, যুবক, কিন্তু এটি কচ্ছপগুলি সর্বত্রই!"


21

একটি লিন্ডমায়ার সিস্টেম কার্যকর করুন

একটি লিন্ডমায়ার সিস্টেম (বা এল-সিস্টেম) থু এবং পোস্ট সিস্টেমের সাথে সম্পর্কিত , এবং এটি বোটানিকাল মডেলিং এবং ফ্র্যাক্টাল জেনারেশনে ব্যবহৃত হয় ।

একটি এল-সিস্টেম স্ট্রিং-রাইটিং দ্বারা বর্ণনা করা হয় যেখানে প্রতীক-বর্ণমালা থেকে একটি প্রতীক চিহ্নের প্রতিস্থাপনের ক্রমটিতে ম্যাপ করা হয় । এই ম্যাপিংগুলির একটি সংগ্রহ সঠিকভাবে এল-সিস্টেমকে গঠন করে।

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

আপনার কাজটি হ'ল অল্প সংখ্যক অক্ষরে একটি এল-সিস্টেম চালানো। আপনার প্রোগ্রামটি অবশ্যই যথাযথ ইনপুট (ফাইল, কমান্ড-লাইন, তবে উত্সের বাহ্যিক, বাহ্যিক) দ্বারা উইকিপিডিয়া পৃষ্ঠা থেকে ড্রাগন কার্ভ এবং ব্রাঞ্চিং স্টেম উভয়ই রেন্ডার করতে সক্ষম হবে।

শাখা কাণ্ড ড্রাগন কার্ভ

এটি কোড গল্ফ।

সম্পাদনা: এখানে কয়েকটি উদাহরণ আমি শহরের চারপাশে পোস্ট করেছি। তাই উত্তর / ঘোরান-টু-উত্তর { কোথায় আমি প্রথম এল-সিস্টেম আবিষ্কৃত } , উত্তর তাই / কিভাবে-থেকে-প্রোগ্রাম-এ-ফ্র্যাক্টাল করতে , তাই উত্তর / পুনরাবৃত্তির-ইন-PostScript , comp.lang.postscript আলোচনা / আবৃত্তি , PostScript L-সিস্টেম সংগ্রহে , codegolf.SE/draw-a-sierpinski-triangle {নিজেকে এবং thomasW মধ্যে প্রতিযোগিতা উৎপত্তি}


স্যান্ডবক্স এড়িয়ে গেছে এটি তুলনামূলক সহজবোধ্য বলে মনে হচ্ছে এবং মজা করা উচিত।
লুসার droog

বিটিডাব্লু, উপরের উদ্ধৃতিটির উত্স কি কেউ জানেন? আমি উইলিয়াম জেমস শুনেছি, এবং আমি ফ্যারাডে শুনেছি।
লুসার droog

1
উইকিপিডিয়া জানিয়েছে যে উত্সটি বিতর্কিত, সবচেয়ে ভাল অনুমান বার্ট্রান্ড রাসেল।
উগোরেন

আইটিওয়াইএম বার্ট্র্যান্ড রাসেল
পল আর

1
বর্ণমালার আকার, নিয়মের সংখ্যা, রাউন্ডের সংখ্যা বা সম্ভাব্য (ভিজ্যুয়ালাইজেশন) বিধিগুলির কোনও সীমাবদ্ধতা আছে (একটি সরল রেখা আঁকুন, পুশ / পপ অবস্থান / কোণ, কত ডিগ্রি ঘুরুন ইত্যাদি) যদি কেবল আমাদের আঁকার প্রয়োজন হয় এই দুটি তখন আমাদের দরকার হবে ধাক্কা মেরে পপিং করা, সোজা লাইন আঁকতে এবং উভয় দিকে 45 ডিগ্রি ঘুরিয়ে সক্ষম হতে হবে, কেবল দুটি নিয়ম এবং আকারের বর্ণমালা 4
shiona

উত্তর:


31

গণিত 200 198 188 171 168

স্পষ্টতার জন্য স্পেস যুক্ত হয়েছে:

f[i_, b_, h_, j_, r_, n_] :=
 (a = h; p = j; s = k = {}; t = Flatten;
  (Switch[#,
      6, s = {a, p, s},
      8, {a, p, s} = s,
      _C, k = {k, Line@{p, p += {Cos@a, Sin@a}}}];
     If[# < 9, a += I^# b ]) & /@ t@Nest[# /. r &, i, n];
  Graphics@t@k)

কোথায়:

i: প্রাথমিক অবস্থা;
বি: ঘূর্ণন কোণ
h: প্রাথমিক কোণ
j: প্রাথমিক অবস্থান
r: উত্পাদনের বিধি
n: পুনরাবৃত্তি

উত্পাদনের বিধি ব্যাকরণ:

2 = বাঁদিকে বাঁক (-);
4 = ডান দিকে ঘুরুন (+);
6 = পুশ এবং বাম দিকে বাঁক ("[");
8 = পপ এবং ডান দিকে ঘুরুন ("]");
সি [i] = আঁকুন (চিহ্নগুলির যে কোনও সংখ্যা)
অন্য কোনও প্রতীক = কিছুই করবেন না, কেবল এটি পরবর্তী রাষ্ট্র তৈরিতে ব্যবহার করুন (যে কোনও সংখ্যক চিহ্ন)

{2,4,6,8} অনুক্রমটি আছে কারণ আমি ঘুরানোর জন্য I^n( I= কাল্পনিক ইউনিট) ব্যবহার করছি ।

উদাহরণ:

f[{C[1], X}, Pi/2, 0, {0, 0}, {X -> {X, 4, Y, C[1]}, Y -> {C[1], X, 2, Y}}, 10]

গণিত গ্রাফিক্স

f[{C@1}, Pi/2, 0, {0,0}, {C@1->{C@1, 2, C@1, 4, C@1, 4, C@1, 2, C@1}}, 6]

গণিত গ্রাফিক্স

f[{C[1]}, Pi/4, Pi/2, {0, 0}, {C[2] -> {C[2], C[2]}, C[1] -> {C[2], 6, C[1], 8, C[1]}}, 10]

গণিত গ্রাফিক্স

f[{C[1]}, Pi/3, 0, {0, 0}, {C@1 -> {C@2, 4, C@1, 4, C@2}, C@2 -> {C@1, 2, C@2, 2, C@1}}, 10]

গণিত গ্রাফিক্স

f[{X},5/36 Pi, Pi/3, {0,0},{X->{C@1, 4, 6, 6, X, 8, 2, X, 8, 2, C@1, 6, 2, C@1, X, 8, 4, X},
                            C@1->{C@1, C@1}}, 6]

গণিত গ্রাফিক্স


আপনি যদি অনেকগুলি পুনরাবৃত্তি ব্যবহার করার পরিকল্পনা করেন তবে এটি Graphics@kদ্বারা সংশোধন করুন Graphics@Flatten@k। অন্যথায় একটি পুনরাবৃত্তি সীমা আপনাকে কামড় দেবে এবং আপনার এমএমএ সেশনটি বাতিল করে দেবে।
ডাঃ বেলিসারিয়াস

আমার ম্যাক্রো-প্রসারণ পদ্ধতির উচ্চতর পুনরাবৃত্তিগুলির সাথে একই রকম সমস্যা ছিল। স্ট্রিং সবেমাত্র বিশাল হয়ে ওঠে। কিন্তু সমাধানটি চ্যাপ্টা করার পক্ষে হয়নি not :)
লুসার droog

2
+1 সত্যিই খুব সুন্দর;) একটি দুর্দান্ত বিক্ষোভ হতে পারে। আপনি কি জমা দিন?
ভিটিলিয় কৌরভ



9

পাইথন, 369 294

বিজয়ী নয় তবে আমি যা চেষ্টা করেছি তা পোস্ট করব।

from turtle import*
I=open('l').read().split()
s,S,p=I[0],'',[]
for j in range(8):
    for i in s:S+=eval('{'+I[1]+'}')[i]
    s,S=S,''
for k in s:
    if k=='[':p+=[heading(),pos()];continue
    if k==']':pu();goto(p.pop());seth(p.pop());pd();continue
    try:{'f':fd,'F':fd,'+':rt,'-':lt}[k](5)
    except:pass

পাইথন গল্ফ করা ভাল নয় ...... সম্ভবত অন্য কেউ এটি করতে পারেন।

ইনপুট

ইনপুটটি নিম্নোক্ত বিন্যাস সহ "এল" (কোনও এক্সটেনশন নয়) নামের একটি বহিরাগত ফাইল থেকে এসেছে:
লাইন 1 : প্রাথমিক অবস্থা (অক্ষর)
লাইন 2 : কমা-বিচ্ছিন্ন বিধি

প্রতীক
f এবং F: এগিয়ে আঁকুন
+: ডান দিকে 5 ডিগ্রি
-ঘুরুন: বাম 5 ডিগ্রি ঘুরুন
[: অবস্থান এবং শিরোনাম
]: পপ অবস্থান এবং শিরোনাম
অঙ্কন ফাংশন দ্বারা অন্য চিহ্নগুলি উপেক্ষা করা হয়।

বিধিগুলি
একটি নিয়ম বিন্যাসে রয়েছে "predecessor":"successor(s)"
নোটটি একক বা ডাবল হোক না কেন প্রয়োজনীয় es
predecessorএকটি একক চরিত্র হতে হবে।
এছাড়াও, কোনও অন্তর্নিহিত প্রতিবন্ধকতা নেই: আপনার অবশ্যই তাদের জন্য কোনও পরিবর্তন-সংক্রান্ত নিয়ম স্পষ্টভাবে উল্লেখ করতে হবে।

উদাহরণ

শাখা কাণ্ড

------------------f
'-':'-','+':'+','[':'[',']':']','F':'FF','f':'F[+++++++++f]---------f'

আউটপুট

নোট করুন যে উত্সটি কেবলমাত্র ভিজিবল এরিয়ায় গ্রাফটি ডাউন করতে স্কেল করার জন্য এটি পরিবর্তন করা হয়েছে। কনসোলটি "কচ্ছপ" লুকানোর জন্যও ব্যবহৃত হয়।

ড্রাগন বক্ররেখা

fx
'-':'-','+':'+','[':'[',']':']','f':'f','x':'x++++++++++++++++++yf','y':'fx------------------y'

আউটপুট

আবার, কনসোলটি "টার্টল" লুকানোর জন্য ব্যবহৃত হয়।

সিয়েরপিনস্কি ত্রিভুজ

f------------------------F------------------------F
'-':'-','+':'+','[':'[',']':']','f':'f------------------------F++++++++++++++++++++++++f++++++++++++++++++++++++F------------------------f','F':'FF'

আউটপুট

জেনারেশন এখানে হ্রাস 5।


3
আপনি ফাংশন সরিয়ে একটি শালীন সংরক্ষণ পেতে পারেন (আমি এটা 32 অক্ষর করতে) f, r, l; থেকে একটি ডামি প্যারামিটার যোগ oএবং c; এবং তারপরে সিউডো-স্যুইচ পরিবর্তন করুন{'f':fd,'F':fd,'+':rt,'-':lt,'[':o,']':c}[k](5)
পিটার টেলর

আপনিও ইনলাইন করতে পারেন g, এবং আমি মনে করি oএবং cইনলাইন ifস্টেটমেন্টগুলি ( globalঘোষণার তুলনায় সস্তা ) দিয়ে মুছে
পিটার টেলর

@ পিটারটেলর ভাল কাজ আমার একটি অন্তর্দৃষ্টি ছিল যে এই ফাংশনগুলির মধ্যে কিছুটি অন্তর্ভুক্ত করা যেতে পারে তবে এটিকে স্পষ্টভাবে বলতে গেলে পর্যাপ্ত পাইথন জানত না know
লুসার droog

1
@ লেজারড্রোগ, আমি পাইথনকেও জানি না: কী কাজ করেছে তা দেখার জন্য আমি কেবল বিচার ও ত্রুটি করেছি - যেমন আমি চেষ্টা করেছি এমন কিছু জিনিস (যেমন লাম্বডাস ব্যবহার করে oএবং cসরাসরি সিউডো-স্যুইচে) সিনট্যাক্স ত্রুটি দেয়, তবে অন্যরা তা করেনি ' টি।
পিটার টেলর

আরও গল্ফিংয়ের জন্য ইঙ্গিতগুলি: ১. ইনপুট ফর্ম্যাটটি পরিবর্তন করুন: নিয়মের চারপাশে ধনুর্বন্ধনী প্রয়োজন এবং কোনও স্পেস (কোনও নিউলাইন নয়) দ্বারা বিধি থেকে পৃথক অক্ষরেখা প্রয়োজন। 2. stdin থেকে পড়ুন: s,R,*p=input().split()। 3. চূড়ান্ত মান জেনারেট করুন sদ্বারা exec('s="".join(map(eval(R).get,s));'*8)। 4. ছেড়ে দিন continue। 5. ইনডেন্ট মাত্র 1 স্পেস। 6. ifপরীক্ষার জন্য দিকগুলি স্যুইচ করে স্থানটি সংরক্ষণ করুন । 7. রাখুন k:intমধ্যে dict(প্রথম এন্ট্রি) এবং তারপর আপনি প্রয়োজন হবে না except: try:। (আমি 215 টি অক্ষর পেতে।)
পুনর্বহাল মনিকা

7

জাভাস্ক্রিপ্ট (179 বাইট)

পুরোপুরি নিশ্চিত নয় যে এটি যোগ্যতা অর্জন করে, কারণ নিয়মগুলির অবজেক্টটি প্রকৃত অঙ্কন সমস্ত করে।

ডেমো (ড্রাগন, অ্যানিমেটেড):
- প্রসারিত: http://jsfiddle.net/SVkMR/9/show/light
- কোড সহ: http://jsfiddle.net/SVkMR/9/

minified:

function L(c,r,n){o=(function g(d,s,o,i){for(o=i='';a=d&&s[i++];)o+=r.r[a]?g(d-1,r.r[a]):a;return o||s;})(n,r.r[r.s]);(function z(i){r[s=o[i]]&&r[s](c)||setTimeout(z,10,i+1)})(0)}

রিডেবল (পর):

function L(c,r,n){
    o=(function g(d,s,o,i){
        for(o=i='';a=d&&s[i++];)o+=r.r[a]?g(d-1,r.r[a]):o+=a
        return o||s
    })(n,r.r[r.s]);

    (function p(i){
        r[s=o[i]]&&r[s](c)||setTimeout(p,10,i+1)
    })(0)
}

ইনপুট:

var sierspinski = {
    r:{'A':'B-A-B','B':'A+B+A'},
    '+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/3)},
    '-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/3)},
    'A':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    'B':function(c){this['A'](c)},
    s:'A',
    a:0,
    m:1
};

var koch = {
    r: {'F':'F+F-F-F+F'},
    '+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/2)},
    '-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/2)},
    'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    s:'F',
    a:0,
    m:2
};
var dragon = {
    r: {'X':'X+YF','Y':'FX-Y'},
    '+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/2)},
    '-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/2)},
    'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    s:'X',
    a:0,
    m:5
};

var algae = {
    r: {'A':'B[A]A','B':'BB'},
    '[':function(c){c.save();c.rotate(Math.PI/4);},  // save/restore will push/pop current state of context. 
    ']':function(c){c.restore();c.rotate(-Math.PI/4);},
    'A':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    'B':function(c){this['A'](c);},
    s:'A',
    a:-Math.PI/2,
    m:1
};

var tree = {
    r:{'X':'F-[[X]+X]+F[+FX]-X','F':'FF'},
    '+':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/180*25)},
    '-':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/180*25)},
    '[':function(c){c.save();},
    ']':function(c){c.restore();},
    'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    s:'X',
    a:-Math.PI/180*25,
    m:5
};

ব্যবহার:

var ctx = document.getElementById('l').getContext('2d'); // grab context
ctx.translate(299.5,199.5); // start drawing from center, fractional pixels because the canvas draws lines centered on the x/y coord specified
L(ctx, dragon, 8); // pass in context, rules object, and recursion cap

বোনাস: গোল্ডেন সর্পিল http://jsfiddle.net/SVkMR/35/show/light/

var golden = {
    r:{'A':'FT[TT]A','T':'+F'},
    'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
    '[':function(c){c.save();},
    ']':function(c){
        c.restore();

        c.beginPath();
        c.arc(0,-this.m,this.m,Math.PI/2,Math.PI);
        c.stroke();

        this.m+=this.d;this.d=this.m-this.d
    },
    '+':function(c){c.rotate(-Math.PI/2);},
    s:'A',
    a:-Math.PI/2,
    m:1,
    d:0
};

আমি মনে করি অ্যানিমেশনটি নিয়মের সাথে কোনও স্বাধীনতার জন্য ক্ষতিপূরণ দেয়। ভাল করেছ! +1
লুসার ড্রোগ

:) মজার জিনিস! ।
শ্মিদ্দ্দী

5

পুনশ্চ 264 298 295 255

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

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

এছাড়াও, অ্যারে এবং নামের পরিবর্তে স্ট্রিং এবং পূর্ণসংখ্যার ব্যবহারের জন্য নতুন ডিজাইন করা।

সম্পাদনা করুন: -40 অক্ষর নাম্বার দ্বারা সিস্টেমের নামগুলি কল করার জন্য দুটি পদ্ধতি যুক্ত করা হয়েছে (আমি কাঁচা বাইনারি টোকেনগুলি কাজ করতে পারি বলে মনে হয় না But তবে এই প্রতিমাটি আমার পক্ষে কাজ করে))

/*{<920>dup 1 4 3 roll put cvx exec}def/${//* 73
*}def[/T[48{}49{}43{A<88>$}45{A<6e88>$}70{R
0<85>$}91{<1e39>$[/.[<286827>$]cvx>><0d0d>$}93{.<9c6b1e39390d>$}>>/S{dup
B eq{T<0d3e>${<643f>$}<4939>$}{exch{<643e>$ 1 add S}73 *}85 * 1 sub}>><0d6b>$
0 S<a7>$

আধা-মন্তব্য বাইনারি।

/*{<920>dup 1 4 3 roll put cvx exec}def/${//* 73 *}def %73=forall
[/T[70{R 0<85>$}48{}49{} %<85>=rlineto
43{A<88>$}45{A<6e88>$} %<88>=rotate <6e>=neg
91{<1e39>$ %<1e>=currentdict <39>=end
    [/.[<286827>$]cvx>> %<28>=currentpoint <68>=matrix <27>=currentmatrix
        <0d0d>$} %<0d>=begin
93{.<9c6b1e39390d>$}>> %<9c>=setmatrix <6b>=moveto
/S{dup B eq{T<0d3e>${<643f>$}<4939>$} %<3e>=exch <64>=load <3f>=exec <49>=forall
{exch{<643e>$ 1 add S}73 *}85 * 1 sub}>>
<0d6b>$ 0 S<a7>$  % 85=ifelse <a7>=stroke

নি: - "বাইনারি"।

[/T[70{R 0 rlineto}48{}49{}43{A rotate}45{A neg rotate}91{currentdict
end[/.[currentpoint matrix currentmatrix]cvx>>begin begin}93{. setmatrix
moveto currentdict end end begin}>>/S{dup B eq{T begin exch{load exec}forall
end}{exch{load exch 1 add S}forall}ifelse 1 sub }>>begin moveto 0 S stroke

এটি অপারেন্ড স্ট্যাকের প্রাথমিক স্ট্রিং এবং টার্টেলের শুরু অবস্থানের সাথে ডিক্সট্যাকের একটি অভিধানে এল-সিস্টেমটি সংজ্ঞায়িত করা প্রয়োজন (উত্সে প্রেরেন্ট, উদাহরণস্বরূপ gs dragon.sys lsys.ps))

ড্রাগন কার্ভ

%!
[                     %begin dictionary construction
    % productions are described by integer-key/string-value pairs
    48(0+1F) %0       %ascii code for '0' defined as the string "0+1F"
    49(F0-1) %1       %  "     "   "  '1'   "     "   "    "    "F0-1"
    43(+) %+          %  "     "   "  '+' defined as itself
    45(-) %-          %  "     "   "  '-'   "     "   "
    70(F) %F          %  "     "   "  'F'   "     "   "
    % parameters
    /A 90 %angle
    /R 2  %radius
    /B 10 %maximum recursion-level
>>begin  % L-system dictionary on top of dictstack
(F0)     % initial string on stack
300 400  % starting position on stack

শাখা কাণ্ড।

[
    48(F[+0]-0) %0
    49(F0-1) %1
    43(+) %+
    45(-) %-
    70(FF) %F
    91([) %[
    93(]) %]
    /A 45 %angle
    /R 5  %radius
    /B 3 %recursion
>>begin
(++0)     % initial string
300 400  % starting position

অবহেলিত এবং মন্তব্য।

[                                 % begin dictionary construction
    /T[                           % /T is the Turtle dictionary containing
                                  % integer-key/procedure-value pairs
                                  % keyed to ascii values
        70{R 0 rlineto}        %F  
        48{}                   %0
        49{}                   %1  
        43{A rotate}           %+  
        45{A neg rotate}       %-  

          % For brackets, create a dictionary containing a single procedure '.' (dot)
          % which holds a saved matrix (orientation+size) and currentpoint.
          % Since this procedure is called while the Turtle dict is on top of the
          % dictstack, the temporary dictionary is placed just under the top.
        91{currentdict end[/.[currentpoint matrix currentmatrix]cvx>>begin begin} %[
          % Right bracket: reset position and orientation,
          % pop the dict just under the top.
        93{. setmatrix moveto currentdict end end begin}    %]  
    >>  
    /S{ % stack contains: string recursion-level
        dup B eq{ % hit recursion bound, interpret string as turtle commands
            T begin
                exch % level string
                %dup =
                {                      % iterate through string
                    load exec          % execute turtle command by integer code
                } forall % level       % string has been consumed
            end
            %(B)= pstack
        }{ % recurse
            %(A)= pstack
            exch % level string
            { % level char                   iterate through string
                load exch % string level   process production:load string by int code
                1 add S   % string level+1   increase level and call self
            } forall                       % string has been consumed
        }ifelse
        1 sub            % return level-1
        %(C)= pstack
    }
>>begin
moveto 0 S stroke

এটি চালানোর জন্য, এই 3 টি ব্লক 3 টি ফাইল হিসাবে সংরক্ষণ করা যায়: ড্রাগন.পিএস, স্টেমস.পিএস, lsys.ps (উপরের প্রোগ্রাম ব্লকগুলির মধ্যে যে কোনও একটির মতো কাজ করবে)। তারপরে জিএস দিয়ে চালান: gs dragon.ps lsys.psবা gs stems.ps lsys.ps। এগুলি প্রথমে মনস্থ করা যেতে পারে, যদি ইচ্ছা হয়: cat dragon.ps lsys.ps | gs -বা cat stems.ps lsys.ps | gs -

ড্রাগন বক্ররেখা

স্টেমের কোনও ছবি নেই। উচ্চতর গভীরতায় এটি আর আকর্ষণীয় হয়ে ওঠে না।


4

গণিত 290

এই নগ্ন-হাড়ের প্রয়োগ বাস্তবায়নের পরিবর্তে আউটপুটকে কেন্দ্র করে। এটি উত্পাদন নিয়ম ব্যবহার করে না। সুতরাং এটি চ্যালেঞ্জের উপযুক্ত উত্তর হতে পারে না।

ব্রাঞ্চিং কান্ড থিও গ্রে এর প্রদর্শন থেকে অভিযোজিত ।

কোড

f@{a_, b_} := {{a, #}, {b, #}} &[a + (b - a)/2 + {{0, 1/2}, {-1/2, 0}}.(b - a)]; w = Flatten;
h[s_, g_] :=Graphics[If[s == 0,Line /@ Nest[w[f /@ #, 1] &, {{{0, 0}, {1, 0}}}, g], 
 MapIndexed[Line@# &, NestList[w[Map[{{#[[2]], #[[2]] + m.(#[[2]] - #[[1]])}, {#[[2]], 
 #[[2]] + ({{1, -1}, {-1,1}} m).(#[[2]] - #[[1]])}} &, #], 1] &, {{{0, -1}, {0, 0}}}, g]]]]

ব্যবহার

প্রথম পরামিতি নির্ধারণ করে যে ড্রাগন কার্ভ বা শাখা কান্ড প্রদর্শিত হবে কিনা। দ্বিতীয় শব্দটি প্রজন্মকে বোঝায়।

h[0, 5]
h[1, 5]

দ্বিতীয় ছবি


আরও উদাহরণ

GraphicsGrid@Partition[Flatten[Table[h[j, k], {j, 0, 1}, {k, 10}]], 5]

fractal3


1
খুব সুন্দর. কিন্তু এটি যুক্তি হিসাবে নিয়মটি পাস করতে কিছু বাইট সংরক্ষণ করবে না?
লুসার droog

এটি যদি সাধারণ সমাধান হয় তবে সম্ভবত প্যারামিটারগুলির চেয়ে কোনও নিয়ম পাস করতে পারে। আমার বর্তমানে লিন্ডেনমায়ার সিস্টেমগুলি সম্পর্কে আমার আরও জ্ঞান থাকতে হবে।
ডেভিডসি

আমি গণিত পড়ি না। আমার কিছু শিখতে হবে। (এটি স্ট্যাকের সাথে যুক্ত করুন :) তবে আপনি এর অর্থ ব্যাখ্যা করতে পারেন যে "যা কিছু চিত্রের বর্ণনাকে নির্ধারণ করে, ইঞ্জিন থেকে চালিত ইঞ্জিন থেকে পৃথক হিসাবে" এটি সন্ধান করা যায় can এরপরে যদি আপনি ইঞ্জিনটির যথাযথ স্পর্শ থেকে স্বাধীনভাবে চিত্রের কিছু বৈশিষ্ট্য নিয়ন্ত্রণ করতে ডেটা পরিবর্তন করতে পারেন ; আমি এটিকে একটি এল-সিস্টেমের সাথে "কার্যকরী সমতুল্য" হিসাবে বিবেচনা করব। [ এটি আপনাকে কাজ করতে প্রচুর লফোলগুলি দেবে;) ]] +1 যাইহোক 'কারণ এটি এত সুন্দর।
লুসার droog

1
@ ড্যুড আমি মনে করি এটি কারণ গ্রাফিক্সের প্রয়োজনীয়তাগুলি তাদের পক্ষে উপযুক্ত নয়
ডঃ বেলিসারিয়াস

1
অবশেষে আপনার গাছের জন্য এল-সিস্টেমটি সন্ধান করুন: A->F[+A][-A]যেখানে Fসরানো হয়, +বাম 30 টি -[]
ঘোরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.