গোলকধাঁধাটি প্রাচীর-অনুসরণকারী সাপটি আটকে না দেওয়া পর্যন্ত পূর্ণ করুন


21

কোনও সাপকে কোনও ধাঁধা পূরণ করুন (এটি আটকা না হওয়া পর্যন্ত)।

সাপটি

সাপটি একটি পূর্ববর্তী বিন্দুতে শুরু হয়, ইস্ট নির্দেশ করে । এটা সবসময় একটি প্রাচীর বা তার শরীরের একটি অংশ অবিলম্বে না থাকার চলে আসে , LEFT তার মাথা ( "এর বাঁদিকের নিয়ম প্রাচীর অনুগামী "), যতক্ষণ না এটি আটকে পায় কারণ এটির মাথার চারপাশে চারটি দিকনির্দেশ দখল করছে। (দ্রষ্টব্য: একটি আটকে থাকা সাপ সম্ভবত সমস্ত পৌঁছনীয় স্থান পূরণ করতে পারে না, তবে এটি লক্ষ্য নয়!)

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি গোলকধাঁধাটিকে 2D পাঠ্য আকারে ইনপুট হিসাবে গ্রহণ করে:

  • ইনপুটটি যেকোন যুক্তিসঙ্গত ফর্ম্যাটে থাকতে পারে: যেমন স্ট্রিংগুলির তালিকা, নতুন লাইনের সাথে একটি একক স্ট্রিং a
  • গোলকধাঁধায় দেয়াল (" #"), খালি জায়গা (" ") এবং ঠিক একটি সূচনা পয়েন্ট (" o") রয়েছে।
  • আপনি চয়ন করতে পারেন

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

  • আপনি ধরে নিতে পারেন যে পাঠ্যটিতে অন্য কোনও অক্ষর উপস্থিত নেই (আপনার ইনপুটগুলির যদি প্রয়োজন হয় তবে নতুন লাইনগুলি বাদে)।
  • আপনি ধরে নিতে পারেন যে সমস্ত লাইন একই দৈর্ঘ্য।

এবং সাপটি আটকে যাওয়ার মুহুর্তে একটি স্ন্যাপশট সহ আউটপুট হিসাবে "ভরাট ধাঁধা" মুদ্রণ / ফেরত দেয় :

  • সাপের দেহটি অক্ষরের দ্বারা প্রতিনিধিত্ব করা >v<^হয় যেখানে এটির পরবর্তী অংশটি রয়েছে to
  • সাপের প্রারম্ভিক বিন্দু হয় তার শুরুতে দিক (" >" যদি তাৎক্ষণিকভাবে ঘুরতে না পারে তবে) বা একটি oঅক্ষর (ধারাবাহিক হওয়ার দরকার নেই ) is
  • সাপের শেষ বিন্দু একটি oচরিত্র

স্কোরিং

সাধারণ কোড গল্ফ: সংক্ষিপ্ততম কোড জিতেছে

উদাহরণ

in:
#################################
#                    o          #
#                               #
#     ##       ###       ##     #
#    ##     ##     ##     ##    #
#    ##     ##     ##     ##    #
#    ##      ##   ##      ##    #
#   ##       ##   ##       ##   #
#   ##         ###         ##   #
#    ##       #####       ##    #
#    ##       #####       ##    #
#    ##        ###        ##    #
#     ##                 ##     #
#                               #
#                               #
#################################

out:
#################################
#>>>>>>>>>>>>>>>>>>>v>>>>>>>>>>v#
#^>>>>>>>>>>>>>>>>>v>>>>>>>>>>vv#
#^^   ##>>>>>>v###o>>>>>v##   vv#
#^^  ##>^   ##>>>>^##   >v##  vv#
#^^  ##^    ##     ##    v##  vv#
#^^  ##^     ##   ##     v##  vv#
#^^ ##>^     ##   ##     >v## vv#
#^^ ##^<       ###       v<## vv#
#^^  ##^      #####      v##  vv#
#^^  ##^      #####      v##  vv#
#^^  ##^<      ###      v<##  vv#
#^^   ##^<<<<<<<<<<<<<<<<##   vv#
#^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<v#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################

অ্যানিমেটেড (চিত্রণ উদ্দেশ্যে):

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

সম্পাদনা করুন: নোট করুন, যখন সন্দেহ হয়, তখন সাপটি "বাম হাতটি" দেয়ালের উপরে রাখা উচিত, এটি কোণার অনুসরণ করে, 1-ব্লকের দূরে কোনও দেয়ালে লাফিয়ে না।

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

