ঘূর্ণন ক্রমের ম্যানহাটনের দূরত্ব


9

আমি যদিও এটি একটি ভাল চ্যালেঞ্জ হবে: http://adventofcode.com/2016/day/1

কার্য বিবরণী

(এল | আর) [1-9] [0-9] * এর প্যাটার্ন অনুসরণ করে আবর্তন এবং দূরত্বের ক্রম দেওয়া, শুরু এবং শেষ পয়েন্টগুলির মধ্যে ম্যানহাটনের দূরত্ব দিন, এটি হল উলম্ব এবং অনুভূমিক চালগুলির সর্বনিম্ন সংখ্যা একটি সারি.

উদাহরণ

উদাহরণস্বরূপ, আমরা যদি ধরে নিই যে আপনি উত্তর দিকে মুখ শুরু করেছেন:

আর 2 অনুসরণ করে, এল 3 আপনাকে 2 টি পূর্ব এবং 3 টি ব্লক উত্তর, বা 5 টি ব্লক দূরে ছেড়ে যায়। R2, R2, R2 আপনাকে আপনার শুরু অবস্থানের দক্ষিণের কারণে 2 টি ব্লক দেয়, যা 2 ব্লক দূরে। আর 5, এল 5, আর 5, আর 3 আপনাকে 12 ব্লক দূরে ছেড়ে যায়।

প্রযুক্তিগত বিবরণ

আপনি চালগুলির মধ্যে বিভাজক চয়ন করতে পারেন (উদা: "\ n", ",", বা ",")। আপনার উত্তরটি অবশ্যই বেস 10 এ পূর্ণসংখ্যা হিসাবে দেওয়া উচিত।

নকল নয়!

এটি একাধিক কারণে নকল নয়:

  • চালগুলি এক নয়। এখানে সেগুলি ঘোরানো হয় , দিক নয়।
  • আমি ম্যানহাটনের দূরত্ব চাই ইউক্যালিডিয়ান নয় not

3
আপনার প্রশ্নের মধ্যে ম্যানহাটনের দূরত্ব কী তা আপনাকে একটি বিবরণ অন্তর্ভুক্ত করা উচিত। কেবল একটি লিঙ্ক পোস্ট করা এক ধরণের কৌতুকপূর্ণ।
গ্যাব্রিয়েল বেনামি 21

2
এটা খুব আলাদা! আমাদের কেবল ঘোরাঘুরি!
ল্যাবো

1
@ ল্যাবো আমি সম্মত এটি কেবল এখানেই নয় যে এখানে উত্তরটি ম্যানহাটনের দূরত্বে রয়েছে, অন্যদিকে ইউক্লিডিয়ান দূরত্ব রয়েছে। এই কচ্ছপ শৈলী আন্দোলন হয়েছে যখন অন্যান্য এক নির্দিষ্ট করে কম্পাস নির্দেশ NSEW (যে এটি তাদের UDLR অপ্রাসঙ্গিক কল।)
শ্রেনী নদী সেন্ট

2
আপনার চ্যালেঞ্জগুলিকে মূল সাইটে পোস্ট করার আগে তাদের প্রতিক্রিয়া জানাতে দয়া করে ভবিষ্যতে স্যান্ডবক্স ব্যবহার করুন ।
মেগো

2
@ লাবো এটি ঠিক আছে, আমরা আশা করি না যে নতুন ব্যবহারকারীরা এই সাইটের সমস্ত ইনস এবং আউটগুলি অবিলম্বে জানবেন। এটি পরবর্তী সময়ের জন্য কেবল একটি মৃদু পরামর্শ। :)
মেগো

উত্তর:


4

পাইথন 3, 109 99 104 101 বাইট

এটি একটি সাধারণ উত্তর যা জটিল সংখ্যা ব্যবহার করে, স্পেস-বিভাজিত স্ট্রিং বা একটি নতুন লাইন-পৃথক স্ট্রিং হিসাবে ইনপুট সহ numbers গল্ফিং পরামর্শ স্বাগত!

সম্পাদনা করুন: -13 লাইটোর জন্য বাইট ধন্যবাদ। কোন ইনটে রূপান্তর করার জন্য +5 বাইট।

d=p=0
for r in input().split():d+=1-2*(r<'R');p+=1j**d*int(r[1:])
print(int(abs(p.real)+abs(p.imag)))

Ungolfing

def manhattan_rotation(seq, nsew=0, pos = 0):
    for rot in seq.split():
        # change direction
        if rot[0] == "L":
            nsew += -1 
        else:
            nsew += 1
        # move in that direction rot[1:] times
        pos += 1j ** nsew * int(rot[1:])
    return int(abs(pos.real)+abs(pos.imag))

1-2 * (আর [0] <'আর') আপনাকে 2 বাইট সংরক্ষণ করবে :)
ল্যাবো

কোনও ফাংশন করবেন না, ইনপুট থেকে পড়া আপনাকে আরও চর বাঁচাতে দেয়!
ল্যাবো

2 বাইট সংরক্ষণ করতে একই লাইনে 2 টি ভেরিয়েবল বরাদ্দ করুন: d = p = 0
ল্যাবো

আমি আপনার উত্তরটি আবার গল্ফ করেছিলাম এবং এটি 99 টি চর তৈরি করে! pastie.org/private/hm7lejqosdqnkgo000u7q
Labo

2
@ লাবো আমি নিশ্চিত নই যে আপনি স্পেসিফিকেশনটি এমনভাবে সম্পাদনা করতে পারবেন যা বিদ্যমান উত্তরগুলিকে অকার্যকর করবে তবে আমাকে কিছু মোড জিজ্ঞাসা করুন।
শার্লক 9

