আমরা নিয়ন্ত্রণের বাইরে ছিটিয়েছি, ডাক্তার!


11

ডাক্তার, ডালেক বাহিনী থেকে পালানোর চেষ্টা করে একটি স্প্রিল গতিতে বিভিন্ন স্থানের পকেটে ভ্রমণ করে তাদের স্পিনে প্রেরণ করার সিদ্ধান্ত নিয়েছে।

উপলভ্য স্থান-সময়ের প্রকৃতির উপর নির্ভর করে, ডাক্তারকে তার্ডিসের মধ্যে প্রবেশ করতে হবে স্থানের বিভাগের উচ্চতা এবং প্রস্থ এবং সর্পিলটি শুরু করার জন্য তার প্রবেশ পয়েন্টটি নিয়ন্ত্রণ করতে হবে।

স্থানের বিভাগটি এইচ x ডাব্লু গ্রিড হিসাবে অনুমান করা যেতে পারে যে 1 দিয়ে শুরু করে বাম থেকে ডানে, উপরে থেকে নীচে অনুক্রমিক পূর্ণসংখ্যার পূর্ণ।

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

আপনার কাজ, যেমন ডাক্তারের সহযোগী তার্ডিসকে চারটি সংখ্যা নেওয়ার জন্য, বিন্যাসে প্রোগ্রাম করার জন্য height width row columnএবং এটি নির্ধারণ করেছেন যে নীচে বর্ণিত সর্পিল আন্দোলনের সাথে মেলে ধরার জন্য TARDIS কোন স্থানের ভ্রমণ করতে হবে ...

ইনপুট ঘ

5 5 3 3

(5 এক্স 5 গ্রিড, 3,3 অবস্থান থেকে শুরু)

আউটপুট 1

13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5

আউটপুট ব্যাখ্যা

মূল গ্রিড এখানে চিত্র বর্ণনা লিখুন

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

ইনপুট 2

2 4 1 2

(2 এক্স 4 গ্রিড 1,2 অবস্থান থেকে শুরু)

আউটপুট 2

2 1 5 6 7 3 8 4

আউটপুট ব্যাখ্যা

সর্পিল হিসাবে সামান্য পৃথক এখন সম্পর্কিত আউটপুট উত্পাদনের জন্য গ্রিডের চারদিকে অবশ্যই বৃত্ত থাকতে হবে ...

মূল গ্রিড এখানে চিত্র বর্ণনা লিখুন

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

নিয়মাবলী:

  1. এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোড দৈর্ঘ্যের অনুমোদনের টিকটি পাওয়া যায়।

  2. উপরের উদাহরণগুলি অবশ্যই আপনার কোড পরীক্ষা করতে ব্যবহার করা উচিত। যদি এটি সম্পর্কিত আউটপুট সরবরাহ না করে তবে কিছু ভুল আছে ...

  3. উভয় গল্ফড এবং ইন-গল্ফযুক্ত কোডের সংস্করণ আপনার উত্তরে সরবরাহ করা উচিত ...

শুভকামনা!


আমি আপনাকে অঙ্কন করতে চাই ioio যেখানে একজন দ্রুত বরং যুক্তিসঙ্গত চিত্র তৈরি করতে পারে (আপনার হাতের টানা সংস্করণটি দিয়ে আপনি দুর্দান্ত সুস্বাদুতা পেয়েছেন ... কেবল আমি কোনও লাল চেনাশোনা দেখতে পাচ্ছি না)। কী করা যায় তার উদাহরণ হিসাবে i.stack.imgur.com/xbLSA.png বিবেচনা করুন । মনে রাখবেন যে এতে এতে এক্সএমএল এম্বেড রয়েছে, সুতরাং আপনি যদি ড্র.ইও করতে যান তবে আপনি url থেকে আমদানি করতে পারেন।


1
আমি আউটপুট হিসাবে একটি ফাংশন রিটার্ন সহ একটি উত্তর পোস্ট করি। এটা কি গ্রহণযোগ্য?
edc65

@ এডসি 65 সাথ, আপনি এবং আমি সিজি-তে আবার এখানে যাব, আমি এস (এইচ,
ডাব্লু

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6) 124 163 177

সম্পূর্ণ ভিন্নভাবে সম্পাদনা করুন , পরিদর্শনকৃত ঘরগুলি সংরক্ষণ করার জন্য অ্যারের প্রয়োজন নেই। এই বিষয়টি ব্যবহার করে যে প্রতি 2 টার্নের পরে সর্পিলের পাশের 1 টি বৃদ্ধি পায়।