এটি আনার জন্য জোনাথন অ্যালান এবং উপরোক্ত ব্যাখ্যামূলক স্ন্যাপশটের জন্য ড্রাকো 18 ধন্যবাদ Thanks

অন্যান্য উদাহরণ

in:
####################
#               o# #  
#                ###
#                  #
#      ##          #
#                ###
####################

out:
####################
#>>>>>>>>>>>>>>vv# #
#^>>>>>>>>>>>>vvv###
#^^   v<<<o<<<<v>>v#
#^^<<<<##^<<<<<<v<<#
#^<<<<<<<<<<<<<<<###
####################
in:
####################
#         o    #####  
#              #####
#                  #
#                 ##
####################

out:
####################
#         >>>>v#####
#             v#####
#             >>>>o#
#                 ##
####################
in:
################
#o             #
#   ########## #
# #          # #
# #          # #
# #          # #
# #  #       # #
# #          # #
# #          # #
# #          # #
# ############ #
#              #
################

out:
################
#>>>>>>>>>>>>>v#
#>>v##########v#
#^#>>>>>>>>>v#v#
#^#>>>>>>>>vv#v#
#^#^>>>>>>vvv#v#
#^#^^#    vvv#v#
#^#^^o<<<<<vv#v#
#^#^^<<<<<<<v#v#
#^#^<<<<<<<<<#v#
#^############v#
#^<<<<<<<<<<<<<#
################

জিআইএফ উদাহরণস্বরূপ, এটি যখন প্যাটার্নটিতে প্রবেশ করে তখন কেন এটি খালি জায়গাগুলির অন্যান্য অংশগুলি পূরণ করতে পিছনে ফিরে আসবে না? বাম দিকে ওপরে, পরে বাম দিকে, নীচে এবং পরে প্রায় ফিরে ঘুরিয়ে দেওয়া সম্ভব ছিল, তবে সাপটি তার পরিবর্তে সরাসরি নীচে বেছে নিয়েছিল। সাপের সাথে যতটা সম্ভব শূন্যস্থান পূরণ করার লক্ষ্য রয়েছে বা কেবল "প্রাচীরের মুখোমুখি হওয়ার সময় ডানদিকে ঘুরুন এবং ডানদিকে দু'বার ঘুরিয়ে ফেলা হলে" কৌশল অনুসরণ করুন?
ম্যাজিক অক্টোপাস উরন