2

পিএইচপি, 93 বাইট

while($m=$argv[++$i])${chr(80|3&$d+=(P<$m)-(M>$m))}+=substr($m,1);echo abs($P-$R)+abs($Q-$S);

ভাঙ্গন

while($m=$argv[++$i])       // loop through arguments:
    ${                      // 5. use as variable name
        chr(                // 4. cast to character (P,Q,R,S) 
        80|                 // 3. add 80
        3&                  // 2. modulo 4
        $d+=(P<$m)-(M>$m)   // 1. change direction depending on letter
    )}+=substr($m,1);       // 6. add number to variable
echo abs($P-$R)+abs($Q-$S); // calculate distance, print

2

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

x=y=0
for d in input().split():c=cmp(d,'M');x,y=int(d[1:])-y*c,x*c
print abs(x)+abs(y)

বর্তমান xএবং yস্থানাঙ্কগুলি অনুসরণ করে। বাঁক দেওয়ার সময়, দিকটি আপডেট করার পরিবর্তে বর্তমান মানটি ঘোরান যাতে গতিটি সর্বদা এক্স-পজিটিভ দিকে থাকে। জটিল নম্বরগুলি থেকে স্থানাঙ্কগুলি বের করতে খুব ব্যয়বহুল ছিল।


1

পাইথন 2, 103 102 বাইট

l=c=0
for i in input().split():c+=cmp(i[0],'N');l+=1j**c*int(i[1:])
print int(abs(l.imag)+abs(l.real))

repl.it

ইনপুট হল স্থান সীমান্তের দিকের একটি স্ট্রিং, যেমন "R5 L5 R5 R3"
প্রারম্ভিক অবস্থান এবং গন্তব্যের মধ্যে ম্যানহাটনের দূরত্বটি মুদ্রণ করে।

কিভাবে?

জটিল বিমানের উত্স থেকে শুরু হয় l=0;

ক্রমহীন ত্রৈমাসিক-ডান টার্ন কাউন্টার সহ c=0;

প্রতিটি নির্দেশের জন্য, iঘূর্ণনটি পার্স করা হয় নির্দেশকের প্রথম অক্ষরটিকে চরিত্রের সাথে তুলনা করে 'N'এবং cসে অনুযায়ী সামঞ্জস্য করা হয়।

ভ্রমণ দূরত্ব সঙ্গে পার্স করা হয় int(i[1:])এবং নির্দেশ গ্রহণ যে অনেক ব্লক মাপের গ্রহণ করে দেওয়া দিক টি পদক্ষেপ আইন করা হইল cতম ক্ষমতা 0+1jসঙ্গে 1j**c

চূড়ান্ত ম্যানহাটনের দূরত্বটি দুটি দিক থেকে উত্স থেকে পরম দূরত্বের যোগফল - কাল্পনিক এবং বাস্তব; সঙ্গে অর্জনabs(l.imag)+abs(l.real)


1
@ শেরলক 9 - ওহ, উত্তর উত্তর রূপান্তর। পাইথন 2 এ স্যুইচ করে cmpএবং আমার উত্তরটির মতো ব্যবহার করে 2 বাইট সংরক্ষণ করুন , আমাকে জানান এবং আমি মুছে ফেলব।
জোনাথন অ্যালান

0

জাভাস্ক্রিপ্ট (ES2016), 98 100

2 বাইট সংরক্ষিত thx @ নীল

d=>d.replace(/.(\d+)/g,(d,l)=>(o+=d>'M'||3,l*=~-(o&2),o&1?x-=l:y+=l),x=y=o=0)&&(x*x)**.5+(y*y)**.5

ES6 এর জন্য 100 বাইট

d=>d.replace(/.(\d+)/g,(d,l)=>(o+=d>'M'||3,l*=~-(o&2),o&1?x-=l:y+=l),x=y=o=0)&&(x>0?x:-x)+(y>0?y:-y)

কম গল্ফড

d => d.replace(/.(\d+)/g,
  (d,l)=>( // L or R in d, distance in l
    o += d>'M' || 3, // orientation in o, used %4
    l *= ~-(o&2), // convert to number and change sign if needed
    o&1 ? x -= l : y += l // move based on orientation
  ), x = y = o = 0)
&& (x>0?x:-x) + (y>0?y:-y)

পরীক্ষা (ES6)

F=
d=>d.replace(/.(\d+)/g,(d,l)=>(o+=d>'M'||3,l*=~-(o&2),o&1?x-=l:y+=l),x=y=o=0)&&(x>0?x:-x)+(y>0?y:-y)

function update() {
  O.textContent=F(I.value)
}

update()
<input id=I value='R5, L5, R5, R3' oninput='update()'><pre id=O></pre>


1
আমার ES6 উত্তরটি মূলত 106 বাইট ছিল; আপনার মধ্যবর্তী পরিবর্তনশীল অনুলিপি করা আমাকে 3 বাইট সংরক্ষণ; ম্যাচ থেকে আপনার প্রতিস্থাপনে স্যুইচ করা আমাকে 2 বাইট বাঁচিয়েছে এবং একই সাথে আপনার প্রসেসিংয়ের দিক এবং দূরত্ব অনুলিপি করা আমাকে একটি চূড়ান্ত বাইট সংরক্ষণ করেছে, যার ফলস্বরূপ: s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)যা এখন আপনার ES6 উত্তরের চেয়ে দুটি বাইট ছোট, কৌশলগুলি c<'R'||3এবং n*=~-(d&2)কৌশলগুলি ধন্যবাদ ।
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.