ত্রিভুজাকার ম্যানহাটন দূরত্ব


26

ম্যানহাটন দূরত্ব একটি নিয়মিত গ্রিড উপর লম্ব পদক্ষেপ পরস্পর থেকে এক সেল পৌঁছানোর গ্রহণ করা প্রয়োজন সংখ্যা। অर्थোগোনাল স্টেপগুলি হ'ল গ্রিড কোষগুলির প্রান্তগুলি দিয়ে যাওয়া (কোণগুলির বিপরীতে যা আমাদের চেবিশেভ দূরত্ব দেয় )।

আমরা অন্যান্য গ্রিডগুলিতে অনুরূপ দূরত্ব নির্ধারণ করতে পারি, উদাহরণস্বরূপ ত্রিভুজাকার গ্রিড। আমরা গ্রিডের পৃথক কক্ষগুলিকে নিম্নলিখিত সূচীকরণ স্কিমের সাথে সম্বোধন করতে পারি, যেখানে প্রতিটি ঘরে একটি x,yজুড়ি থাকে:

    ____________________________________...
   /\      /\      /\      /\      /\
  /  \ 1,0/  \ 3,0/  \ 5,0/  \ 7,0/  \
 / 0,0\  / 2,0\  / 4,0\  / 6,0\  / 8,0\
/______\/______\/______\/______\/______\...
\      /\      /\      /\      /\      /
 \ 0,1/  \ 2,1/  \ 4,1/  \ 6,1/  \ 8,1/
  \  / 1,1\  / 3,1\  / 5,1\  / 7,1\  /
   \/______\/______\/______\/______\/___...
   /\      /\      /\      /\      /\
  /  \ 1,2/  \ 3,2/  \ 5,2/  \ 7,2/  \
 / 0,2\  / 2,2\  / 4,2\  / 6,2\  / 8,2\  
/______\/______\/______\/______\/______\...
\      /\      /\      /\      /\      /
 \ 0,3/  \ 2,3/  \ 4,3/  \ 6,3/  \ 8,3/
  \  / 1,3\  / 3,3\  / 5,3\  / 7,3\  /
   \/______\/______\/______\/______\/___...
   /\      /\      /\      /\      /\
  .  .    .  .    .  .    .  .    .  .
 .    .  .    .  .    .  .    .  .    .

এখন এই গ্রিডের ম্যানহাটনের দূরত্ব আবার এক কক্ষ থেকে অন্য ঘরে যাওয়ার জন্য প্রান্তগুলির সর্বনিম্ন সংখ্যা number আপনার কাছ থেকে স্থানান্তর করতে পারেন 3,1থেকে 2,1, 4,1বা 3,2, কিন্তু অন্য কোন ত্রিভুজ না যেহেতু ঐ বরং প্রান্ত চেয়ে পয়েন্ট পার করা হবে।

উদাহরণস্বরূপ, থেকে দূরত্ব 2,1থেকে 5,2হয় 4। সংক্ষিপ্ততম পথটি সাধারণত অনন্য নয়, তবে 4 টি ধাপে দূরত্ব তৈরির একটি উপায় হ'ল:

2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2

চ্যালেঞ্জ

দুটি সমন্বয়যুক্ত জোড়া এবং উপরোক্ত ঠিকানা স্কিম থেকে, তাদের মধ্যে ম্যানহাটনের দূরত্ব ফিরিয়ে দিন।x1,y1x2,y2

আপনি ধরে নিতে পারেন যে এই চারটি ইনপুটগুলি অ-নেতিবাচক পূর্ণসংখ্যা, যার প্রতিটি 128 এরও কম। ।)।

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের মানক পদ্ধতির কোনও ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন , তবে লক্ষ্য করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটগুলিতে মাপা - জয় w

পরীক্ষার মামলা

প্রতিটি পরীক্ষার কেস হিসাবে দেওয়া হয় ।x1,y1 x2,y2 => result

1,2 1,2 => 0
0,1 1,1 => 1
1,0 1,1 => 3
2,1 5,2 => 4
0,0 0,127 => 253
0,0 127,0 => 127
0,0 127,127 => 254
0,127 127,0 => 254
0,127 127,127 => 127
127,0 127,127 => 255
75,7 69,2 => 11
47,58 36,79 => 42
77,9 111,23 => 48
123,100 111,60 => 80
120,23 55,41 => 83
28,20 91,68 => 111
85,107 69,46 => 123
16,25 100,100 => 159
62,85 22,5 => 160
92,26 59,113 => 174
62,22 35,125 => 206

