আমি এখন কোথায়?


21

আমি এখন কোথায়?

dকেবল একটি অক্ষর যুক্ত একটি স্ট্রিং দেওয়া হয়েছে , NSWEআমি যে স্থানাঙ্কগুলি ভ্রমণ করেছি (বাম থেকে ডানে, লোভের সাথে গ্রাস করে) এবং আমি যেখানে থাকি তার চূড়ান্ত স্থানাঙ্ক নির্ধারণ করে।

বাম থেকে ডান স্থানাঙ্ক পড়ার নিয়ম:

  • পরবর্তী চরিত্রটি যদি হয় NবাS :
    • চরিত্রটি যদি এর পরে Nবা Sঅন্য হয় NবাS :
      • শুধুমাত্র প্রথম Nবা গ্রহণ করুন S
      • আউটপুট [0,1] জন্যN
      • আউটপুট [0,-1]জন্যS
    • অক্ষরের পরে Nবা Sহয় WবাE :
      • গ্রাস উভয় Nবা Sএবং Wবা E
      • আউটপুট [1,1]বা [-1,1]জন্য NEএবং NWযথাক্রমে।
      • আউটপুট [1,-1]বা [-1,-1]জন্য SEএবং SWযথাক্রমে।
  • অক্ষরটি অবশ্যই কোন থাকলে Eবা Wএকটি পূর্বে না SবাN :
    • গ্রহণ করুন Eবা W
    • আউটপুট [1,0]জন্য E
    • আউটপুট [-1,0]জন্য W

কাজের উদাহরণ

NSWE

[0,1]   (North      N)
[-1,-1] (South-west SW)
[1,0]   (East       E)
[0,0]   (N+SW+E = Didn't actually move)

নোট করুন এটি যে কোনও বিন্যাসে হতে পারে, এখানে বৈধ আউটপুটের অন্যান্য উদাহরণ রয়েছে:

[[0,1],[-1,-1],[1,0],[0,0]]


[[[0,1],[-1,-1],[1,0]],[0,0]]


"0,1\n0,-1\n-1,0\n1,0\n0,0"

ইত্যাদি ...


আরও উদাহরণ

SWSENNESWNE

[-1,-1]
[1,-1]
[0,1]
[1,1]
[-1,-1]
[1,1]
[1,0]

NNEESESSWWNW

[0,1]
[1,1]
[1,0]
[1,-1]
[0,-1]
[-1,-1]
[-1,0]
[-1,1]
[0,0]

NENENEE

[1,1]
[1,1]
[1,1]
[1,0]
[4,3]

Nen

[1,1]
[0,1]
[1,2]

ইইই

[1,0]
[1,0]
[1,0]
[3,0]

বিধি

  • লফোলগুলি লঙ্ঘন করে না এমন কোনও সুবিধাজনক বিন্যাসে আপনি আউটপুট দিতে পারেন।
  • আপনার অবশ্যই লোভ খাওয়া উচিত, NWEকখনই নয় N,W,E, এটি সর্বদা NW,E
    • এই ক্ষেত্রে প্রযোজ্য: SW*, SE*, NW*, NE*
    • আপনি লোভের সাথে বাম থেকে ডান গ্রহণ করছেন।
  • এটি , সর্বনিম্ন বাইট-কাউন্ট জেতা।

"আমি যে স্থানাঙ্কগুলি ভ্রমণ করেছি" তা নির্ধারণ করুন " : আমি নিশ্চিত নই যে এরপরে বর্ণিত বিষয়গুলির সাথে এটি সত্যিই মেলে কিনা। এটি আরও বেশি "আমার সমস্ত পদক্ষেপের ভেক্টর নির্ধারণ" এর মতো । শুধুমাত্র চূড়ান্ত আউটপুট হ'ল প্রকৃত স্থানাঙ্ক।
আর্নৌল্ড

1
এমন একটি পরীক্ষার কেস যা [4, 3]চলেছে বা পরীক্ষার আউটপুটে কী চলছে তা দেখার জন্য এটি কিছুটা সহজ করে তোলে।
লিন

3
জটিল সংখ্যার হিসাবে ফর্ম্যাট করছেন 1, -1j, (-1+1j)ইত্যাদি একটি বৈধ আউটপুট ফরম্যাট?
লিন

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

1
লোভ খাওয়া আসলে কি আলাদা? যেহেতু NEঠিক তাই করা N+Eউচিত নয়?
গম উইজার্ড 15

উত্তর:


7

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

import re
a=[(int(s,35)%5-3,('N'in s)-('S'in s))for s in re.findall('[NS][EW]?|.',input())]
print a,map(sum,zip(*a))

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

আউটপুট হিসাবে [(3+4j), 1, -1j, …], 91 বাইট

lambda x:[sum(1j**(ord(c)%8%5)for c in s)for s in[x]+re.findall('[NS][EW]?|.',x)]
import re

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

এই ল্যাম্বদা গাউসিয়ান পূর্ণসংখ্যার একটি তালিকা ফিরিয়ে দেয় : প্রথমটি চূড়ান্ত স্থানাঙ্ক এবং অন্য সমস্ত সেখানে যাওয়ার জন্য প্রয়োজনীয় পদক্ষেপ।


5

সংযুক্তি , 80 বাইট

V#Sum##{Chop[1-ToBase[22260446188,3],2][Sum@Ords=>MatchAll[_,/"[NS][WE]|."]%11]}

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

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং আর্গুমেন্ট গ্রহণ করে।

ব্যাখ্যা

প্রথম কাজটি এই প্রশ্নের পার্সিং পর্বটি বাস্তবায়ন করা। আমি ইনপুট ( _)) পার্স করার জন্য একটি সহজ রেজিেক্স ব্যবহার করা সবচেয়ে কম পেয়েছি :