// New way
f=(h,w,y,x)=>
  (e=>{
    for(o=[],d=i=t=l=0;l<w*h;i<t?i+=2:[i,d,e]=[1,-e,d,++t])
      o[l]=y*w-w+x,l+=x>0&x<=w&y>0&y<=h,x+=d,y-=e
  })(1)||o


// Golfed
g=(h,w,y,x)=>
  (g=>{
    for(e=n=0;n<h*w;)g[[n%w+1,-~(n/w)]]=++n;
    for(o=[g[[x,y]]],l=d=1;l<n;l+=!!(o[l]=g[[x+=d,y+=e]]))
      g[[x,y]]=0,
      g[[x+e,y-d]]!=0&&([d,e]=[e,-d])
  })([])||o



// Not golfed
u=(h,w,y,x)=>{
  var i,j,dx,dy,kx,ky,o,n,
    g={} // simulate a 2dimensional array using a hashtable with keys in the form 'x,y'

  for(n=i=0; i++<h;) // fill grid (probably better done in a single loop)
    for(j=0; j++<w;)
      g[[j,i]] = ++n;
  o=[g[[x,y]]] // starting point in output
  dx=1, dy=0 // start headed right
  
  for(; !o[w*h-1]; ) // loop until all w*h position are put in output
  {
    g[[x, y]] = 0 // mark current position to avoid reusing
    kx=dy, ky=-dx // try turning left
    if(g[[x+kx, y+ky]] != 0) // check if position marked
    { // found a valid position
      dx=kx, dy=ky // change direction
    }
    x+=dx, y+=dy // move
    k=g[[x, y]] // get current value
    if (k) o.push(k) // put in output list if not 'undefined' (outside grid)
  }
  return o
}

// TEST - In FireFox

out=x=>O.innerHTML+=x+'\n';
[
 [[5,5,3,3],'13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5'],
 [[2,4,1,2],'2 1 5 6 7 3 8 4']
].forEach(t=>out(t[0] + '\n Result: ' + f(...t[0])+'\n Check:  ' + t[1]))

test=()=>
{
  var r, i=I.value.match(/\d+/g), h=i[0]|0, w=i[1]|0, y=i[2]|0, x=i[3]|0
  if (y>h||x>w) r = 'Invalid input'
  else r = f(h,w,y,x)
  out(i+'\n Reault: ' +r)
}
<pre id=O></pre>
Your test:<input id=I><button onclick="test()">-></button>


আশ্চর্যজনক গল্ফিং! 300 থেকে 163
অবধি

1
@ ওয়েলি ওয়েস্ট সেই মন্তব্যে আপনি আমাকে আরও ভাল করার জন্য চাপ দিন। Thnx
edc65

নিস! আমার পাইথন সলিউশনটি অনেক দীর্ঘ ছিল তবে আমি ছিলাম, ঠিক আছে, আপনি আরও ভাল পদ্ধতি ব্যবহার করেন। এখন আপনি একই ব্যবহার করুন এবং এটি আরও খাটো ... আমার কিছু কাজ করার আছে। :)
এলোমেলো

@ আরেন্ডোমরা আমি এখনও এটি দেখতে পছন্দ করব ...
ওয়েল ওয়েস্ট

2

পাইথন 3, 191

সম্ভবত কোনও দুর্দান্ত স্কোর নয়, তবে এটি এখানে যায়:

def f(b,a,d,c):
 p,r,l,s,h=c+1j*d,-1j,1,0,0
 for _ in [0]*((a+b)**2):x,y=p.real,p.imag;0<x<a+1and 0<y<b+1and print(int((y-1)*a+x),end=' ');p+=r;s=(s+1)%l;t=s==0;h=(h+t)%2;l+=h<t;r*=(-1j)**t 

আমরা প্রতিটি দ্বিতীয় টার্নের পরে পাশের দৈর্ঘ্য বাড়িয়ে সর্পিলটি বরাবর এগিয়ে যাই move যদি আমাদের অবস্থান প্রদত্ত গ্রিডের ভিতরে থাকে তবে আমরা এর সম্পর্কিত নম্বরটি মুদ্রণ করি।

চলকগুলি হ'ল:

  • পি জটিল অবস্থান
  • এক্স এবং ওয়াই অবস্থানের স্থানাঙ্ক
  • r দিক
  • s বর্তমান দিকে অবস্থান
  • l বর্তমান পাশের দৈর্ঘ্য
  • এইচ হ'ল বর্তমান পক্ষের অর্ডিনালের সমতা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.