গোলকধাঁধা হাঁটা


15

অথবা হতে পারে এটি সত্যই গোলকধাঁধা নয়, তবে এখনও।

নিয়মাবলী:

  1. ইনপুট , একটি দুই লাইনের স্ট্রিং গঠিত *, 1, xএবং X। সেই স্ট্রিংটি চলার মতো একটি গোলকধাঁধা। রেখাগুলির সমান দৈর্ঘ্য রয়েছে

    আপনি ,ইনপুটটিকে স্ট্রিং হিসাবে (কমা) বা এই দুটি লাইনের মধ্যে কোনও সুবিধাজনক বিভাজক হিসাবে নিতে পারেন । অথবা আপনি উভয় লাইন আপনার ফাংশনে পৃথক যুক্তি হিসাবে নিতে পারে।

  2. আউটপুট হ'ল স্ট্রিং থেকে বেরিয়ে আসার জন্য আপনাকে যে পদক্ষেপ নিতে হবে (শেষ পদক্ষেপটি সেই পদক্ষেপ যা আপনাকে স্ট্রিং থেকে সরিয়ে দেয়)।

  3. প্রথম চিহ্নের আগে আপনি উপরের বাম কোণে (উচ্চতর লাইন) শুরু করুন ।

  4. প্রতিটি পদক্ষেপের জন্য, আপনি একটি চিহ্ন দ্বারা এগিয়ে চলেছেন (নবম থেকে (এন + 1) তম অবস্থান )। তারপরে, আপনি যে চরিত্রের উপরে পদক্ষেপ নিয়েছেন তার উপর নির্ভর করে ফলাফলটি ভিন্ন। প্রতিটি চর যা করে তা এখানে:

    • *- কিছুই না। আপনি কেবল এটির উপর সাধারণভাবে পদক্ষেপ দিন।
    • x- একবার আপনি এটিতে পা রাখলে, লাইনটি স্যুইচ করুন, তবে শুরু থেকে একই অনুভূমিক দূরত্বে থাকুন। উদাহরণস্বরূপ, আপনি উচ্চতর লাইনের তৃতীয় অবস্থানে পা রেখেছেন এবং xএখানে একটি ছোট হাতের দেখা পেয়েছেন । তারপরে আপনি তাত্ক্ষণিকভাবে নিম্ন লাইনে চলে যান, তবে আবার তৃতীয় অবস্থানে at
    • X- লাইনটি পরিবর্তন করুন এবং পরবর্তী অবস্থানে যান। উদাহরণটি সেখানে একই, তবে আপনি তৃতীয় থেকে সামনের দিকেও যান (সুতরাং আপনি সামনের অবস্থানে দ্বিতীয় লাইনে রয়েছেন)।
    • 1 - শুধু আরও একটি অবস্থান দ্বারা এগিয়ে যান।

প্রতিটি চরিত্র একবার কাজ করে নিলে এটি একটি স্থান দিয়ে প্রতিস্থাপিত হয় এবং আর "কাজ করে না"।

উদাহরণ অনুসরণ করুন।

  1. ইনপুট :

    x
    *
    

    যেমনটি আগে বলা হয়েছিল, আপনি প্রথম লাইনের প্রথম প্রতীকের আগে শুরু করুন। প্রথম পদক্ষেপ আপনাকে চিঠির দিকে নিয়ে যায় xএবং এই চিঠিটি আপনাকে দ্বিতীয় লাইনে স্যুইচ করে। চিঠিটি xআর কাজ করে না x, তবে প্রতিস্থাপন করে *। এটি পরবর্তী উদাহরণগুলিতে আরও প্রাসঙ্গিক হবে। আপনি এখন নিম্ন লাইনের একটি নক্ষত্রের উপরে আছেন এবং এটি আপনাকে কিছুই করেনি।

    দ্বিতীয় পদক্ষেপ আপনাকে এগিয়ে চলেছে এবং আপনি স্ট্রিং থেকে প্রস্থান করছেন, তাই গোলকধাঁধাটি সম্পন্ন হয়েছে এবং এটি 2 পদক্ষেপ নিয়েছে।

    আউটপুট 2

  2. ইনপুট :

    xX*
    x1*
    

    প্রথম পদক্ষেপ : আপনি এগিয়ে যান x, যা আপনাকে xনিম্ন লাইনের দিকে নিয়ে যায়। এখানে নিয়ম আসে যা বলে যে ব্যবহৃত চরিত্রটি নক্ষত্রের সাথে প্রতিস্থাপিত হয়েছে। তারপরে আপনি প্রথম লাইনে ফিরে যান, তবে এটি আর xনেই, যেহেতু এটি ব্যবহৃত হয়েছে এবং একটি তারকা হিসাবে পরিণত হয়েছে। সুতরাং আপনি এই তারকাটিতে নিরাপদে সরে যান এবং পদক্ষেপটি সম্পন্ন হয়েছে (আপনি এখন প্রথম লাইনের প্রথম অবস্থানে আছেন)।

    ২ য় পদক্ষেপ : আপনি এগিয়ে যান X, এটি আপনাকে নিম্ন লাইনে ঠেলে দেয় এবং তারপরে আপনাকে এগিয়ে দেয়। আপনি এখন দ্বিতীয় পংক্তির তৃতীয় অবস্থানে রয়েছেন (তারকা), দ্বিতীয় অবস্থানে কখনও আসেনি (যার মধ্যে রয়েছে 1)।

    তৃতীয় পদক্ষেপ : আপনি স্ট্রিংটি প্রস্থান করে এগিয়ে চলেছেন।

    আউটপুট : 3

