নাইট দূরত্ব


24

দাবাতে, গ্রিডের একটি নাইট (x, y) (x-2, y-1), (x-2, y + 1), (x-1, y-2), (x-1, y + 2), (x + 1, y-2), (x + 1, y + 2), (x + 2, y-1), (x + 2, y + 1) এক ধাপে কেবলমাত্র একটি নাইট অন (0, 0) সহ একটি অসীম দাবাবোর্ড কল্পনা করুন:

কতগুলি পদক্ষেপ (টি (0, 0) থেকে নাইট সরানোর জন্য প্রয়োজন বোধ করা হয় এক্স , টি Y )?

ইনপুট

দুটি পূর্ণসংখ্যা: t x , t y ;

-100 <t x <100, -100 <t y <100

আউটপুট

একটি নাইটকে (0, 0) থেকে (t x , t y ) এ স্থানান্তর করতে ন্যূনতম পদক্ষেপের প্রয়োজন ।

বিধি

  • কোড গল্ফ

Testcases

  x    y -> out
  0,   0 ->  0
  0,   1 ->  3
  0,   2 ->  2
  1,   1 ->  2
  1,   2 ->  1
  3,   3 ->  2
  4,   0 ->  2
 42,  22 -> 22
 84,  73 -> 53
 45,  66 -> 37
 99,  99 -> 66
-45, -91 -> 46
-81,   1 -> 42
 11,  -2 ->  7

document.write('<div>');[..."EFEDEDCDCBCBCBCBCBCBCBCBCBCBCBCBCBCDCDEDEFE;FEDEDCDCBCBABABABABABABABABABABABCBCDCDEDEF;EDEDCDCBCBABABABABABABABABABABABABCBCDCDEDE;DEDCDCBCBABA9A9A9A9A9A9A9A9A9A9ABABCBCDCDED;EDCDCBCBABA9A9A9A9A9A9A9A9A9A9A9ABABCBCDCDE;DCDCBCBABA9A9898989898989898989A9ABABCBCDCD;CDCBCBABA9A989898989898989898989A9ABABCBCDC;DCBCBABA9A98987878787878787878989A9ABABCBCD;CBCBABA9A9898787878787878787878989A9ABABCBC;BCBABA9A989878767676767676767878989A9ABABCB;CBABA9A98987876767676767676767878989A9ABABC;BABA9A9898787676565656565656767878989A9ABAB;CBA9A989878767656565656565656767878989A9ABC;BABA98987876765654545454545656767878989ABAB;CBA9A987876765654545454545456567678789A9ABC;BABA98987676565454343434345456567678989ABAB;CBA9A987876565454343434343454565678789A9ABC;BABA98987676545434323232343454567678989ABAB;CBA9A987876565434323232323434565678789A9ABC;BABA98987676545432341214323454567678989ABAB;CBA9A987876565434321232123434565678789A9ABC;BABA98987676545432323032323454567678989ABAB;CBA9A987876565434321232123434565678789A9ABC;BABA98987676545432341214323454567678989ABAB;CBA9A987876565434323232323434565678789A9ABC;BABA98987676545434323232343454567678989ABAB;CBA9A987876565454343434343454565678789A9ABC;BABA98987676565454343434345456567678989ABAB;CBA9A987876765654545454545456567678789A9ABC;BABA98987876765654545454545656767878989ABAB;CBA9A989878767656565656565656767878989A9ABC;BABA9A9898787676565656565656767878989A9ABAB;CBABA9A98987876767676767676767878989A9ABABC;BCBABA9A989878767676767676767878989A9ABABCB;CBCBABA9A9898787878787878787878989A9ABABCBC;DCBCBABA9A98987878787878787878989A9ABABCBCD;CDCBCBABA9A989898989898989898989A9ABABCBCDC;DCDCBCBABA9A9898989898989898989A9ABABCBCDCD;EDCDCBCBABA9A9A9A9A9A9A9A9A9A9A9ABABCBCDCDE;DEDCDCBCBABA9A9A9A9A9A9A9A9A9A9ABABCBCDCDED;EDEDCDCBCBABABABABABABABABABABABABCBCDCDEDE;FEDEDCDCBCBABABABABABABABABABABABCBCDCDEDEF;EFEDEDCDCBCBCBCBCBCBCBCBCBCBCBCBCBCDCDEDEFE"].forEach(c=>document.write(c==';'?'<br>':`<span class="d-${c}">${c}</span>`));
document.write('<style>body{line-height:16px;color:rgba(255,255,255,0.2);}span{display:inline-block;width:16px;font-size:16px;text-align:center;}div{white-space:pre;}');[...'0123456789ABCDEF'].map((c,i)=>document.write(`.d-${c}{background:hsl(${60-4*i},80%,${65-2*i}%)}`));