MatchAll[_,/"[NS][WE]|."]

এটি [NS][WE]|.অন্যান্য অনেক উত্তরে যেমন দেখা গেছে, রেজেক্সের সমস্ত উপস্থিতির সাথে মেলে । এটি লোভের সাথে অনুরোধিত দিকনির্দেশগুলি দেয়।

এখন, আমরা প্রতিটি ডিরেক্টরিতে একটি হ্যাশ ফাংশন প্রয়োগ করতে যাচ্ছি। আমরা প্রতিটি দিকের কোডপয়েন্ট নিই এবং সেগুলি যোগ করি। এটি নিম্নলিখিত ম্যাপিং দেয়:

Direction       Ord-sum
E               69
N               78
S               83
W               87
NE              147
SE              152
NW              165
SW              170

আমরা এই মানগুলি একটি ছোট ডোমেনে মানচিত্র করার চেষ্টা করব; মডুলো এটির জন্য দরকারী, এবং আমরা প্রদর্শন করতে পারি যে সমস্ত ক্ষুদ্রতম মডুলো যা প্রদত্ত সমস্ত ইনপুটগুলির জন্য স্বতন্ত্র মানগুলির ফলস্বরূপ 11, বাকী অনুসারে বাছাই করে, এটি আমাদের নীচের সারণিটি দেয়:

Direction       Ord-sum         % 11
NW              165             0
N               78              1
E               69              3
NE              147             4
SW              170             5
S               83              6
SE              152             9
W               87              10

এনকোডিংয়ের মাধ্যমে এখন আমাদের একটি ইনপুট চিঠিপত্র রয়েছে Sum@Ords=>[...]%11। এরপরে, আমাদের এই অবশিষ্টাংশগুলিকে পয়েন্টগুলিতে রূপান্তর করতে হবে। আমরা অন্য ম্যাপিংটি নেওয়ার চেষ্টা করব, যার অর্থ দিকনির্দেশের সাথে মিলে না এমন হ্যাশগুলিতে "স্পার্স-ফিলিং মানগুলি" সন্নিবেশ করানো কার্যকর হবে:

Direction       Hash        Coordinates
NW              0           [-1, 1]
N               1           [0, 1]
--             (2)          [0, 0]
E               3           [1, 0]
NE              4           [1, 1]
SW              5           [-1, -1]
S               6           [0, -1]
--             (7)          [0, 0]
--             (8)          [0, 0]
SE              9           [1, -1]
W               10          [-1, 0]

আমাদের কাছে বর্তমানে পয়েন্টগুলির একটি সিরিজ রয়েছে, যা হ্যাশ দ্বারা সূচকযোগ্য একটি তালিকা দিতে পারে:

[-1, 1] [0, 1] [0, 0] [1, 0] [1, 1] [-1, -1] [0, -1] [0, 0] [0, 0] [1, -1] [-1, 0]

এখন, আমরা এটি সংকুচিত করব, এটি কীভাবে এটি কেবলমাত্র -1s, 0s এবং 1s এর সমন্বয়ে তৈরি seeing যেহেতু তালিকাটি যুগলগুলির প্রতিনিধিত্ব করে, তাই আমরা ডেটা না হারিয়ে তালিকাটি সমতল করতে পারি। তারপরে, যদি আমরা প্রতিটি নম্বর নিই xএবং গণনা করি 1-x, আমরা নিম্নলিখিত তালিকাটি পাই:

2 0 1 0 1 1 0 1 0 0 2 2 1 2 1 1 1 1 0 2 2 1

আমরা এটিকে একটি বেস 3 সংখ্যায় রূপান্তর করতে পারি:

20101101002212111102213

বেস 10 এ রূপান্তর করা:

20101101002212111102213 ≡ 2226044618810

সংক্ষেপ, আমরা আমাদের পয়েন্ট গ্রহণ করেছি, তাদের আন-যুক্ত করা, প্রতিটি উপাদান থেকে বিয়োগ নেন 1, এবং বেস থেকে রূপান্তরিত 3আমাদের দান 22260446188। আমরা যেমন সঙ্কুচিত করতে পারেন:

  1. বেস 3 তে রূপান্তর করুন: ToBase[22260446188,3]
  2. প্রতিটি নম্বর একটি থেকে বিয়োগ করুন (স্ব-বিপরীত): 1-ToBase[22260446188,3]
  3. তালিকাটি পুনরায় যুক্ত করুন: Chop[1-ToBase[22260446188,3],2]

এটি আমাদের জুটির মূল সেট দেয়। তারপরে, আমরা পূর্বোক্ত সূচকগুলি এর মতো সম্পাদন করতে পারি:

(chopped value)[hashes]

যেহেতু, সংযুক্তিতে, একটি অ্যারের দ্বারা সূচীকরণগুলি সেই সূচকগুলির সাথে সম্পর্কিত সমস্ত উপাদান প্রদান করে। (সুতরাং [1,2,3,4][ [0,0,-1,1] ] = [1,1,4,2],।) এখন, ওপি যে পথটি চালিয়েছে সেগুলির আমাদের দিকনির্দেশ রয়েছে। যা অবশিষ্ট আছে তা যোগফল গণনা করা।