পরীক্ষার কেস:

  1. ইনপুট:

    *1*
    xxx
    

    আউটপুট: 3। (কারণ 1আপনাকে তৃতীয় অবস্থানে ঝাঁপিয়ে তোলে)। সেখানে আপনি কখনও দ্বিতীয় লাইনে যান না, তবে এটির জন্য ইনপুটটির কিছু অংশ প্রয়োজন।

  2. ইনপুট:

    *X*1*x
    x*1xx*
    

    আউটপুট: 4

  3. ইনপুট:

    1x1x
    ***X
    

    আউটপুট: 3

  4. ইনপুট:

    1*x1xxx1*x
    x*x1*11X1x
    

    আউটপুট: 6

  5. ইনপুট:

    xXXXxxx111*
    **xxx11*xxx
    

    আউটপুট: 6


একটি খালি স্ট্রিং একটি বৈধ ইনপুট হওয়া উচিত নয়, কারণ এটি দুটি লাইন স্ট্রিং নয়
edc65

@ এডিসি হা হা, আমি নিজের সাথে বিরোধিতা করছি। হ্যাঁ, সত্যিই।
নিকেল

"\n\n"একটি দুটি লাইনের স্ট্রিং ...
শুক্রবার

@ ফেয়ারসাম তখন আমি মনে করি আউটপুটটি হওয়া উচিত 1, যেমন আপনি প্রথম লাইনের আগে শুরু করেছিলেন, তারপরে আপনি এক ধাপ এগিয়ে যান, এবং তারপরে আপনি গোলকধাঁধাটি শেষ করেন ...
অমিত গোল্ড

উত্তর:


5

শামুক, 34 বাইট

A^
\1r|\xud|\Xaa7},(\*|\xud=\x)r},

সম্প্রসারিত:

{
    {
        \1 r |
        \x ud |
        \X aa7
    },
    (\* | \x ud =\x)
    r
},

N পদক্ষেপ নেয় এমন পাথের জন্য, প্রোগ্রামটি 0 টি পদক্ষেপ, 1 পদক্ষেপ, ..., এন - 1 পদক্ষেপের প্রতিটি ট্র্যাভারসালের জন্য একটি সফল মিল খুঁজে পায়।


3

হাস্কেল, 68 66 65 বাইট

(a:b)#l@(c:d)|a<'+'=1+b#d|a>'w'=l#('*':b)|a>'W'=d#b|1<2=b#d
_#_=1

ফাংশন #দুটি পংক্তি পৃথক পরামিতি হিসাবে গ্রহণ করে। ব্যবহারের উদাহরণ: "1x1x" # "***X"-> 3

*ছাড়ার জন্য আমরা কেবল তারার আরও 1 টি গুণতে হবে plus

(a:b)#l@(c:d)             -- bind: a -> first char of first line
                                   b -> rest of first line
                                   l -> whole second line
                                   c -> first char of second line (never used)
                                   d -> rest of second line
   |a < '+' = 1+b#d       -- stepped on a *, so add 1 and go on
   |a > 'w' = l#('*':b)   -- x switches lines and replaces the x with *
   |a > 'W' = d#b         -- X switch lines and go on
   |1<2     = b#d         -- the rest (-> 1) simply walks forward
_#_=1                     -- base case: the empty string counts 1 for leaving

সম্পাদনা করুন: @ ফিয়ারসাম একটি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!


আপনি সম্ভবত একটি ওয়ার্কিং ডেমো সরবরাহ করতে পারেন ( আইডোন.কম এ এটি সুবিধাজনক হবে), আমি হাস্কেল প্রোগ্রামার নই তবে এটির সাথে খেলতে চাই।
নিকেল


আপনি a>'a'পরিবর্তে উদাহরণস্বরূপ ব্যবহার করতে পারেন a=='x'?
ফেয়ারসাম