নেট নেতিবাচক রেটিং প্রাপ্ত লুফোলগুলি কি সরকারী ফাঁকের মধ্যে অন্তর্ভুক্ত করা যেতে পারে?
ডেভিডসি

@ ডেভিডসি নং লুফোল প্রশ্ন থেকে: "[...] যে উত্তরটিতে +5 বা তার উপরে এবং ডাউনওয়েটদের কমপক্ষে দ্বিগুণ উর্ধ্বতন রয়েছে সেটিকে সম্প্রদায়ের কাছে অগ্রহণযোগ্য বলে মনে করা যেতে পারে এমন কোনও উত্তরে বর্ণিত লুফোলটি "
মার্টিন ইন্ডার

আমাদের কি একটি পঞ্চম ইনপুট নেওয়ার অনুমতি দেওয়া হয়েছে, যা ডিফল্ট হিসাবে 0 থেকে শুরু হয় (ফলাফল)? তারপরে আমার উত্তরে আমাকে যুক্ত করতে হবে না (a,b,x,y)->c(a,b,x,y,0)( cচারটি আর্গুমেন্টের সাথে পৃথক পদ্ধতি কল করা এবং 0পঞ্চম যুক্তি হিসাবে)।
কেভিন ক্রুইজসেন

3
@ কেভিন ক্রুজসেন দুঃখিত অতিরিক্ত, স্থির যুক্তি কিছুটা সহজেই আপত্তিজনক (এবং কেবল 0 কে একটি বিশেষ কেস হিসাবে অদ্ভুত বলে মনে হচ্ছে)।
মার্টিন ইন্ডার

@ মার্টিনএন্ডার ঠিক আছে, তাই ভেবেছি, তবে জিজ্ঞাসা করতে কখনই ক্ষতি করতে পারে না। সেক্ষেত্রে আমার 190 বাইট উত্তর বাকি আছে। যদিও আমি এক বছর আগে অর্ধেক উত্তর দিয়েছি, একটি পরীক্ষার কেস ব্যর্থ হয়েছিল। এখনই আবার প্রশ্নটি এসেছিল এবং আমার উত্তরে বাগটি ঠিক করতে সক্ষম হয়েছিল।
কেভিন ক্রুইজসেন

উত্তর:


7

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

নীলকে ধন্যবাদ 6 বাইট সংরক্ষিত

(a,b,c,d,x=a>c?a-c:c-a,y=b>d?b-d:d-b,z=x>y?x:y)=>y+z+(x+z&1?a+b+(b>d)&1||-1:0)

পরীক্ষার মামলা

প্রাথমিক পুনরাবৃত্তির সমাধান, 100 88 81

ETH প্রোডাকশনগুলিতে 12 বাইট সংরক্ষণ করা নিলকে
7 বাইট সংরক্ষণ করা হয়েছে

f=(a,b,c,d,e=b==d|a+b+(b>d)&1)=>a-c|b-d&&f(e?a+1-2*(a>c):a,e?b:b+1-2*(b>d),c,d)+1

কিভাবে এটা কাজ করে

যদিও এটি এখনও মূল সংস্করণে মূলত প্রযোজ্য, নীচের ব্যাখ্যাটি আরও সুনির্দিষ্টভাবে প্রাথমিক সংস্করণকে বোঝায়:

f=(a,b,c,d)=>b-d?a+b+(b>d)&1?f(a+1-2*(a>c),b,c,d)+1:f(a,b+1-2*(b>d),c,d)+1:Math.abs(a-c)

থেকে যাওয়া (x0, Y) থেকে (X1, Y) তুচ্ছ কারণ আমরা লক্ষ্য এক উৎস ত্রিভুজ থেকে পার্শ্বীয় প্রান্ত জুড়ে সব পথ যেতে পারেন। এই ক্ষেত্রে ম্যানহাটানের দূরত্ব | x0 - এক্স 1 |

জটিল অংশটি উল্লম্ব পদক্ষেপ। সারি থেকে যেতে y0 সারিতে Y1 , আমরা একাউন্টে এই দুটি প্যারামিটার গ্রহণ করতে হবে:

  • বর্তমান ত্রিভুজটির অবস্থান
  • কিনা y0 কম বা তার চেয়ে অনেক বেশী Y1