সুতরাং আমরা এই ফলটিকে একটি ল্যাম্বডায় ক্যাপচার {...}করি এবং এটি দ্বিতীয় ক্রিয়াকলাপ ( a##b) এর সাথে প্রথম ফাংশন হিসাবে রাখি V#Sum। এটি একটি কাঁটাচামচ, যা প্রদত্ত ইনপুটটি xহতে প্রসারিত:

V[x, Sum[x]]

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


4

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

একটি স্ট্রিং প্রদান করে।

s=>s.replace(/[NS][EW]|./g,s=>(D=d=>!!s.match(d),x+=h=D`E`-D`W`,y+=v=D`N`-D`S`,[h,v]+`
`),x=y=0)+[x,y]

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


আমি টেমপ্লেট ফাংশন ব্যবহার পছন্দ! : ডি
কনর ও'ব্রায়েন

@ কনরোও ব্রায়েন হ্যাঁ, তারা এখানে খুব সুন্দর hand আমি এতক্ষণ যে সমস্ত হ্যাশিং যাদুবিদ্যার আহ্বান জানিয়েছি তা কমপক্ষে কিছুটা দীর্ঘ।
আর্নৌল্ড

4

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

'NS' 'WE'Z*Z{2MhX{h'eklihfmj'X{YX9\3_2&YAqts

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা (উদাহরণ সহ)

'NSWE'উদাহরণ হিসাবে ইনপুট বিবেচনা করুন ।

'NS' 'WE'  % Push these two strings
           % STACK: 'NS', 'WE'
Z*         % Cartesian product. Gives a 4×2 char matrix
           % STACK: ['NW'; 'NE'; 'SW'; 'SE']
Z{         % Cell array of rows (strings)
           % STACK: {'NW', 'NE', 'SW', 'SE'}
2M         % Push again the inputs of the second-last function call
           % STACK: {'NW', 'NE', 'SW', 'SE'}, 'NS', 'WE'
h          % Concatenate horizontally
           % STACK: {'NW', 'NE', 'SW', 'SE'}, 'NSWE'
X{         % Cell array of individual elements (chars)
           % STACK: {'NW', 'NE', 'SW', 'SE'}, {'N', 'S', 'W', 'E'}
h          % Concatenate horizontally
           % STACK: {'NW', 'NE', 'SW', 'SE', 'N', 'S', 'W', 'E'}
'eklihfmj' % Push this string
           % STACK: {'NW', 'NE', 'SW', 'SE', 'N', 'S', 'W', 'E'}, 'eklihfmj'
X{         % Cell array of individual elements (chars)
           % STACK: {'NW','NE','SW','SE','N','S','W','E'},{'e','k','l','i','h','f','m','j'}
YX         % Implicit input. Regexp replace: replaces 'NW' by 'e', then 'NE' by 'k', etc.
           % Note that the two-letter combinations are replaced first, which implements
           % the greediness; and the target letters do not appear in the source, which
           % avoids unwanted interactions between replacements
           % STACK: 'hlj'
9\         % Modulo 9 (of codepoints), element-wise
           % STACK: [5, 0, 7]
3_2&YA     % Convert to base 3 with 2 digits. Gives a 2-column matrix
           % STACK: [1, 2; 0, 0; 2, 1]
q          % Subtract 1, element-wise
           % STACK: [0, -1; -1, -1; 1, 0]
tXs        % Duplicate. Sum of each column
           % STACK: [0, -1; -1, -1; 1, 0], [0, 0]
           % Implicit display

4

জাভা (জেডিকে 10) , 171 বাইট

s->{var r="";int i=0,l=s.length,c,x=0,y=0,Y,X;for(;i<l;X=c>1||i<l&&(c=~-s[i]/6%4)>1&&++i>0?c*2-5:0,r+=X+","+Y+" ",x+=X,y+=Y)Y=(c=~-s[i++]/6%4)<2?1-c*2:0;return r+x+","+y;}

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

ব্যাখ্যা

ধন্যবাদ c=~-s[i]/6%4, নিম্নলিখিত ম্যাপিংটি সম্পন্ন হয়েছে:

'N' -> ascii: 78 -> -1 = 77 -> /6 = 12 -> %4 = 0
'S' -> ascii: 83 -> -1 = 83 -> /6 = 13 -> %4 = 1
'W' -> ascii: 87 -> -1 = 86 -> /6 = 14 -> %4 = 2
'E' -> ascii: 69 -> -1 = 68 -> /6 = 11 -> %4 = 3
  • NSসঙ্গে পরীক্ষা করা হয় c<2এবং ম্যাপ +1/ -1ব্যবহার 1-c*2;
  • EWসঙ্গে পরীক্ষা করা হয় c>1এবং ম্যাপ +1/ -1ব্যবহার c*2-5

ক্রেডিট


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

ধন্যবাদ, এটি কেবল কয়েকটি বাইট সংরক্ষণ করেছে (4), তবে এটি কোনও কিছুর চেয়ে ভাল;)
অলিভিয়ের গ্রাগোয়ার

কেভিন ক্রুইজসেন ধন্যবাদ, এটি প্রথমে স্পষ্ট বলে মনে হয়েছিল, তবে আমি অন্য একটি পদ্ধতির উপর কাজ করছি যা আমার বাইট-কাউন্টকে ৩০ এরও বেশি হ্রাস করেছে। একটি "পার্সিং", একটি "মিলে যাওয়া" নয়।
অলিভিয়ার গ্রাগোয়ার

1
দীর্ঘশ্বাস .. 172 বাইট
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন দুঃখিত, এটি আপনার পরিবর্তনগুলিকে সংহত করার একটি গোলমাল ... আমি কাজ নিয়েছি এবং আমি এই পৃষ্ঠাটি রিফ্রেশ করতে ভুলে গিয়েছি ... যাইহোক ধন্যবাদ ^^ 'ক্রেডিট গণনাটি আপনার আসল creditণের চেয়ে খুব সম্ভবত। তার জন্যও দুঃখিত: s
অলিভিয়ার গ্রাগোয়ার

3

রেটিনা 0.8.2 , 93 বাইট

.+
$&¶$&
\G[NS]?[EW]?
$&¶
G`.
W
J
%O`.
+`EJ|NS

m`^((J)?[EJ]*)((S)?[NS]*)
$#2$*-$.1,$#4$*-$.3

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

.+
$&¶$&

ইনপুট সদৃশ।

\G[NS]?[EW]?
$&¶

প্রথম অনুলিপিটিকে দিকনির্দেশে বিভক্ত করুন।

G`.

উপরোক্ত প্রক্রিয়া দ্বারা নির্মিত এক্সট্রেনাস ফাঁকা লাইনগুলি সরান।

W
J

পরিবর্তন Wমধ্যে Jযাতে এটি মধ্যে বাছাই করে Eএবং N। (মুভিং Eমধ্যে থেকে Sএবং Wএছাড়াও কাজ করবে।)

%O`.

প্রতিটি লাইনকে ক্রমে সাজান।

+`EJ|NS

বিপরীত দিকের জোড়া জোড়া মুছুন (এটি কেবল অবশ্যই শেষ লাইনে প্রভাবিত করে)।

m`^((J)?[EJ]*)((S)?[NS]*)
$#2$*-$.1,$#4$*-$.3

অনুভূমিক এবং উল্লম্ব আন্দোলনের সংখ্যা গণনা করুন, যেখানে প্রয়োজন সেখানে লক্ষণগুলি যুক্ত করুন।

আপনারা যারা রেটিনা 0.8.2 এবং রেটিনা 1 এর মধ্যে পার্থক্য জানেন তারা উল্লেখ করতে চাইবেন যে আমি রেটিনা 1 এ 2 বাইট সংরক্ষণ করতে পারি কারণ এটি *পরিবর্তে ব্যবহার করে $*। আমি যখন সেখানে ছিলাম আমি বিভাজন প্রক্রিয়াটি সহজ করার চেষ্টা করেছি তবে আমি বাইট গণনাটি আরও কমিয়ে আনতে পারিনি, আমি কেবল এটির সাথে এটি সমান করতে সক্ষম হয়েছি:

L$`$(?<=(.*))|[NS]?[EW]?
$&$1

3

জাভা 10, 269 265 243 বাইট

s->{var r="";int x=0,y=0,t,X,Y,a;for(;!s.isEmpty();r+=X+"|"+Y+" ",s=s.substring(++t),x+=X,y+=Y){a=s.charAt(t=0);if(s.matches("[SN][WE].*")){X=s.charAt(1)<70?1:-1;Y=1-a%2*2;t++;}else{X=a<70?1:a>86?-1:0;Y=a>69&a<87?1-a%2*2:0;}}return r+x+"|"+y;}

অবশ্যই এই চ্যালেঞ্জের জন্য সঠিক ভাষা নয় ..

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

ব্যাখ্যা:

s->{                  // Method with String as both parameter and return-type
  var r="";           //  Result-String, starting empty
  int x=0,            //  Ending `x`-coordinate, starting at 0
      y=0,            //  Ending `y`-coordinate, starting at 0
      t,X,Y,a;        //  Temp-integers
  for(;!s.isEmpty()   //  Loop as long as the input-String is not empty yet
      ;               //    After every iteration:
       r+=X+"|"+Y+" ",//     Append the current steps to the result-String
       s=s.substring(t),
                      //     Remove the first `t` characters from the input-String
       x+=X,y+=Y){   //      Append the ending `x`,`y` coordinates with the steps
    a=s.charAt(0);   //    Set `a` to the first character of the input-String to save bytes
    t=1;             //    Set `t` to 1
    if(s.matches("[SN][WE].*")){
                     //   Else-if the input-String starts with N/S followed by E/W:
      X=s.charAt(1)<70?1:-1;
                     //    Set `X` to 1 if 'E', -1 if 'W'
      Y=1-a%2*2;     //    Set `Y` to 1 if 'N', -1 if 'S'
      t++;}          //    Increase `t` by 1
    else{            //   Else:
      X=a<70?1:a>86?-1:0;
                     //    Set `X` to 1 if 'E', -1 if 'W', 0 if 'N' or 'S'
      Y=a>69&a<87?1-a%2*2:0;}}
                     //    Set `Y` 1 if 'N', -1 if 'S', 0 if 'E' or 'W'
  return r+x+"|"+y;} //  Append the ending coordinates, and return the result-String

1
জাভা উত্তরগুলি পয়েন্ট পেয়েছে যদিও সবাই তাদের পেয়েছে :)।
ম্যাজিক অক্টোপাস উরন

পছন্দ করুন :) এবং আমি এখনও জাভাতে গল্ফিং উপভোগ করছি যদিও আপনি কখনই সংক্ষিপ্ত হয়ে উঠবেন না .. যদি আপনি উত্তর দেওয়ার একমাত্র না হন (দুটি গ্রহণযোগ্য জাভা উত্তর পেয়েছেন .. এক্সডি)। তবে এই চ্যালেঞ্জের জন্য, অলিভিয়ারগ্রোগোয়ারের জাভা উত্তরটি প্রায় 70 বাইট কম হয়, তাই বেশিরভাগ আপভোকে তার কাছে যাওয়া উচিত।
কেভিন ক্রুইজসেন


2

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

f=
s=>s.replace(/((N)|(S))?((E)|(W))?/g,(m,v,n,s,h,e,w)=>(x+=h=!w-!e,y+=v=!s-!n,m?[h,v]+`
`:[x,y]),x=y=0)
<input oninput=o.textContent=/[^NSEW]/.test(this.value)?``:f(this.value)><pre id=o>0,0

একটি স্ট্রিং প্রদান করে।


1

রুবি , 75 71 বাইট

->x{[*x.scan(/[NS][EW]?|./),x].map{|s|s.chars.sum{|c|1i**(c.ord%8%5)}}}

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

-4 বাইট ধন্যবাদ benj2240।

যেহেতু জটিল সংখ্যাগুলি ফিরিয়ে নেওয়া একটি গ্রহণযোগ্য আউটপুট ফর্ম্যাট বলে মনে হচ্ছে, আমি অনুমান করি যে এটি খুব সুন্দর লিনের উত্তরের একটি বন্দর তৈরির চেয়ে বেশি গল্ফিয়ার পাবে না ।


খুব সুন্দর. আপনি কিছুটা বাইট বাঁচাতে পারবেন অভ্যন্তরটি এড়িয়ে গিয়ে map, সরাসরি এটির ব্লকটি অতিক্রম করে sum: এটি অনলাইনে চেষ্টা করুন!
বেনজ 2240

1

এফ # (মনো) , 269 বাইট

let f s=
 let l,h=(string s).Replace("NW","A").Replace("NE","B").Replace("SW","C").Replace("SE","D")|>Seq.map(function 'N'->0,1|'S'->0,-1|'W'-> -1,0|'E'->1,0|'A'-> -1,1|'B'->1,1|'C'-> -1,-1|'D'->1,-1)|>Seq.mapFold(fun(x,y) (s,t)->(s,t),(x+s,y+t))(0,0)
 Seq.append l [h]

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


হাই, পিপিসিজিতে আপনাকে স্বাগতম। দুর্ভাগ্যক্রমে আপনি নিজের আউটপুটটির সর্বশেষ আইটেমটি হারিয়েছেন, যা আপনি যেখানে শেষ করেছেন সেই অবস্থানটি। সুতরাং NSWEআপনি বর্তমানে আউটপুট হয়(0,1) , (-1,-1), (1,0), কিন্তু একটি চতুর্থ আউটপুট ঐ স্থানাঙ্ক এর সমষ্টি, তাই হওয়া উচিত (0,0)(কারণ 0+-1+1 = 0এবং 1+-1+0 = 0)।
কেভিন ক্রুইজসেন 14

@ কেভিন ক্রুজসেন ঠিক আছে, আমি এটি ধরিনি। একটি আপডেট করেছেন।
হেনরিক হানসেন

1
এখন দুর্দান্ত কাজ করছে বলে মনে হচ্ছে, তাই আমার কাছ থেকে +1 করুন। উপভোগকর তোমার থাকা! :) আর যদি আপনি এটা এখনো দেখা যায় না, টিপস এফ # টি golfing জন্য এবং <সমস্ত ভাষা> এ golfing জন্য টিপস মাধ্যমে পড়া আকর্ষণীয় হতে পারে।
কেভিন ক্রুইজসেন 15

1

সেড, 125

আউটপুট ফরম্যাট স্বাধীনতা নিয়ে আজকাল সংস্করণ:

-rস্কোরটিতে প্যারামিটারের সেড করার জন্য +1 অন্তর্ভুক্ত ।

s/(N|S)(E|W)/\L\2,\1 /g
s/N|S/,& /g
s/E|W/&, /g
s/N|E/A/gi
s/S|W/a/gi
p
:
s/(\S*),(\S*) (\S*),(\S*)/\1\3,\2\4/
t
s/Aa|aA//
t

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

আউটপুট নিম্নরূপ:

  • স্থানাঙ্ক উপাদানগুলি কমা দ্বারা পৃথক করা হয়
  • সমন্বয়গুলির প্রতিটি সেট ট্যাব-বিচ্ছিন্ন
  • চূড়ান্ত সমন্বয়টি একটি নতুন লাইনে রয়েছে
  • সমস্ত সংখ্যা ℤ-unary এ রয়েছে:
    • Aঅক্ষরের একটি স্ট্রিং + ve পূর্ণসংখ্যাকে উপস্থাপন করেlen(string)
    • aঅক্ষরের একটি স্ট্রিং -টি পূর্ণসংখ্যার প্রতিনিধিত্ব করে-len(string)
    • খালি স্ট্রিং প্রতিনিধিত্ব করে 0

উদাহরণ স্বরূপ:

  • , [0,0]
  • ,AA [0,2]
  • aaa, [-3,0]

জিএনইউ এক্সিকিউশন এক্সটেনশন , 147 সহ 4.2.2 সেড করুন

দ্য যুক্তিসম্মত আউটপুট ফরম্যাট সংস্করণ:

-rস্কোরটিতে প্যারামিটারের সেড করার জন্য +1 অন্তর্ভুক্ত ।

s/(N|S)(E|W)/\L\2 \1\n/g
s/N|S/0 &\n/g
s/E|W/& 0\n/g
s/N|E/1/gi
s/S|W/-1/gi
p
:
s/(\S+) (\S+)\n(\S+) (\S+)/\1+\3 \2+\4/
t
s/\S+/$[&]/g
s/^/echo /e

আউটপুট স্থান-বিচ্ছিন্ন স্থানাঙ্ক হিসাবে দেওয়া হয়, প্রতি লাইনে একটি। পেনাল্টিমেট এবং চূড়ান্ত স্থানাঙ্কগুলির মধ্যে একটি অতিরিক্ত নিউলাইন রয়েছে - এটি সমস্যাযুক্ত কিনা তা নিশ্চিত নয়।

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


0

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

একটি রেজেক্স বিভাজন করতে দিন; ম্যাচগুলির মধ্য দিয়ে লুপ করুন, অন্তর্বর্তী ফলাফলগুলি মুদ্রণ করুন এবং যোগ করুন:

preg_match_all("/[NS][EW]?|E|W/",$argn,$m);foreach($m[0]as$s){$x+=$p=strtr($s[-1],NEWS,1201)-1;$y+=$q=strtr($s[0],NEWS,2110)-1;echo"$p,$q
";}echo"$x,$y";

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন


0

সি (জিসিসি) , 173 বাইট

কোনও রেইজেক্স সমর্থন ছাড়াই কোনও ভাষায় এটি করা আকর্ষণীয়!

f(char*s){char*t="[%d,%d]\n";int x[4]={0},i;for(;*s;*x=x[1]=!printf(t,x[1],*x))for(i=-1;i<5;)if(*s=="S NW E"[++i]){x[i/3+2]+=x[i/3]=i%3-1;i+=2-i%3;s++;}printf(t,x[3],x[2]);}

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


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