আমি এটি বুঝতে পারি নি, তবে প্রকৃতপক্ষে খালি স্ট্রিংটি অবৈধ ইনপুট (যেহেতু আমি নিজেকে বলেছি যে ইনপুটটি একটি দুটি-লাইনের স্ট্রিং), তাই আপনি এই প্রান্তের ক্ষেত্রেটির বৈধতা সরিয়ে ফেলতে পারেন :)
নিকেল

@ ফেয়ারসাম: হ্যাঁ, এটি কার্যকর হয়। ধন্যবাদ!
নিমি

2

জাভাস্ক্রিপ্ট (ES6), 119

l=>{z=-~l.search`
`,l=[...l+' '];for(n=p=0;(c=l[p%=2*z])>' ';p+=c>'X'?z:c>'1'?z+1:c>'0'?1:(++n,1))l[p]='*';return-~n}

কম গল্ফড

l=>{
  z=1+l.search`\n`;
  l=[...l+' '];
  for( n = p = 0; 
       (c=l[p%=2*z])>' '; 
       p += c>'X' ? z : c>'1' ? z+1 : c>'0'? 1 : (++n,1) )
    l[p] = '*';
  return 1+n
}

পরীক্ষা

f=l=>{z=-~l.search`
`,l=[...l+' '];for(n=p=0;(c=l[p%=2*z])>' ';p+=c>'X'?z:c>'1'?z+1:c>'0'?1:(++n,1))l[p]='*';return-~n}

[['x\n*',2]
,['xX*\nx1*',3]
,['*1*\nxxx',3]
,['*X*1*x\nx*1xx*',4]
,['1x1x\n***X',3]
,['1*x1xxx1*x\nx*x1*11X1x',6]
,['xXXXxxx111*\n**xxx11*xxx',6]
].forEach(t=>{
  var i=t[0],k=t[1],r=f(i) 
  console.log('Test result '+r+(r==k?' OK ':' KO (expected '+k+')')+'\n'+i)
})  
 


2

টিএসকিউএল (স্ক্লোসারভার 2012+), 276 বাইট

Golfed:

DECLARE @i VARCHAR(99)=
'xXXXxxx111*'+CHAR(13)+CHAR(10)+
'**xxx11*xxx'

,@t BIT=0,@c INT=1,@ INT=1WHILE @<LEN(@i)/2SELECT @t-=IIF(a like'[1*]'or'xx'=a+b,0,1),@c+=IIF(a='*'or'xx'=a+b,1,0),@+=IIF(a='x'and'x'>b,0,1)FROM(SELECT SUBSTRING(d,@t*c+@,1)a,SUBSTRING(d,(1-@t)*c+@,1)b FROM(SELECT LEN(@i)/2+1c,REPLACE(@i,'X','q'COLLATE thai_bin)d)x)x PRINT @c

Ungolfed:

DECLARE @i VARCHAR(99)=
'xXXXxxx111*'+CHAR(13)+CHAR(10)+
'**xxx11*xxx'

,@t BIT=0,@c INT=1,@ INT=1
WHILE @<LEN(@i)/2
  SELECT
    @t-=IIF(a like'[1*]'or'xx'=a+b,0,1),
    @c+=IIF(a='*'or'xx'=a+b,1,0),
    @ +=IIF(a='x'and'x'>b,0,1)
  FROM
    (
      SELECT
        SUBSTRING(d,@t*c+@,1)a,
        SUBSTRING(d,(1-@t)*c+@,1)b
      FROM 
        (SELECT LEN(@i)/2+1c,REPLACE(@i,'X','q'COLLATE thai_bin)d)x
    )x

PRINT @c

বেহালা


1

জাভাস্ক্রিপ্ট, 211 বাইট

আমি এমন একটি সংস্করণ তৈরি করার কথা ভাবছি যা প্রতিটি পৃষ্ঠায় একে অপরের পরে খেলানো দেখায়, একটি ওয়েবপৃষ্ঠায় প্রদর্শিত হয়।

(x,y)=>{t=0;l=0;n=1;while(t<x.length){c=(l?x:y);if(c[t]=='x'){l=!l;if(l){x=x.slice(0,t-2)+'*'+x.slice(t-1);}else{y=y.slice(0,t-2)+'*'+y.slice(t-1);}}if(c[t]=='X'){l=!l;t++;}if(c[t]=='1'){return n}

আরো বাইট চেয়ে আমি প্রতিস্থাপন আশা চাই ব্যবহৃত xসঙ্গে *কারণ জাতীয় এর অপরিবর্তনীয় Strings। উন্নত করার পরামর্শগুলি প্রশংসা করা হচ্ছে, বিশেষ করে প্রতিস্থাপন অংশের সাথে।

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