একটি বাক্সে একটি সর্পিল আঁকুন


13

সর্পিল

এই জ্যামিতিক সর্পিল জটিল দেখায় তবে এটি আঁকতে মোটামুটি সহজ; নিম্নলিখিত বাক্সটি নিন:

বক্স

ঘড়ির কাঁটার বিপরীতে বক্সের কোণার এবং পরবর্তী কোণার উপরে কিছু সেট দূরত্বের মধ্যে একটি সরল রেখা আঁকুন।

1 লাইন

এই প্যাটার্নটি অভ্যন্তরীণ দিকে চালিয়ে যান, সর্বদা পরবর্তী লাইনের কোণ থেকে দূরত্বে সেট রেখে দিন। এখানে আরও কয়েকটি লাইন রয়েছে।

লার লাইন

যেমন আপনি দেখতে পাচ্ছেন, প্যাটার্নটি চলতে চলতে সর্পিলটি কেন্দ্রের কাছে পৌঁছেছে এবং আপনার আঁকানো বাক্সগুলি ঘোরানো শুরু করে। দ্রষ্টব্য যে কোণ নির্বিশেষে দূরত্ব স্থির থাকে।

চ্যালেঞ্জ

অনুপ্রেরণা (এবং এই ধারণাটির সাথে আমাকে পরিচয় করিয়ে দেওয়ার অপূর্ব ব্যক্তির জন্যও ধন্যবাদ <3)

1 থেকে 25 পর্যন্ত একটি সংখ্যাসূচক (সম্ভবত ভগ্নাংশ) ইনপুট দেওয়া হয়েছে, ডিস্কে একটি চিত্র লিখুন যা এই প্যাটার্নটি ব্যবহার করে বা স্ক্রিনে আউটপুট প্রদর্শন করবে যেখানে প্রতিটি কোণ থেকে দূরত্বটি বাক্সের প্রথম দিকের দূরত্ব যা ইনপুট দ্বারা বিভক্ত হয় । নির্দিষ্ট কোণার দূরত্ব পরবর্তী পাশের দৈর্ঘ্যের চেয়ে দীর্ঘ না হওয়া পর্যন্ত অভ্যন্তরীণ প্যাটার্নটি চালিয়ে যান।

বিধি

  • আপনি এই সর্পিল সৃষ্টির জন্য বিল্ট-ইনগুলি ব্যবহার না করতে পারেন, তবে আপনি চিত্র প্রসেসিং বিল্টিন ব্যবহার করতে পারেন।
  • আপনি যদি ডিস্কে লিখেন তবে আপনাকে অবশ্যই .jpg, .gif, .tiff, .pbm, .ppm, এবং .png এর মধ্যে একটি চিত্র আউটপুট করতে হবে।
  • প্রাথমিক দিকের দৈর্ঘ্য কমপক্ষে 500 পিক্সেল হতে হবে।
  • প্রাথমিক কোণটি আপনি যে কোনওটিকেই বেছে নিতে পারেন।
  • সর্বদা হিসাবে, স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।


এই সর্পিলটি কত গভীর হতে হবে তার জন্য সর্বনিম্ন কি আছে?
LegionMammal978

@ LegionMammal978 আমি কখনই 25 এর চেয়ে বেশি ইনপুট চাইব না, আমি এটি যুক্ত করব।
অ্যাডিসন ক্রম্প

.Pbm বা .ppm সহ কিছু কম গ্রাফিকাল ভাষায় সহায়তা করতে পারে।
ট্রাইকোপলাক্স

উত্তর:


12

জুতা (রুবি) 163 বাইট

জুতা হ'ল রুবি ভিত্তিক জিইউআই টুলকিট।

Shoes.app{n=ask('').to_f
r=s=5E2
a=[0,s*i="i".to_c,s*i+s,s,0]
(q=a[-3]-a[-4]
r=q.abs/s*n
a<<a[-4]+q/r)while r>1
1.upto(a.size-1){|j|line *(a[j-1].rect+a[j].rect)}}

Ungolfed

Shoes.app{ 
  n=ask('').to_f                 #Open a dialog box with no message, get n from user
  r=s=5E2                        #Initialize s to sidelength=500. r can be initialized to any vale, we use the same one for convenience.
  a=[0,s*i="i".to_c,s*i+s,s,0]   #intialize array a with 5 points needed to draw a square, in complex number format (first point=0 is duplicated.)

  (
    q=a[-3]-a[-4]                #find the vector from point plotted 4 before to the following point (plotted 3 before)
    r=q.abs/s*n                  #r is the scale factor
    a<<a[-4]+q/r                 #add a new point derived from a[-4] by moving toward a[-3] by a distance s/n 
  )while r>1                     #break loop when length of line is less than s/n

  1.upto(a.size-1){|j|           #for all points except 1st and last one
    line *(a[j-1].rect+a[j].rect)#take the two complex numbers correspondimg to the current and previous point,
  }                              #convert to 2-element arrays (rectangular coordinates
}                                #combine to make a 4-element array, use * to splat into 4 parameters, and draw using the line method.

ফলাফলগুলি n = 4 এবং n = 25

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

নোট করুন যে আকারটি সর্বদা একটি ত্রিভুজটিতে শেষ হয়, যা আরও একটি লাইনে ধসে পড়ে। এর সাথে প্রতিস্থাপন size-1করা sizeআউটপুটটির চেহারাতে কোনও পার্থক্য করে না এবং এটি 2 বাইট সংরক্ষণ করতে পারে, তবে আমি এটি তাত্ত্বিক নির্ভুলতার জন্য রেখে দিয়েছি।

আউটপুট n = 300

