দেয়ালে হাঁটা বন্ধ!


16

কিছু পাঠ্য-ভিত্তিক দুর্বৃত্ত-পছন্দ আপনাকে দেওয়ালে walkুকতে দেয় না এবং যদি আপনি চেষ্টা করেন তবে আপনাকে আপনার চালনাটি ফিরিয়ে দেবে। আপনি যখন খেলোয়াড়কে নিকটতম বৈধ পথে চালিত করতে পারেন তা কেন করবেন?

চ্যালেঞ্জ

ফাংশনটির একটি প্রোগ্রাম লিখুন যা কোনও দিকনির্দেশ এবং 3 দ্বারা 3 অক্ষরের গ্রিড দেওয়া হয়, প্লেয়ারের পদক্ষেপ নেওয়ার পরে একই গ্রিড আউটপুট দেয়।

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

9
#..
.@#
#.#

হয়ে

#.@
..#
#.#

ইনপুট

  • দিকটি 1 থেকে 9 পর্যন্ত একক অঙ্কের দ্বারা দেওয়া হয়, প্রতিটি 8 টি মূল দিকের সাথে মিল রেখে স্থির থাকে। এটি একটি কীপ্যাডের সংখ্যার তুলনামূলক অবস্থানগুলি থেকে উদ্ভূত:

    এনডাব্লু এন এনই
    ..। | /
    ... 7 8 9
    ডাব্লু- 4 5 6 -E
    ... 1 2 3
    ../ | \
    এসডাব্লু এস এস
    
    তবে, আপনি 789, 456, 123 এর পরিবর্তে 123, 456, 789 নম্বরগুলিও ব্যবহার করতে পারেন other অন্য কথায়, আপনি যদি পছন্দ করেন তবে আপনি উপরের এবং নীচের 2 টি সারি বা সংখ্যাগুলি অদলবদল করতে পারেন। এগুলি কেবলমাত্র দুটি গ্রহণযোগ্য সূচক সংমিশ্রণ।

  • 3 বাই 3 গ্রিডটিতে 3 টি স্বতন্ত্র, প্রিন্টযোগ্য এএসসিআইআই অক্ষর থাকবে যা হাঁটার যোগ্য মেঝে, দেয়াল এবং প্লেয়ারকে উপস্থাপন করে। (পরীক্ষার ক্ষেত্রে, .মেঝে জন্য ব্যবহৃত হয়, #এর দেয়াল @হয় এবং খেলোয়াড়)

  • আপনার প্রোগ্রামটি কোন অক্ষর ব্যবহার করে তা আপনি চয়ন করতে পারেন তবে আপনাকে অবশ্যই তাদের উত্তরে সেগুলি লিখতে হবে এবং সেগুলি অবশ্যই একাধিক পরীক্ষার জন্য সামঞ্জস্যপূর্ণ হতে হবে।
  • চরিত্রটির প্রতিনিধিত্বকারী চরিত্রটি সর্বদা 3 বাই 3 গ্রিডের মাঝখানে থাকবে এবং দিকটি সর্বদা 1 এবং 9 এর মধ্যে থাকবে (সহ)
  • আপনি যে কোনও ক্রমে ইনপুট নিতে পারেন
  • 3 বাই 3 গ্রিডটি চার্ট অ্যারে, একটি স্ট্রিং অ্যারে, 9 দৈর্ঘ্যের স্ট্রিং বা অন্য কোনও যুক্তিসঙ্গত বিকল্প হিসাবে ইনপুট হতে পারে।

আউটপুট

  • কোনও ফাংশন থেকে ফিরে আসুন বা স্টডআউট বা নিকটতম বিকল্পে আউটপুট দিন
  • ট্রেলিং স্পেস এবং নিউলাইনগুলি অনুমোদিত
  • আপনাকে অবশ্যই ইনপুট হিসাবে একই অক্ষর উপস্থাপনা ব্যবহার করতে হবে
  • ইনপুটগুলির জন্য অনুমোদিত একই ফর্ম্যাটগুলি আউটপুটগুলির জন্য অনুমোদিত

প্লেয়ার কীভাবে চলাফেরা করে

যদি নির্দিষ্ট দিকটি কোনও দেয়াল দ্বারা অবরুদ্ধ থাকে (উদাহরণস্বরূপ যদি উপরের উদাহরণটির দিকনির্দেশ 6 থাকে) তবে দুটি নিকটতম দিকটি দেখুন:

  • যদি একটি (এবং শুধুমাত্র একটি) দিক বিনামূল্যে থাকে তবে প্লেয়ারটিকে সেই দিকে চালিত করুন।
  • কোনও নির্দেশিকা নিখরচায় না হলে পরবর্তী নিকটবর্তী 2 টি দিক (দিক 5 বাদে) দেখুন। যদি আপনি চারপাশে সমস্তভাবে আবদ্ধ হয়ে থাকেন এবং কোনও উন্মুক্ত দিক (দেয়াল দ্বারা বেষ্টিত প্লেয়ার) না পেয়ে থাকেন তবে প্লেয়ারটিকে সরাবেন না
  • উভয় দিকনির্দেশ যদি খোলা থাকে তবে এলোমেলোভাবে স্থানান্তরিত করতে একটি বাছুন (যদিও অভিন্নভাবে নয়)।

প্রদত্ত দিকনির্দেশটি যদি 5 হয় তবে প্লেয়ারটি সরাবেন না

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

( #= প্রাচীর, .= তল, @= খেলোয়াড়)

ইনপুট:

9
# ..
। @ #
#। #

আউটপুট:

#। @
.. #
#। #


ইনপুট:

3
# ..
। @ #
#। #

আউটপুট:

# ..
.. #
# @ #


ইনপুট:

7
##।
# @ #
.. #

আউটপুট:

## @ ##।
#। # বা #। #
.. # @। #


ইনপুট:

5
...
। @।
...

আউটপুট:

...
। @।
...


ইনপুট:

2
###
# @ #
###

আউটপুট:

###
# @ #
###

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


ব্যবহার করছেন না yuhjklbn? চেরা।
R

এছাড়াও, আমি "বিকল্প দিক বাছাই করুন" অংশটি ততটা পছন্দ করি না। এটি চ্যালেঞ্জের অন্য অংশের চেয়ে আলাদা, যা "নির্দিষ্ট দিক এবং আউটপুটটিতে প্লেয়ারকে সরিয়ে দেয়"। যদিও এটি কেবল ব্যক্তিগত পছন্দ।
R

1
এই অংশটি বিভ্রান্তিকর: "যদি কোনও দিকনির্দেশ মুক্ত না হয় তবে পরবর্তী নিকটবর্তী 2 টি দিকটি দেখুন" "
ফাঁস নুন

1
আমরা কি প্রতিটি উপাদানের জন্য ASCII অক্ষরের পরিবর্তে একটি সংখ্যা নির্ধারণ করতে পারি, তারপরে ইনপুটটিকে 2-মাত্রিক তালিকা হিসাবে নিতে পারি? না তারা স্ট্রিং হতে হবে?
স্কট মিলনার

2
আমি কি 123;456;789পরিবর্তে দিকনির্দেশগুলি ব্যবহার করতে পারি 789;456;123?
ফাঁস নুন

উত্তর:


2

পাইথ - 73 70 বাইট

Kmsd"78963214"DPGJXXYt@K+xKQG\@4\.R?q/J\#/Y\#Jk=YwV5=GflTmPd(N_N)IGOGB

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

ইনপুট দুটি লাইন নিয়ে গঠিত:

1 ম লাইন: সরানোর দিক

দ্বিতীয় লাইন: বোর্ড (123456789 অবস্থান, 123 শীর্ষ সারিতে রয়েছে)


3

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

a=>b=>a[(a[4]=0)+--b]?(A=(c,d)=>c==b|(e=a[c])-(f=a[d])|!e?(a[c-b?(e?e<f:new Date&1)?c:d:4]=2,a):A(+g[c],+h[d]))(+(g="3016X2785")[b],+(h="1250X8367")[b]):(a[b]=2,a)

মন্তব্য

এই ফাংশনটি একটি বিশেষ ইনপুট ফর্ম্যাট ব্যবহার করে। প্রথম ইনপুট (পূর্ণসংখ্যার একটি অ্যারে 0জন্য floor, 1জন্য wallএবং 2জন্য player) মানচিত্রে উপস্থাপন করে। দ্বিতীয় ইনপুটটি হ'ল (উল্টানো) দিক: 1উত্তর-পশ্চিম, 2উত্তর, 3উত্তর-পূর্ব,4 ইনপুট সিনট্যাক্স সংবাহন মাধ্যমে দেওয়া উচিত পশ্চিমে ইত্যাদি আছে ( Z(a)(b))।

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

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

Z=
a=>b=>a[(a[4]=0)+--b]?(A=(c,d)=>c==b|(e=a[c])-(f=a[d])|!e?(a[c-b?(e?e<f:new Date&1)?c:d:4]=2,a):A(+g[c],+h[d]))(+(g="3016X2785")[b],+(h="1250X8367")[b]):(a[b]=2,a)

testcases = [
    [[1,0,0,0,2,1,1,0,1], 3],
    [[1,0,0,0,2,1,1,0,1], 9],
    [[1,1,0,1,2,1,0,0,1], 1],
    [[0,0,0,0,2,0,0,0,0], 5],
    [[1,1,1,1,2,1,1,1,1], 2]
]
for (test of testcases) {
    console.log(Z(test[0])(test[1]))
}


1

পাইথন 3, 120 104 153 176 175 বাইট

def f(n,l):
 n-=1
 if n!=4and'.'in l:l[sorted(enumerate(l),key=lambda x:abs(x[0]%3-n%3+(x[0]//3-n//3)*1j)-ord(x[1])-__import__('random').random()/9)[1][0]],l[4]='@.'
 return l

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

এই পদ্ধতিটি '।', '#' এবং '@' এর দিকনির্দেশ এবং তালিকা পান। সূচকগুলি 1 থেকে 9 দিয়ে শুরু হয় (তালিকার 0 থেকে 8 সহ)। সুতরাং এটি ফর্ম আছে

123 
456
789 

পদ্ধতি নতুন পজিশন সহ নতুন তালিকা ফিরিয়ে দেয়।

এই লাইন

sorted(enumerate(l),key=lambda x:abs(x[0]%3-n%3+(x[0]//3-n//3)*1j)-ord(x[1])-__import__('random').random()/9)

এই ধরণের একটি তালিকা ফেরত দেয়:

>>>n=7
>>> l=['#','#','#','.','@','#','.','#','.']
>>> sorted(enumerate(l),key=lambda x:abs(x[0]%3-n%3+(x[0]//3-n//3)*1j)-ord(x[1])-__import__('random').random()/9)
[(4, '@'), (8, '.'), (6, '.'), (3, '.'), (7, '#'), (5, '#'), (1, '#'), (0, '#'), (2, '#')]

আমরা মুক্ত পয়েন্ট এবং এলোমেলো যোগ করার জন্য দূরত্ব গণনা করি। কারণ ord('#') <= ord('.') - 8 and ord('.') + 8 <= ord('@')আমরা বলতে পারি যে নিকটতম '।' n = 7 এর জন্য (তালিকার সূচক) এর 8 টি সূচক রয়েছে।

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

উদাহরণ:

>>> f(9, ['#','.','.','.','@','#','#','.','#'])
['#', '.', '.', '.', '.', '#', '#', '@', '#']
>>> f(3, ['#','.','.','.','@','#','#','.','#'])
['#', '.', '@', '.', '.', '#', '#', '.', '#']
>>> f(5, ['.','.','#','.','@','.','#','.','#'])
['.', '.', '#', '.', '@', '.', '#', '.', '#']
>>> f(7, ['#','#','#','#','@','#','#','#','#'])
['#', '#', '#', '#', '@', '#', '#', '#', '#']
>>> f(7, ['#','.','.','.','@','#','#','.','#'])
['#', '.', '.', '@', '.', '#', '#', '.', '#'] or ['#', '.', '.', '.', '.', '#', '#', '@', '#']

1) এটি পরীক্ষার ক্ষেত্রে কার্যকর হয় না যেখানে প্লেয়ারটি যে দিকে যেতে চায় সে দখল করে এবং সঠিক অবস্থানটি প্রথম নয় ','(যা পরীক্ষার ক্ষেত্রে 2, 3 এবং 5 এর ক্ষেত্রে হয়)। 2) আপনার আই / ও ফর্ম্যাটটি প্রশ্নের মতো মনে হচ্ছে না। দয়া করে আপনার আই / ও ফর্ম্যাটটি উল্লেখ করুন।
লুক

আপনার উদাহরণটি f(9, ...কাজ করে না - এটি চরিত্রটি 2 এ রাখে তবে 9 এর নিকটতম অবস্থানগুলি 6 এবং 8 এর মধ্যে রয়েছে, সুতরাং এর মধ্যে একটির এলোমেলোভাবে বাছাই করা উচিত (আপনার কোডটিতে কোনও এলোমেলোতা নেই)। ততক্ষণে এটি পরবর্তী নিকটতম সন্ধানের ঘেরের কাছাকাছি যেতে হবে, তাই f(9,list("####@#.##"))অক্ষরটি কেবলমাত্র সম্ভাব্য স্পটে (এখানে 7) স্থাপন করা উচিত।
জোনাথন অ্যালান

আমার জন্য ভুলগুলি নির্দেশ করার জন্য ধন্যবাদ, সংবাদটি হ'ল কোড l [4], l [l.index ('।')] = '। @' এবং l [l.index ('।')], L [4 ] = '@'। ভিন্ন
Малышев

@ জোনাথন অ্যালান, প্রথমে আমি নিয়মগুলি বেশ বুঝতে পারি নি। আমি আশা করি আমি কোডটি সঠিকভাবে সংশোধন করতে পারতাম।
40 шевышев

এখনও ঠিক নেই, না। 1. উদাহরণটি f(9, ...ফিরে আসবে list("#....##@#")(কারণ 8টি নিখরচায় এবং 9 এর পরে)। ২. "যেমন দু'দিকই খোলা থাকে, এলোমেলোভাবে স্থানান্তরিত করতে একটি বেছে নিন" উল্লেখ করা হয়েছে f(9,list("####@.#.#"))এমন কিছু list("####..#@#")( list("####.@#.#")যেমন সর্বদা নয় ) ফিরে আসার কিছুটা সুযোগ থাকা উচিত ।
জনাথন অ্যালান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.