পাইথন, 456 429 381
import turtle as t
L="fl"
R="fr"
d=L*3+R*3
b=(d+R)*3
a=[b,120,L*3+"fflflffflflfrflflfffl"+R*4+"flf",90,b+"ffrfrflffrffrfrfrflflf",120,(R*5+L*5+R+L)*5+"rrfr"+L*5+R*2+L*2+R*4+"f",72,(d+"f")*5+"rfl"+((d+"b")*5)[:-1],120]
l=t.lt
f=t.fd
b=t.bk
r=t.rt
p=input()*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
for c in a[p]:exec c+"(a[p+1])"
t.getscreen().getcanvas().postscript(file="o")
আমি l r f b
অপারেটর হিসাবে একটি আদিম দোভাষীকে বাস্তবায়িত করেছি যা কচ্ছপের কার্সারকে আকারের কোণে ঘুরিয়ে দেয়। এক সময়, এটি কেবল একটি কোণে পরিণত হয়। আমি স্ট্রিংগুলিকে পুনরায় ব্যবহার করে সংকুচিত করেছিলাম (ধরণের স্যুয়েডো-সাব্রুটাইনগুলির মতো), এগুলি ছাড়াও, আমি সেরা পথটি ব্যবহার করছি কিনা তা পরীক্ষা করে দেখিনি। এটি একটি পোস্ট স্ক্রিপ্ট ফাইল আউটপুট।
আন-গল্ফ কোডের একটি ছোট ব্যাখ্যা:
import turtle as t
Left="fl"
Right="fr"
diamond= Left*3 + Right*3
tetrahedron=(d+R)*3 #used to be b
অন্তর্নির্মিত টার্টল মডিউল আমদানি করে এবং ম্যাক্রোগুলি সংজ্ঞায়িত করে যা স্ট্রিংগুলি সংক্ষিপ্ত করে। কচ্ছপ মডিউল স্ক্রিনের চারপাশে 'টার্টল' সরানোর জন্য কমান্ড ব্যবহার করে (যেমন এগিয়ে (100), বাম (90))
netList=[
#tetrahedron
tetrahedron,120,
#cube
Left*3+"fflflffflflfrflflfffl"+Right*4+"flf",90,
#octohedron, builds off the tetrahedron
tetrahedron+"ffrfrflffrffrfrfrflflf",120,
#dodecahedron
(Right*5 + Left*5 + Right + Left)*5
+"rrfr"+
Left*5 + Right*2 + Left*2 + Right*4 + "f",72,
#icosahedron
(diamond+"f")*5 +"rfl"+((diamond+"b")*5)[:-1],120
]
এই তালিকাটি কোণ এবং চলন ক্রম ধারণ করে। টেট্রহেড্রনটি অক্টোবরের সাথে পুনরায় ব্যবহারের জন্য সংরক্ষণ করা হয়েছিল।
l=t.left
f=t.forward
b=t.back
r=t.right
এটি আমার পছন্দ মতো অংশটি একক অক্ষরকে স্থানীয় ফাংশন করে তোলে যাতে প্রাক সংজ্ঞায়িত স্ট্রিংগুলির মাধ্যমে কলগুলি সংক্ষিপ্ত করা এবং স্বয়ংক্রিয় করা যায়।
input=int(raw_input())*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
এটি ইনপুট (1 এবং 5 এর মধ্যে) গ্রহণের মাধ্যমে শুরু হয় এবং এটিকে সূচকগুলিতে রূপান্তর করে যা নেটলিস্টে আকৃতির স্ট্রিংকে নির্দেশ করে। পুরো নেটটি দেখাতে এই সেটআপ কচ্ছপ। টাস্কটি কেবল তাদের আঁকার জন্য থাকলে এগুলি বাদ দেওয়া যেতে পারে তবে যেহেতু আমাদের প্রয়োজন একটি চিত্র আউটপুট।
for command in netList[input]:
exec command+"(netList[input+1])"
t.getscreen().getcanvas().postscript(file="o")
ফর লুপ কমান্ড সিকোয়েন্স স্ট্রিংয়ের কমান্ডগুলি গ্রহণ করে এবং তাদের সম্পাদন করে, সুতরাং "fl" এর মতো স্ট্রিংয়ের জন্য এটি "ফরোয়ার্ড (কোণ); বাম (কোণ) কার্যকর করে;" সদ্য নির্মিত স্থানীয় ফাংশনগুলিকে কল করে। শেষ লাইনটি 'o' নামে একটি ফাইল আউটপুট করে যা টার্কেল ফাংশনটি ব্যবহার করে পোস্টস্ক্রিপ্ট ফর্ম্যাট ফর্ম্যাটে রয়েছে।
চালানোর জন্য :
এটিকে একটি ফাইলে অনুলিপি করুন এবং সেখান থেকে চালান। আপনি যখন এটি চালান, এটি 1 এবং 5 এর মধ্যে সংখ্যার ইনপুটটির জন্য অপেক্ষা করবে (আমি কেবল এটি পরিবর্তন করেছি যাতে এটি কচ্ছপ স্থাপনের আগে জিজ্ঞাসা করে)। আপনি কোনও সংখ্যার ইনপুট করার সময় একটি উইন্ডো পপ আপ করে নেট আঁকবে। আপনি যদি এটি দ্রুত যেতে চান তবে আপনি t.speed(200)
আগে যুক্ত করতে পারেন setup
।
আপনি এটি দোভাষীতে অনুলিপি করতে পারেন, তবে যখন raw_input()
এটি ডাকা হয় পরবর্তী স্ট্রিংটি "t.setup(.9,.9)"
কোনও সংখ্যার পরিবর্তে আপনি ইনপুট গ্রহণ করেন mes সুতরাং আপনি যদি এটি করেন তবে অবধি অনুলিপি raw_input()
করুন, কোনও সংখ্যা ইনপুট করুন, বাকীটি অনুলিপি করুন paste এটি সামগ্রিকভাবে চালানোর উদ্দেশ্যে করা হয়েছে। অথবা আপনি এটি কোনও ফাংশনে অনুলিপি করে কল করতে পারেন।
এটির ফলাফলগুলি এখানে রয়েছে (পোস্টস্ক্রিপ্ট থেকে রূপান্তরিত):
দ্রষ্টব্য: উইন্ডোতে এগুলির অবস্থান পরিবর্তন হয়েছে, তবে তাদের সামগ্রিক আকারটি একই।
কোড গল্ফের জন্য এটি কিছুটা নিদারুণ শক্তি, তবে আমি আকারগুলির মধ্যে একটি ধারাবাহিক প্যাটার্ন খোঁজার চেষ্টা করে ক্লান্ত হয়ে পড়েছিলাম।