ওপি-র একটি মন্তব্যে অনুপ্রাণিত, উচ্চ সংখ্যাটি দুর্দান্ত দেখাচ্ছে!

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


lineনীচের লাইনে নিম্নলিখিত স্থানগুলি কী প্রয়োজনীয়?
অ্যাডিসন ক্র্যাম্প

কুলস্টওয়েটো দুর্ভাগ্যক্রমে হ্যাঁ *চার উপাদানের বিন্যাস জন্য চার পরামিতি মধ্যে জটিল সংখ্যার রূপান্তর দ্বারা গঠিত পরিবর্তিত line। স্ট্যান্ডার্ড সিনট্যাক্স line(*(a[j-1].rect+a[j].rect))তাই বন্ধনীগুলি সরানো এবং একটি স্থান যুক্ত করা ইতিমধ্যে একটি বাইটের সঞ্চয় of স্থান অপসারণ রুবিকে lineপ্রথম বন্ধনীগুলির বিষয়বস্তুগুলি দিয়ে গুণ করার চেষ্টা করে , যা কোনও অর্থ দেয় না এবং এটি একটি ত্রুটি ছুঁড়ে ফেলার কারণ করে। এখানে কিছু গল্ফিং করা দরকার, ঠিক তা নয়। আমি পরে এটি দেখতে হবে।
স্তর নদী সেন্ট

আমি প্রায় নিশ্চিত আপনি যুক্তিটি প্রদানের মাধ্যমে প্যারেনগুলি থেকে মুক্তি পেতে পারেন upto। এছাড়াও, আপনি কি ('')পরে মুছে ফেলার চেষ্টা করেছেন ask? আমি এটি পরীক্ষা করে দেখিনি, তবে এটি অপ্রয়োজনীয় হতে পারে
ফান্ড মনিকার লসুইট

3
100 এর আউটপুটটি সুন্দর
অ্যাডিসন ক্রম্প

1
@ কুলস্টেভেটো আমি n = 100 কে একটু ঝামেলা পেলাম; এটি লাফিয়ে যায় এবং আমার উপর সমস্ত 3 ডি চলে যায়। আমি এন = 300 পোস্ট করেছি যা সামগ্রিকভাবে গাer় এবং তাই শান্ত।
স্তরের নদী সেন্ট

3

জাভা, 1056 1005 985 948 522 508 507 504 502 501 493 492 488 474 465 458 বাইট

import java.awt.*;interface G{static void main(String[]a){new Frame(){int s=499,o=s,e,i,x,y;{o/=new Float(a[0]);add(new Component(){public void paint(Graphics g){g.drawRect(0,0,s,s);int[]p={s,s,s,0,0,0,0,s};for(double d=s,t;d>o;t=o/d,i=e*2,x=(int)((1-t)*p[i]+t*p[(2+i)%8]+.5),y=(int)((1-t)*p[1+i]+t*p[(3+i)%8]+.5),g.drawLine(p[(6+i)%8],p[(7+i)%8],x,y),p[i]=x,p[1+i]=y,e=++e%4,i=e*2,x=p[(2+i)%8]-p[i],y=p[(3+i)%8]-p[1+i],d=Math.sqrt(x*x+y*y));}});show();}};}}

কৌলেস্টওয়েটো এবং ইসিএসকে আকার হ্রাস করার অন্যান্য উপায়গুলির জন্য ধন্যবাদ। :-)


ঠিক আছে, আমি এটিকে কিছুটা নিচে নামিয়েছি, তবে আরও নিশ্চিত হওয়ার পক্ষে আরও বেশি সম্ভাবনা রয়েছে, আমি চরিত্র-ন্যূনতম হতেও বস্তু-ভিত্তিক কোডড করেছি :
ভ্যাম্পায়ার

@AlexA। যদি আমি পরে আমার কোডটি উন্নত করি এবং এটিকে আরও ছোট করে তুলি, তবে আমি কি কেবল তখনই সংক্ষিপ্ত সংস্করণ সহ পোস্টটি আপডেট করতে পারি?
ভ্যাম্পায়ার

@ বিজার্নকৌটলার ইয়ুপ, এটি ভাল! :) আমি এখনই সংক্ষিপ্ত করার জন্য কয়েকটি জায়গায় কাজ করছি।
অ্যাডিসন ক্র্যাম্প

1
@ BjörnKautler আপনি অবশ্যই পারেন!
অ্যালেক্স এ।

1
বাহ, আমি কখনই 500 জনেরও বেশি বাইটের উত্তর খুঁজে পেয়েছি। : ও
অ্যাডিসন ক্রম্প

1

গ্রোভি, 412 411 403 398 বাইট

import java.awt.*
new Frame(){
def s=499,o=s/(args[0]as float),e=0,i,a,b,d,t
{add new Component(){void paint(Graphics g){g.drawRect 0,0,s,s
p=[s,s,s,0,0,0,0,s]
for(d=s;d>o;d=Math.sqrt(a*a+b*b)){t=o/d
i=e*2
a=(int)((1-t)*p[i]+t*p[(2+i)%8]+0.5)
b=(int)((1-t)*p[1+i]+t*p[(3+i)%8]+0.5)
g.drawLine p[(6+i)%8],p[(7+i)%8],a,b
p[i]=a
p[1+i]=b
e=++e%4
i=e*2
a=p[(2+i)%8]-p[i]
b=p[(3+i)%8]-p[1+i]}}}
show()}}

এটি গ্রোভি ২.৪.৪ দিয়ে চালিত করতে আমার সমস্যা আছে: Caught: groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() at s$1.<init>(s.groovy:3) at s.run(s.groovy:2)
ডাইটার

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