2
@ ম্যাজিক অ্যাক্টোপাস ইউরান আমি নিশ্চিত নই যে আপনি যে মুহূর্তে অস্পষ্টতা দেখছেন তা আমি বুঝতে পেরেছি। তবে, আপনার প্রশ্নের উত্তর দেওয়ার জন্য, লক্ষ্যটি যতটা সম্ভব স্থান পূরণ করা নয়। তবে, অ্যালগরিদম ("প্রাচীর অনুসারী") কেবল "একবার ডানদিকে ঘুরুন বা সম্ভব না হলে, দু'বার" নয়: সাপটি যদি তার বামে প্রাচীর ছাড়া নিজেকে খুঁজে পায় তবে তার পরিবর্তে বাম দিকে ঘুরতে হবে ("বামদিকে রেখে" হাত "দেয়ালে / নিজেই)
নিকোলা স্যাপ

(দুঃখিত আমি আপনার অ্যালগরিদম রুনডাউনটি ভুলভাবে পড়েছি)
নিকোলা সাপ

2
@ জোনাঃ সঠিক। একটি একক নির্জনবাদী পথ রয়েছে এবং এটি অনুকূল নয়। @ মান কালি: হ্যাঁ @ জোনাথনলান আমি অস্পষ্টতা দেখতে লড়াই করছি তবে তা কেবল আমারই হতে পারে। প্রাচীর-নীচের অ্যালগরিদমের আমার সংস্করণটি হ'ল: যদি আপনার বাম দিকে আর কোনও বাধা না থাকে তবে আপনার দিকটি রক্ষা করুন [প্রথমে মূল্যায়ন করা], যা ক্ষেত্রে বাম দিকে ঘুরছে বা আপনি কোনও প্রাচীরের সাথে আঘাত করছেন [ক্ষেত্রে দ্বিতীয়টি মূল্যায়ন] যার ক্ষেত্রে ডানদিকে ঘুরে সম্ভব হলে, বা খেলা শেষ।
নিকোলা সাপ

1
শেষের অবস্থাটি কেন এমন ছিল তা নির্ধারণ করার জন্য আমাকে জিআইএফটি বিচ্ছিন্ন করতে হয়েছিল। এটি চূড়ান্ত প্রদর্শিত ফ্রেম থেকে স্পষ্ট নয়, বরং রাজ্য থেকে ঠিক আগে: i.stack.imgur.com/kj67V.png আমি আশা করি যে মানুষকে সহায়তা করে।
ড্রাকো

উত্তর:


8

কাঠকয়লা , 94 68 বাইট

F²⊞υSW¬⁼§υ⁰§υ±¹⊞υS≔⪫υ¶θPθ…θ⌕θo≔⁰θW№KV «≧⁺⊖⌕E³§KV⁺θκ θ✳§rdluθ§>v<^θ»o

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

F²⊞υSW¬⁼§υ⁰§υ±¹⊞υS≔⪫υ¶θ

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

Pθ…θ⌕θo

কার্সারটি সরানো ছাড়াই ইনপুটটি প্রিন্ট করুন এবং তারপরে oআবার মুদ্রণ করুন , যাতে কার্সারটি তার নীচে শেষ হয়।

≔⁰θ

বর্তমান দিকটি সূচনা করুন।

W№KV «

এখনও কিছু দিক থেকে একটি মুক্ত জায়গা থাকা অবস্থায় পুনরাবৃত্তি করুন।

≧⁺⊖⌕E³§KV⁺θκ θ

সাপটি বাম দিকে ঘুরতে পারে বা ডান দিকে যেতে বাধ্য হয় কিনা তা গণনা করুন। কোডটি ≦⊖θW¬⁼§KVθ ≦⊕θএকই বাইট গণনার জন্য এটির জন্যও কাজ করে যদিও এটি 0ডান পরিবর্তে আপ হিসাবে বিবেচনা করে তাই বাকী কোডটি মানিয়ে নেওয়া দরকার।

✳§rdluθ§>v<^θ

উপযুক্ত দিকের উপযুক্ত শরীরের অক্ষর আউটপুট।

»o

মাথা পুনরুদ্ধার। এটি Poএমনভাবেও রচনা করা যেতে পারে যা প্রতিটি পাসওয়ার্ড পরিবর্তে লুপের মাধ্যমে কার্সার সরানো ছাড়াই মাথা মুদ্রণ করে (তবে এটি একই বাইট গণনার জন্য লুপকে স্পষ্টভাবে বন্ধ করতে দেয়)।


7

পাইথন 2 , 273 253 242 বাইট

-11 বাইট আর্বকে ধন্যবাদ

g=input()
d=0
t=lambda g,k=1:'\n'.join(map(''.join,zip(*g.split('\n')[::k])[::-k]))
h='o '
while 1:
 l,r=t(g,-1),t(g)
 if h in l:g=l;d-=1
 elif h in g:g=g.replace(h,'>v<^'[d%4]+'o')
 elif h in r:g=r;d+=1
 else:break
exec-d%4*'g=t(g);'
print g

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

এই স্ট্রিংটি অনুসন্ধান করে 'o 'এবং এটিকে পরিবর্তিত করে '[>v<^]o'যদি এটি ধাঁধাতে থাকে।

একই স্ট্রাইকটিও ঘোরানো গোলকধাঁধায় তৈরি করা হবে, যখন স্ট্রিংটি আর থাকবে না তখন ভরাট ধাঁধাটি মুদ্রণ করবে।

ফাংশনটি t=lambda g,k=1:'\n'.join(map(j,zip(*g.split('\n')[::k])[::-k]))গ্রিডটি ঘোরানোর জন্য ব্যবহৃত হয়


3

জেলি , 72 56 বাইট

œṣ€⁾o j€ṛị“v<^>”;”oʋ,
UZ$ṛ¡+ƭ€Ɱ3r5¤ç/€ḟ$Ḣß$ṛ¹?
,0ÇZU$ṛ¡/

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

একটি সম্পূর্ণ প্রোগ্রাম যা ইনপুটটিকে স্ট্রিংগুলির তালিকা হিসাবে গ্রহণ করে এবং চূড়ান্ত সাপের সাহায্যে স্ট্রিংগুলির একটি তালিকা প্রদান করে। নোট করুন টিআইও-র ফুটারটি একটি একক নিউলাইন পৃথক স্ট্রিংকে পছন্দসই ইনপুটটিতে রূপান্তর করে এবং শেষে নতুন লাইনের পুনরুদ্ধার করে; এটি কেবল সুবিধার জন্য।

@ রডের পাইথন 2 উত্তর দ্বারা ব্যবহৃত পদ্ধতি দ্বারা সমাধানটি কিছুটা অনুপ্রাণিত হয়েছে , যদিও বাস্তবায়নটি খুব আলাদা is


3

রুবি , 126 118 বাইট

-8 বাইটগুলি পুনরায় স্থাপনের পরে +=ম্যানুয়ালি অনুসন্ধান করার পরিবর্তে গালি দিয়ে সংরক্ষণ করা হয়েছে o

->s{d=[q=1,1+l=s=~/$/,-1,~l];i=s=~/o/;(s[i]=">v<^"[q];s[i+=d[q]]=?o)while q=[~-q%4,q,-~q%4].find{|e|s[i+d[e]]==' '};s}

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


3

টি-এসকিউএল 2008 ক্যোয়ারী, 373 371 366 বাইট

আমার একটি অগ্রাধিকারের তালিকা ছিল, সর্বদা বাম, সোজা, ডানদিকে। আমি সেই অগ্রাধিকারটি সর্বদা পিছনে, বাম, সোজা, ডানদিকে সরিয়ে নিয়েছি। পিছনে পিছলে যাওয়া সর্বদা অবরুদ্ধ থাকবে, তাই প্রথম স্লাইড বাদে অগ্রাধিকারটি এখনও একই। প্রথমে সাপটিকে নীচে নামিয়ে দিয়ে (সি = 4), পিছনে সরে যাওয়ার সময় এটি পিছলে যাওয়ার চেষ্টা করে। এই ছোট্ট স্টান্টটি আমাকে 2 বাইট বাঁচিয়েছে। কারণ আমার 1 - c -c% 4 এ যোগ করার দরকার ছিল না।

আমি এটি পঠনযোগ্য করার জন্য 2 লাইন বিরতি sোকালাম

DECLARE @ varchar(8000)=
'################
#o             #
#   ########## #
# #          # #
# #          # #
# #          # #
# #  #       # #
# #          # #
# #          # #
# #          # #
# ############ #
#              #
################';

WITH s as(SELECT 0i,4c,@ m 
UNION ALL
SELECT~-i,x,stuff(stuff(m,~-a+x/3*2+(x-3)%2*s,1,'o')
,a,1,char(59+x+~x%2*11*~x))FROM(SELECT
charindex(' ',replicate(stuff(substring(m,~-a,3),2,1,substring(m,a+~s,1))+
substring(m,a-~s,1)+'~',2),-~-~c%4)%5x,*FROM(SELECT*,charindex('o',m)a,charindex('
',M)S FROM S)Q)L
WHERE x>0)SELECT top 1m FROM s
ORDER BY i
OPTION(MAXRECURSION 0)

এই অনলাইনটি কার্যকর করতে আমাকে কিছুটা সামান্য সামঞ্জস্য করতে হয়েছিল, পোস্ট সংস্করণটি এমএস-এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে চালিত হয়।

এমএস-এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে মৃত্যুর আগে Ctrl-T পুশ করুন, এটি ফলাফল হিসাবে পাঠ্য হিসাবে দেখাবে।

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


2
এটি কীভাবে কাজ করে তা সম্পর্কে আমার কোনও উল্টাপাল্টা ধারণা নেই তবে আমি এটি যাচাই করতে পারি। আসাধারণ কাজ!
ব্র্যাডিসি

@ ব্র্যাডসি নিশ্চিত এবং প্রশংসা করার জন্য ধন্যবাদ। এসকিএল সমাধানগুলি আজকাল খুব বেশি ভালবাসা পায় না।
t-clausen.dk

1

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

import sys
X=0,1,0,-1
F,*Y=*X,0
L=3
g=[*map(list,sys.stdin.read().split("\n"))]
e=enumerate
r,c=[[r,c]for r,R in e(g)for c,C in e(R)if"o"==C][0]
while 1:
	if" "==g[r+X[L]][c+Y[L]]:F,L=L,~-L%4
	elif" "<g[r+X[F]][c+Y[F]]:
		if" "<g[r-X[L]][c-Y[L]]:g[r][c]="o";break
		L,F=F,-~F%4
	g[r][c]=">v<^"[F];r,c=r+X[F],c+Y[F]
for r in g:print("".join(r))

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

-11 বাইটস ধন্যবাদ আরবো
-4 বাইটসকে ধন্যবাদ জোনাথন ফ্রেঞ্চকে


আপনি গলফ initialisation করতে পারেন X, Yএবং Fথেকে X=0,1,0,-1;F,*Y=*X,0যদি আমি ভুল না। এছাড়াও, import*সাশ্রয়ের চেয়ে ব্যয় আপনার আরও বেশি বাইট করে।
আরবো

@ আরবো ওহ, আমি ভেবেছিলাম এটি কিছু লোককে সংরক্ষণ করছে। এছাড়াও এটি বেশ চালাক, ধন্যবাদ!
হাইপারনিউটারিনো

আমি মনে করি আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন *g,=map(...)। এবং sys.stdin.readlines()সম্ভবত কাজ করে ?
আন্দ্রেস ডেক

1
বিকল্পভাবে, আপনি সম্ভবত একক-লাইন ইনপুট ধরে এবং ব্যবহার করে কয়েকটি বাইট সংরক্ষণ করতে পারেন input()
আন্দ্রেস ডেক

1
if C=="o"~> if"o"==C, if g[r+X[L]][c+Y[L]]==" ", elif g[r+X[F]][c+Y[F]]>" ", if g[r-X[L]][c-Y[L]]>" "তদনুসারে।
জোনাথন ফ্রেচ

1

05AB1E , 54 52 বাইট tes

[S¶¡øí3FDíø})J€»¼D¾èU¼.Δ.¼„o ©å}DÄiXqë®">^<v"¾è'o«.;

I / O উভয়ই একক মাল্টি-লাইন স্ট্রিং হিসাবে।

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

ব্যাখ্যা:

[                      # Start an infinite loop:
 S                     #  Split the multi-line string into a list of characters
                       #  (which will use the implicit input in the first iteration)
  ¶¡                   #  Then split by newlines
    øí                 #  Rotate the matrix once clockwise
      3F               #  Loop 3 times:
        D              #   Create a copy of the matrix
         íø            #   And rotate this copy once counterclockwise
       })              #  After the loop: wrap all four matrices into a list
 J                     #  Join each inner-most character-list to string-lines again
  €»                   #  And join each inner list of lines by newlines again
    ¼                  #  Increase variable `c` by 1 (variable `c` is 0 by default)
     D¾<è              #  Index the updated variable `c` in a copy of the list of matrices
                       #  (note that indexing wraps around in 05AB1E)
         U             #  Pop and store it in variable `X`
    ¼                  #  Then increase variable `c` again
                     #  Find the first multi-line string in the list which is truthy for:
                     #   Decrease variable `c` by 1 first
        o             #   Push string "o "
           ©           #   Store this string in variable `®` (without popping)
            å          #   Check if the current multi-line string contains this "o "
    }D                 #  Duplicate the result (results in -1 if none were truthy/found)
      Äi               #  If no result was found:
        X              #   Push variable `X`
         q             #   And stop the program, after which this multi-line string of
                       #   variable `X` is output implicitly as result
       ë               #  Else:
         ">^<v"¾è      #   Get the `c`'th character in string ">^<v"
                       #   (note that indexing wraps around in 05AB1E)
                 'o«  '#   Append a trailing "o" to this character
        ®           .; #   And replace the first variable `®` ("o ") in the 
                       #   multi-line string with this

0

পাইথ , 161 বাইট

J.zK[Z1Z_1)=Y+tKZVlJFTl@JNIq@@JNT\oA[NT;=N3=TZ#Iq@@J+G@KN+H@YNd=TN=N%tN4.?In@@J+G@KT+H@YTdIn@@J-G@KN-H@YNd XJGX@JGH\oB=NT=T%hT4)) XJGX@JGH@">v<^"TA(+G@KT+H@YT;jJ

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

হাইপারনিউটারিনোর পাইথন 3 সমাধানের বন্দর । এখন আমি এটিটি সম্পন্ন করেছি, আমি ভাবছিলাম এর পরিবর্তে রডের পাইথন 2 সমাধানটি আমার পোর্ট করা উচিত ছিল, তবে আমি ইতিমধ্যে এই বিষয়ে অনেক বেশি সময় ব্যয় করেছি।

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