ত্রিভুজের অরিয়েন্টেশনটি x + y এর সমতা দ্বারা দেওয়া হয় :

  • যদি এটি সমান হয় তবে ত্রিভুজটি আপ-পয়েন্টিং
  • যদি এটি বিজোড় হয়, ত্রিভুজটি নীচের দিকে নির্দেশ করছে

আমরা একটি আপ-পয়েন্টিং ত্রিভুজ থেকে নীচের দিকে যেতে পারি (যখন y0 <y1 কার্যকর হয় ) এবং ডাউন-পয়েন্টিং ত্রিভুজ (উপরের দিকে যখন y0> y1 ) থেকে উপরে যেতে পারি।

Y0 এবং y1 এর সাথে তুলনার সাথে ত্রিভুজের অরিয়েন্টেশনটি একত্রিত করে আমরা সূত্রটি পাই x + y0 + (y0> y1? 1: 0) যার ফলস্বরূপ আমরা কাঙ্ক্ষিত দিকে যেতে পারি এবং না হলেও বিজোড় হয়।

আমরা যদি পরের সারিতে সরাসরি পৌঁছতে না পারি তবে আমাদের প্রথমে এক্স আপডেট করে একটি সঠিক প্রান্তিককরণ পাওয়া দরকার :

  • যদি এক্স এখনো সমান নয় X1 , আমরা স্পষ্টভাবে সঠিক পথে অগ্রসর করতে চাই, তাই আমরা বাড়ায় যদি এক্স চেয়ে কম হয় X1 এবং আমরা তা হ্রাস যদি এক্স চেয়ে বেশী X1
  • যদি x ইতিমধ্যে x1 এর সমান হয়, আমরা হয় বা বৃদ্ধি বা হ্রাস করতে পারি

পরীক্ষার মামলা


এটি ... প্রচুর ক্ষুদ্র গণিত ক্রিয়াকলাপ ... তবে আপনি nসম্পূর্ণরূপে চলকটি এড়িয়ে যেতে পারেন এবং প্রতিটি পুনরুক্তির ফলাফলের জন্য কেবল 1 যোগ করতে পারেন না? ( আমার মনে হয় 90 টি অক্ষর )
ইটিএইচ প্রডাকশন 14

@ ইথ প্রডাকশনস সত্যি কথা বলতে, আমি কোনও গুরুতর গল্ফ ছাড়াই এটি পোস্ট করেছি। তবে এটি অবশ্যই প্রথম কাজ। ধন্যবাদ!
আরনাউল্ড

1
এছাড়াও, আমি মনে করি অপারেটরের অগ্রাধিকার &অর্থ আপনি a+b+(b>d)&12 বাইট সংরক্ষণ করতে পারেন
ইটিএইচ প্রোডাকশনস

এটি 81 এ নেমে গেছে, আমার মনে হয়:f=(a,b,c,d,e=b==d|a+b+(b>d)&1)=>a-c|b-d&&f(e?a+1-2*(a>c):a,e?b:b+1-2*(b>d),c,d)+1
নীল

আমি মনে করি কিছু চালাক কার্চিং ব্যবহার করে অন্য বাইট সংরক্ষণ করা সম্ভব হতে পারে।
নীল

5

পাইথন 2, 74 বাইট

lambda x,y,X,Y:abs(y-Y)+max(x-X,X-x,abs(y-Y)+((x+y+X+Y)%-2)**(x^y^(Y>=y)))

1
আপনি, দয়া করে এই অংশ ব্যাখ্যা করতে পারে না: **(x^y^(Y>=y))?
ডেড পসসাম

1
@ ডেডপসসাম লম্বালম্বিভাবে 1 দুরত্বের সাথে সরানো 1 বা 3 টি পদক্ষেপ নিতে পারে; কেবল প্যারিটি দেখে বলার উপায় নেই যে আপনাকে y মানগুলি তুলনা করতে হবে।
শুক্রবার

2

ব্যাচ, 99 বাইট

@cmd/cset/a"x=%3-%1,x*=x>>31|1,y=%4-%2,w=y>>31,y*=w|1,z=x+(y+x&1)*(-(%1+%2+w&1)|1)-y,z*=z>>31,x+y+z

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

  • @cmd/cset/a" - কমা-বিচ্ছিন্ন এক্সপ্রেশন মূল্যায়ন এবং শেষটি মুদ্রণ করে
  • x=%3-%1,x*=x>>31|1 গণনা করেx=|x2x1|
  • y=%4-%2,w=y>>31,y*=w|1হিসাব করে এবং y = | y 2 - y 1 |w=y1>y2y=|y2y1|
  • z=x+(y+x&1)*(-(%1+%2+w&1)|1)-yসংশোধন গুণকc=(y+(xmod2))(12((x1+y1+w)mod2)),z=x+cy
  • z*=z>>31,x+y+z গণনা করেmax(x,yc)+y=x+ymin(0,x+cy)