সম্পর্কিত OEIS

আরও পড়ার জন্য এখানে কিছু ওইআইএস রয়েছে


আপনি সূত্র দেওয়া একটি রেফারেন্স লাগতে পারে oeis.org/A065775
TSH

2
আমি কি জটিল নম্বর হিসাবে ইনপুট নিতে পারি x+yi?
লিন

1
@ এলেন আমি মনে করি এটি গ্রহণযোগ্য।
tsh

@ ব্যবহারকারী202729 ফলাফলটি দেখানোর জন্য কোড স্নিপেট আপডেট করেছে।
tsh

খুব সূক্ষ্ম মানচিত্র।
উইলটেক

উত্তর:


11

ওল্ফ্রাম ভাষা (গণিত) , a৪ বাইট

অন্তর্নির্মিত ব্যবহার করে KnightTourGraph

ম্যাথ 172 এর জন্য 2 বাইট সংরক্ষণ করা হয়েছে

GraphDistance[KnightTourGraph@@({x,y}=Abs@{##}+4),y+2,(x-2)y-2]&

এটি অনলাইন চেষ্টা করুন!

ArrayPlot @ array [GraphDistance [KnightTourGraph @@ ({X, Y} = Abs @ {##} +5), 2 বর্ষ + + 3, (X-2) Y-2] &, {65,65}, - 32]


14
গণিতের বিল্টিনস আবার ধর্মঘট করেছে
Qwr

1
সামান্য খাটো:GraphDistance[KnightTourGraph@@({x,y}=Abs@{##}+5),2y+3,(x-2)y-2]&
লুকাস ল্যাং

এই ভাষা দিয়ে কি? এই সমস্ত বিল্ট-ইনগুলি কীভাবে প্রিললোড হয়? ট্যাব দিয়ে একটি বাক্যাংশ পূর্ণ করার চেষ্টা কি যুগে যুগে লাগে?
ওগানএম

@ ওগানম ম্যাথেমেটিকা ​​তার কমান্ড লাইন ইন্টারফেসে স্বয়ংক্রিয় সমাপ্তি সমর্থন করে না। নোটবুক ইন্টারফেসে স্বয়ংক্রিয় সমাপ্তি মত দেখায় এই
আলেফাল্ফা

1
@ ওগানম হতে পারে বিকাশকারীরা ট্রাই (ডেটা স্ট্রাকচার) ব্যবহার করে বা বাছাই করা বিল্ট-ইনগুলির তালিকায় কেবল বাইনারি অনুসন্ধান ব্যবহার করে। হ্যাঁ, কেন রৈখিক অনুসন্ধান? | নোট করুন যে ম্যাথামেটিকা ​​হ'ল একটি মুক্ত-মুক্ত ক্লোজ-সোর্স ভাষা, সুতরাং ভবিষ্যদ্বাণীকারী কীভাবে কাজ করে তা কেউ জানে না। | রিয়েল প্রোগ্রামারদের স্বতঃসম্পূর্ণ প্রয়োজন হয় না। : পি
ব্যবহারকারী 202729

7

জাভাস্ক্রিপ্ট (ES6), 90 75 72 বাইট

A065775 এর জন্য প্রদত্ত সূত্রটি দ্বারা অনুপ্রাণিত । দীর্ঘ দূরত্বের জন্য নরক হিসাবে ধীরে ধীরে।

f=(x,y,z=x|y)=>z<0?f(-y,x):z>1?1+Math.min(f(x-1,y-2),f(x-2,y-1)):z*3^x&y

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

আমরা সংজ্ঞায়িত z- র , bitwise হিসাবে অথবা মধ্যে এক্স এবং ওয়াই

ধাপ 1

আমরা প্রথমে নিশ্চিত করেছিলাম যে আমরা এক্স এবং y উভয়কে অ-নেতিবাচক হতে বাধ্য করে একটি নির্দিষ্ট চতুষ্কোণে অবস্থিত । যতক্ষণ z <0 (যার অর্থ x বা y negativeণাত্মক), আমরা পুনরাবৃত্ত কলটি প্রসেস করব (-y, x) :

(+1, -2) --> (+2, +1)
(-1, +2) --> (-2, -1) --> (+1, -2) --> (+2, +1)
(-1, -2) --> (+2, -1) --> (+1, +2)

ধাপ ২

আমাদের কাছে z> 1 (যার অর্থ x বা y এর চেয়ে 1 এর চেয়ে বড় ), আমরা পুনরাবৃত্তভাবে দুটি পদক্ষেপের চেষ্টা করি যা আমাদের কাছে (0, 0) আরও কাছে নিয়ে আসে : f (x-1, y-2) এবং f ( x-2, y-1) । আমরা শেষ পর্যন্ত সবচেয়ে ছোট পথটি রাখি keep

ধাপ 3

Z যখন 1 এর চেয়ে কম বা সমান হয় তখন আমাদের 3 টি সম্ভাবনা থাকে যা দিয়ে প্রক্রিয়া করা হয় z*3^x&y(আমরা তার z*3-x*yপরিবর্তে ব্যবহার করতে পারি ):

  • x & y == 1 এর অর্থ x | y == 1 এবং এর অর্থ x = y = 1 । আমাদের পৌঁছানোর জন্য আরও দুটি পদক্ষেপ প্রয়োজন (0, 0) :

    2 চাল

  • x & y == 0 এবং x | y == 1 এর অর্থ আমাদের x x 1 / y = 0 বা x = 0 / y = 1 । আমাদের পৌঁছানোর জন্য আরও তিনটি পদক্ষেপ প্রয়োজন (0, 0) :

    3 চাল

  • x & y == 0 এবং x | y == 0 এর অর্থ আমাদের ইতিমধ্যে x = y = 0 রয়েছে

গ্রাফিক্স দা.কম থেকে ধার করা হয়েছে


5

পাইথন 3 , 90 বাইট

-11 বাইটের জন্য ধন্যবাদ tsh!

def f(x,y):x=abs(x);y=abs(y);s=x+y;return(.9+max(x/4,y/4,s/6)-s/2+(s==1or x==y==2))//1*2+s

এটি অনলাইন চেষ্টা করুন!

(পাঠকদের স্ক্রোল করতে এড়ানোর জন্য ইনলাইন কোড বিন্যাসকরণ Sorry দুঃখিত, তবে আমার প্রোগ্রামটি গল্ফ করতে হবে)

খুব খুব দক্ষ।


আমি কিভাবে এই সঙ্গে আসতে পারে !?

1. সমতা

ধরে নিই যে পুরো বোর্ডটি চেকবোর্ডের প্যাটার্নে বর্ণযুক্ত (এটি x+yবিজোড় এবং x+yএমনকি কোষগুলি বিভিন্ন রঙের সাথে বর্ণযুক্ত)।

নোট করুন যে প্রতিটি ধাপে দুটি পৃথক রঙের কক্ষের মধ্যে লাফ দিতে হবে। অতএব:

  • পদক্ষেপের সংখ্যার সমতা অবশ্যই এর সমতুল্যের সমান হতে হবে x+y

2. আনুমানিক

তুল্য থেকে নাইট শুরু অনুমান (0,0), এবং সরানো হয়েছে nপদক্ষেপ, এবং বর্তমানে (x,y)
সরলতার জন্য, অনুমান x ≥ 0, y ≥ 0
আমরা সিদ্ধান্তে পৌছাতে পারি:

  • যেহেতু প্রতিটি পদক্ষেপ xসর্বাধিক দ্বারা বৃদ্ধি 2, x ≤ 2×n। একইভাবে y ≤ 2×n,।
  • যেহেতু প্রতিটি পদক্ষেপ x+yসর্বাধিক দ্বারা বৃদ্ধি 3, x+y ≤ 3×n

অতএব, n ≥ l(x,y)যেখানে l(x,y) = max(max(x,y)/2, (x+y)/3। (দ্রষ্টব্য যে আমাদের সূত্রের অন্তর্ভুক্ত -xবা দরকার নেই x-yকারণ অনুমান দ্বারা x ≥ 0 and y ≥ 0, তাই x+y ≥ max(x-y,y-x,-x-y)এবং x ≥ -x, y ≥ -y)

দেখা যাচ্ছে যে a(x,y) = round(0.4 + l(x,y))এটি একটি ভাল অনুমান n

  • অনুমান a(x,y)করা ত্রুটির চেয়ে কমের একটি অনুমান যা 1সঠিক মান দ্বারা দেওয়া হয়েছে

    f(x,y) = round((a(x,y) - (x+y)) / 2) * 2 + (x+y)

    ( x+y2 দ্বারা বিয়োগ করে বিভাজকের অধীনে )

৩. বিশেষ ক্ষেত্রে যে সূত্রটি ব্যর্থ হয়

ধরে নিও x ≥ 0এবং y ≥ 0। 2 টি বিশেষ কেস রয়েছে যেখানে অ্যালগরিদম ব্যর্থ হয়:

  • x == 1 and y == 0বা x == 0 and y == 1: 1সঠিক উত্তর থাকা অবস্থায় অ্যালগরিদম ভুলভাবে ফিরে আসে 3
  • x == y == 2: 2সঠিক উত্তর থাকা অবস্থায় অ্যালগরিদম ভুলভাবে ফিরে আসে 4

সুতরাং, শুধু বিশেষ ক্ষেত্রে যারা। এর মধ্যে 2যদি এর মান xএবং yহয় তবে ফলাফলটি যুক্ত করুন ।


1
@tsh তবে x==y==0এটিও সত্য ।
ব্যবহারকারী 202729

কেন max(x+y,x-y,y-x)?
tsh

@ টিএসএস: না, দেখুন: x = -5, y = 5. x + y = 0, অ্যাবস (এক্সআই) = 10 এবং তাই এক্স + ই <অ্যাবস (এক্সওয়াই)
নোভা

@ নোভা "অনুমান x ≥ 0এবং y ≥ 0"।
ব্যবহারকারী 202729


4

টিআই-বেসিক, 86 54 বাইট

@ ব্যবহারকারী 202729 এর পুরানো সমাধানের ভিত্তিতে

Input :abs(X->C:abs(Y->D:C+Ans
Ans+2int(.9+(S=1 or C=2 and D=2)-.5Ans+max({C/4,D/4,Ans/6

2

এমএটিএল , 29 বাইট

`JEQ2J-htZjht_h@Z^2&sG=~}@Gg*

ইনপুট একটি জটিল সংখ্যা যা পূর্ণসংখ্যার আসল এবং কল্পিত অংশগুলির সাথে।

কোডটি খুব অদক্ষ। এর মেমরির প্রয়োজনীয়তা আউটপুট দিয়ে তাত্পর্যপূর্ণভাবে বৃদ্ধি পায়। এটি টিআইওতে আউটপুট 7 এর বেশি হওয়ার পরীক্ষার ক্ষেত্রে বেরিয়ে যায়।

এটি অনলাইন চেষ্টা করুন!


2

হাস্কেল, 79 72 বাইট

p l|elem(0,0)l=0|r<-[-2..2]=1+p[(x+i,y+j)|(x,y)<-l,i<-r,j<-r,(i*j)^2==4]

এটি অনলাইন চেষ্টা করুন!

সংখ্যার জোড়ের একক তালিকার তালিকা হিসাবে ইনপুট নেয় ।

একটি সাধারণ উদ্দীপনা। ফলাফলগুলির জন্য অনেক সময় এবং মেমোরির প্রয়োজন> ৮. স্থানাঙ্কের একক উপাদান তালিকা (ইনপুট) দিয়ে শুরু করে, (0,0)এই তালিকায় না আসা পর্যন্ত প্রতিটি অবস্থানের বারবার যুক্ত করুন element পুনরাবৃত্তি স্তরটি পর্যবেক্ষণ করুন এবং ফলাফল হিসাবে এটি ফিরিয়ে দিন।

সম্পাদনা করুন: -7 বাইট @ লিনকে ধন্যবাদ।



1

জাভাস্ক্রিপ্ট (ES6), 90 78 বাইট

f=(x,y)=>y<0?f(x,-y):x<y?f(y,x):x+y<3?4-x-y&3:x-3|y-1?x-4|y-3?f(x-2,y-1)+1:3:2

সম্পাদনা করুন: সংরক্ষিত 12 বাইটকে ধন্যবাদ @ সুপারকার্টকে বলে যে এটি x<0বোঝায় y<0বা x<y। ব্যাখ্যা: এটি একটি পুনরাবৃত্ত সমাধান। প্রথম দুটি শর্তই অন্যান্য শর্তগুলির জন্য সঠিক চতুর্ভুজকে নিশ্চিত করে। তৃতীয় শর্তটি উত্সের কাছাকাছি স্থানাঙ্কের জন্য জবাব উত্পন্ন করে, যখন শেষ দুটি শর্ত অন্যান্য দুটি বিশেষ ক্ষেত্রে (উভয় পদক্ষেপের পরীক্ষার চেয়ে 1 বাইট সংক্ষিপ্ত) ডিল করে:

0
32
2++
+2++
+++3+
++++++
(etc.)

চিহ্নিত সমস্ত স্কোয়ারগুলি +সরাসরি উত্সের দিকে এগিয়ে যাওয়ার পরে পুনরাবৃত্তি করে নির্ধারণ করা যায় be


আপনার কি x<0পরীক্ষা দরকার ? যেমন -3,6 দেওয়া, x<yপরীক্ষাটি 6, -3 এ y<0পরিণত হবে, যা x<yপরীক্ষাটি 6,3 তে পরিণত হবে, যা পরীক্ষাটি 3,6 তে পরিণত হবে into
সুপারক্যাট

@ সুপের্যাট প্রকৃতপক্ষে পাইথন যেমনটি বলবে, x>=y>=0...
নীল

1

কোটলিন , 148 146 140 বাইট

fun s(x:Int,y:Int):Int=if(y<0)s(x,-y)else
if(x<y)s(y,x)else if(x+y<3)4-x-y and 3
else if(x!=3||y!=1)if(x!=4||y!=3)s(x-2,y-1)+1
else 3 else 2

এটি অনলাইন চেষ্টা করুন!


খুব নিশ্চিত যে আপনার :Intরিটার্নের ধরণ নির্দিষ্ট করার দরকার নেই ।
therealfarfetchd

সংকলক প্রকারটি নির্ধারণের জন্য যথেষ্ট স্মার্ট না হওয়ায় পুনরাবৃত্ত ফাংশনগুলির জন্য রিটার্ন টাইপের প্রয়োজন হয় না।
ওয়েলস

1
ওহ, আমি পুনরাবৃত্তি কলগুলি মিস করেছি। ওহো
therealfarfetchd

1

জেলি , 27 26 25 23 বাইট

1,-pḤµ;UÆị
¢ṗS€;0i
0ç1#

এটি অনলাইন চেষ্টা করুন!

খুব ধীর; আউটপুট for এর জন্য টিআইও-তে টাইম আউট।

ব্যাখ্যা

কোডটি জটিল সংখ্যা ব্যবহার করে কারণ এটি একটি মধ্যবর্তী পদক্ষেপে সংক্ষিপ্ত ছিল এবং এটি আরও দ্রুত বলে মনে হয়; আপনার কাছে সরিয়ে জোড়া ব্যবহার করতে পারে Æiএবং প্রতিস্থাপন 0সঙ্গে 0,0দ্বিতীয় লাইনে।

1,-pḤµ;UÆị    Helper link. No arguments.
1,-             Get the pair [1,-1].
    Ḥ           Double each to get [2,-2].
   p            Cartesian product: get [[1,2],[1,-2],[-1,2],[-1,-2]].
     µ          Start a new chain with the list of pairs as argument.
       U        Reverse each pair.
      ;         Append the reversed pairs to the list.
        Æi      Convert each pair [real,imag] to a complex number.

¢ṗS€;0i    Helper link. Arguments: iterations, target
¢            Call the previous link to get knight moves as complex numbers.
 ṗ           Get the iterations-th Cartesian power of the list. This will
             yield 8^n tuples containing move sequences.
  S€         Sum each move sequence to get the resulting square.
    ;0       Add the starting square, since the zeroth iteration results
             in no move sequences.
      i      Find the target squares (1-based) index in the results, or 0.

0ç1#    Main link. Argument: target
0         Starting from 0,
   #      find the
  1       first number of iterations where
 ç        calling the previous link results in a nonzero result.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.