2

জেলি , 24 বাইট

⁴<³¬Ḋ;³S
SḂN*¢+ḊḤ$
ạµS»Ç

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

আসুন ইনপুট । আমি ফেয়ারসামের সূত্র থেকে কাজ করেছি:(x,y),(X,Y)

d=|yY|+max(|xX|,|yY|+((x+y+X+Y)mod2)xy(Yy))=|yY|+max(|xX|,|yY|+[(|xX|+|yY|mod2)]x+y+(Yy))=max(|xX|+|yY|,2|yY|+[(|xX|+|yY|mod2)](Yy)+x+y).

প্রথম লাইনের গণনাগুলি , সূত্রের প্রকাশক।¢=(Yy)+x+y

সর্বশেষ লাইনটি প্রথমে গণনা করে এবং তারপরে সর্বাধিক এবং গণনা করে , যেখানে মাঝের লাইনের ফাংশন।L=[|xX|,|yY|]sum(L)f(L)f

মধ্যম লাইন দেওয়া , নির্ণয় , লাগে যে 'ম ক্ষমতা, তারপর যোগ ।L=[a,b]((a+b)mod2)¢2b


2

র‌্যাকেট / স্কিম, 214 বাইট

(define(f x y X Y)(let m((p x)(q y)(c 0))
(let((k(+ c 1))(d(- Y q)))
(cond((= 0(- X p)d)c)
((and(> d 0)(even?(+ p q)))(m p(+ q 1)k))
((and(< d 0)(odd?(+ p q)))(m p(- q 1)k))
((< p X)(m(+ p 1)q k))
(else(m(- p 1)q k))))))

2

05 এ বি 1 ই , 24 বাইট

আমার পাইথ উত্তরটির পোর্ট , যা ফিরসামের পাইথন উত্তর হিসাবে প্রায় একই পদ্ধতির ব্যবহার করে । তালিকা হিসাবে ইনপুট নেয় । +1 বাইটের জন্য একটি বাগ স্থির করে, আবার +1 এর জন্য অন্য একটি ভুল স্থির করে, তবে যা পরীক্ষার সমস্ত ক্ষেত্রে সঠিক ফলাফল পেয়েছে ...(x1,x2),(y1,y2)

ÆÄ`©I˜OÉ(IøнOIθD{Q+m+M®+

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

ভাঙ্গন

। ˜ I˜OÉ (IøнOIθD {Q + m + M® + সম্পূর্ণ প্রোগ্রাম I আমি মূল্যায়িত ইনপুট উপস্থাপন করি।
Sub জোড়গুলি বিয়োগ করে হ্রাস করুন, পরম মান নিন take
  © them এগুলিকে স্ট্যাকের উপরে আলাদাভাবে ফেলে দিন এবং দ্বিতীয়টি সংরক্ষণ করুন
                            এক, | y1-y2 | রেজিস্টার সি।
    আইও স্ট্যাকের উপরে সমতল ইনপুটটির যোগফলকে পুশ করুন।
       É (এর সমতা নিন এবং এটিকে অবহেলা করুন।
         আমি ধাক্কা [x1, y1]।
            ও x1 + y1 নিন (তাদের যোগফল)
             IθD {Q তারপরে দ্বিতীয় যুগটি সাজানো হয়েছে কিনা তা পরীক্ষা করুন (y1 ≤ y2)।
                  + এবং x1 + y1 এর সাথে যোগফল।
                   মি। সমতাটি ** উপরের দিকে চাপ দিন।
                    + এবং এটিতে দ্বিতীয় পরম পার্থক্য যুক্ত করুন।
                     M® + ফলস্বরূপ, স্ট্যাকের বৃহত্তম সংখ্যায় চাপুন
                            আরও রেজিস্টার সিতে সঞ্চিত মান

আমি% না 100 নিশ্চিত, কিন্তু আপনি পরিবর্তন করতে পারবেন না ©করার Dএবং অপসারণ ®? এটি বর্তমানে আপনার টিআইও-তে মামলার পক্ষে কাজ করছে বলে মনে হচ্ছে, তবে আমি নিশ্চিত নই যে এটি প্রতিটি ক্ষেত্রে একই পথ অনুসরণ করে কিনা if
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন এডিট : না, কারণ Mএর আচরণ এর দ্বারা প্রভাবিত হবে। ব্যর্থ [[0, 127], [0, 0]]
মিঃ এক্সকোডার

2

পাইথন 2 , 74 72 71 বাইট

lambda c,a,d,b:abs(a-b)+abs(a+(-c-a)/2-b-(-d-b)/2)+abs((c+a)/2-(d+b)/2)

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সম্পাদনা: @ জোকিংকে ধন্যবাদ 2 বাইট সংরক্ষিত @ মিস্টার এক্সকোডারকে আরও একটি বাইট সংরক্ষণ করে। নিম্নলিখিত সূত্রের ভিত্তিতে আমি এই প্রশ্নের মধ্যে পেয়েছি :

|aibi|+|(aiaj2)(bibj2)|+|aj+12bj+12|

সমন্বয় ব্যবস্থা তিনভাবে পৃথক; স্থানাঙ্কগুলি আদান প্রদান করা হয় (যা আমার কিছুটা অদ্ভুত প্যারামিটার নাম ক্রম ব্যাখ্যা করে), স্থানাঙ্কগুলি পরিবর্তে কোণযুক্ত হয় (যা দুটি সংযোজন ব্যাখ্যা করে) এবং লিঙ্কযুক্ত প্রশ্নে স্থানাঙ্কগুলি নিকৃষ্টতর 1-সূচক ব্যবহার করে। যেহেতু আমরা পার্থক্য নিচ্ছি যেহেতু এটি বেশিরভাগ সময় বাতিল হয়ে যায় এবং আমাদের সাথে বাকী থাকে:12090

|aibi|+|(aiaj+12)(bibj+12)|+|aj2bj2|

এরপরে এটি লক্ষ্য করে গল্ফ করা যায় f ।aj+12=aj2


আপনি
জো কিং

1
lambda c,a,d,b:abs(a-b)+abs(a+-(c+a)/2-b--(d+b)/2)+abs((c+a)/2-(d+b)/2)3 বাইট সংরক্ষণ করা উচিত।
মিঃ এক্সকোডার

1

পাইথ , 31 28 বাইট

ফেয়ারসামের পাইথন উত্তরের মতো প্রায় একই পন্থা ব্যবহার করে । তালিকা হিসাবে ইনপুট নেয় । -1 বাইটের জন্য একটি বাগ স্থির করে।(x1,x2),(y1,y2)

+eKaMQg#hK+eK^%ssQ_2+shCQSIe

এখানে চেষ্টা করুন! বা পরীক্ষা স্যুট চেষ্টা করুন!

ভাঙ্গন

+ eKaMQg # hK + eK ^% ssQ_2xxFhCQSIe সম্পূর্ণ প্রোগ্রাম। প্রশ্ন = ইভাল (ইনপুট ())।
  KaMQ পার্থক্যগুলি [| x1-x2 |, | y1-y2 |] কে তে সংরক্ষণ করুন।
 e পরবর্তীটি পুনরুদ্ধার করুন (| y1-y2 |)।
+ g # এবং এর মধ্যে সর্বাধিক মানটিতে যুক্ত করুন:
        এইচকে - কে এর প্রধান (| x1-x2 |)
          + - এবং যোগ করার ফলাফল:
           eK কে এর শেষ (| y1-y2 |)।
             ^ - ক্ষতিকারক ফলাফল সহ:
              % ssQ_2 সমতল Q এর যোগফল, মডুলো -2।
                                        X1 + x2 + y1 + y2 টি বিজোড় হলে, ফলন -1 অন্যথায় 0।
                    xxFhCQSIe - এই অভিব্যক্তিটির ফলাফল দ্বারা:
                       এইচসিকিউ ট্রান্সপোজ কি এবং মাথাটি পান (x1, y1)।
                     এক্সএফ বিটওয়াইজ এক্সওর দ্বারা হ্রাস করুন।
                          এসআই এবং তালিকাটি [y1, y2] বাছাই করা হয়েছে কিনা তা পরীক্ষা করুন।
                    x যার পরে, বুল দ্বারা ফলাফলটি (1/1) xor করুন।

1

05 এ বি 1 ই , 16 বাইট

নীল এর উত্তরের একটি পরিবর্তিত সংস্করণ ব্যবহার করুন , 05AB1E এর মতো স্ট্যাক-ভিত্তিক ভাষার জন্য অনুকূলিত করা। STDIN থেকে একটি নতুন লাইন দ্বারা পৃথক করে দুটি স্থানাঙ্ক, হিসাবে ইনপুট নেয় । প্রথমদিকে আমি এটিকে আমার অন্যান্য 05AB1E উত্তরের সাথে একীভূত করেছিলাম কিন্তু তারপর এটি আলাদাভাবে পোস্ট করার সিদ্ধান্ত নিয়েছিলাম কারণ এটি খুব, খুব আলাদা।(x1,x2),(y1,y2)

+D(‚2÷Æ`²Æ©+®)ÄO

এটি অনলাইন চেষ্টা করুন! বা পরীক্ষা স্যুট চেষ্টা করুন! ( কেভিন ক্রুইজসেনের সৌজন্যে কোডের ®পরিবর্তে কিছু পরিবর্তিত সংস্করণ ব্যবহার করা হয়েছে )²


চমৎকার উত্তর! গল্ফের জন্য কিছু নয়, তবে আপনি যখন পরিবর্তন ©+®করেন DŠ+তখন কোনও পরীক্ষা স্যুট সেট আপ করা সহজ। ;) এখানে সেই পরীক্ষার স্যুট, এবং সমস্ত পরীক্ষার কেস সত্যই সফল হয় (অগোছালো শিরোনাম উপেক্ষা করুন; পি)।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন আমার কাছে বিকল্প সংস্করণ হিসাবে এটি ছিল, তবে আমার কাছে এমনটা ঘটেনি যে আমি একটি পরীক্ষা স্যুট লিখতে পারি ... ধন্যবাদ, আমি এটি যুক্ত করব
মিঃ এক্সকোডার

1
@ কেভিন ক্রুইজসেন আমি আরও দুটি (খুব সুস্পষ্ট ...!) বাইট গলফ করেছিলাম এবং পরীক্ষার স্যুট সামঞ্জস্যতা আরও বেশি ভাঙতে সফল হয়েছি, তাই আমি এটিকে যেমন রেখেছি: পি উপায় হ'ল সম্পাদনার জন্য ধন্যবাদ।
মিঃ এক্সকোডার

1

জেলি , 22 .. 16 15 বাইট

ṭH,‘H_ɗɗ@+¥ḞIAS

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

সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন।

এই উত্তরে @ নীলের পদ্ধতি ব্যবহার করে যা এই গণিতের একটি পরিবর্তিত সূত্র ব্যবহার করে SEএসই প্রশ্ন।

স্থানাঙ্কগুলি আর্গুমেন্ট হিসাবে y1, y2এবং নেয় x1, x2


1

জাভা 8, 157 190 188 144 142 141 127 বাইট

(a,b,x,y)->{int r=0,c=1,z=1;for(;(c|z)!=0;r--){c=x-a;z=y-b;if((z<0?-z:z)<(c<0?-c:c)|a%2!=b%2?z<0:z>0)b+=z<0?-1:1;else a+=c<0?-1:1;}return~r;}

বাগ ফিক্সের কারণে +33 বাইট (157 → 190)।
-44 বাইট (188 → 144) পুনরাবৃত্ত পদ্ধতিটি একটি একক লুপিং পদ্ধতিতে রূপান্তর।
-14 বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

(a,b,x,y)->{          // Method with four integers as parameter and integer return-type
                      // (a=x1; b=y1; x=x2; y=y2)
  int r=0,            //  Result-integer `r`, starting at 0
      c=1,z=1;        //  Temp integers for the differences, starting at 1 for now
  for(;(c|z)!=0;      //  Loop until both differences are 0
      r--){           //    After every iteration: decrease the result `r` by 1
    c=x-a;            //   Set `c` to x2 minus x1
    z=y-b;            //   Set `z` to y2 minus y1
    if(z*Z            //   If the absolute difference between y2 and y1
       <c*c)          //   is smaller than the absolute difference between x2 and x1
       |a%2!=b%2?     //   OR if the triangle at the current location is facing downwards
         z<0          //       and we have to go upwards,
        :z>0)         //      or it's facing upwards and we have to go downwards
      b+=z<0?-1:1;    //    In/decrease y1 by 1 depending on where we have to go
    else              //   Else:
     a+=c<0?-1:1;}    //    In/decrease x1 by 1 depending on where we have to go
  return~r;           //  Return `-r-1` as result

1
সুপারিশ z*z<c*cপরিবর্তে(z<0?-z:z)<(c<0?-c:c)
ceilingcat

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