প্ল্যাটফর্ম সরান!


9

চ্যালেঞ্জ

স্ট্রিং (নিউলাইনস থাকতে পারে), বা একটি দুটি মাত্রিক অ্যারে এবং ধনাত্মক পূর্ণসংখ্যা দেওয়া হলে প্রাথমিক অবস্থানের পরে nপ্ল্যাটফর্মগুলির অবস্থানটি nপরিবর্তিত হয়।


U, D, R, L প্ল্যাটফর্ম হয়।

^, v, >, < প্ল্যাটফর্মের দিক পরিবর্তন করে এমন তীরগুলি are

U, D, R, Lযথাক্রমে উপরে, নীচে, ডান এবং বাম দিকে সরান। যখন একটি তীর প্ল্যাটফর্মের সামনে থাকে, তখন এটি দিক পরিবর্তন করে।

প্ল্যাটফর্মকে প্রভাবিত করে:

R<

D
^

v
U

>L

>L
 <

(উপরের তীর শীর্ষে প্রভাব ফেলবে Lতবে নীচের তীরটি প্রভাব ফেলবে না L)

প্রভাব ফেলবে না:

 <
R

>
 L

v
 U

D
 ^

<R

( Rঠিক চলছে, সুতরাং <প্রভাবিত করবে না R)


উদাহরণস্বরূপ, যদি এটি স্ট্রিং ছিল:

>R   <

প্ল্যাটফর্মটি Rডানদিকে চলে যাবে যতক্ষণ না এটি তীরটি প্রায় স্পর্শ করে:

>   R<

পরে, এটি দিক পরিবর্তন করবে এবং বাম দিকে যেতে শুরু করবে:

>  R <

(যদিও এখন এটি চলে যাচ্ছে, চিঠিটি পরিবর্তন হবে না))

কিছু ক্ষেত্রে রয়েছে যখন প্ল্যাটফর্মটি সরবে না, যেমন

>R<

অথবা

v
U
^

শেষ উদাহরণ:

v   >
D    Rv
   ^U
^    <

এক বার পর,

v   >
    U v
D  ^ R
^    <

এক বার পর,

v   >
D    Uv
   ^R
^    <

এবং আরও একটি পালা:

v   >
    R v
D  ^ U
^    <

আপনি ধরে নিতে পারেন প্ল্যাটফর্মগুলি, nমোড় পরে , ওভারল্যাপ হবে না, যে প্ল্যাটফর্মগুলি সীমা ছাড়বে না এবং প্ল্যাটফর্মটি একই ধরণের দিকে তিরস্কার করে এমন একটি তীর স্পর্শ করবে না।


পরীক্ষার কেস

Input:
">R   <", 4
Output:
">  R <"

Input:
">R   <", 6
Output:
">R   <"

Input:
">R<", 29
Output:
">R<"

Input:
"v
 U
 ^", 5
Output:
"v
 U
 ^"

Input:
"v

 D
 ^", 1
Output:
"v
 D

 ^"

Input:
"v

 D
 ^", 4
Output:
"v

 D
 ^"

Input:
"v   >
 D    Rv
    ^U
 ^    < ", 2
Output:
"v   >
 D    Uv
    ^R
 ^    <

Input:
">RL<", 3
Output:
">LR<"

Input:
">L  R<", 4
Output:
"> RL <"

Input:
"> RR<
 >L  R <", 6
Ouput:
">RR <
 > RL  <"

Input:
"R   <", 4
Output:
"  R <"

Input:
"R   <", 6
Ouput:
"R   <"

বিধি

  • এই , তাই বাইট জিতে সংক্ষিপ্ত উত্তর!
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

3
@ ক্লোসেভোটার্স: এই চ্যালেঞ্জ সম্পর্কে অস্পষ্ট কি?
লিকি নুন

এর উপর ভিত্তি করে একটি গৌণ প্রোগ্রামিং ভাষা করার সময়।
ড্যানথম্যান

এছাড়াও, যদি কোনও প্ল্যাটফর্ম গ্রিডের বাইরে চলে যায় তবে কী হবে?
কোয়েলক্লেফ

@ কিউলক্লেফ আপনি ধরে নিতে পারেন প্ল্যাটফর্মগুলি ঘুরার পরে গ্রিডটি বন্ধ হবে না n
অ্যাক্রোলিথ

উত্তর:


2

সি #, 1245 বাইট

(i,n)=>{string q="RlherLHEfquDFQUd",D="><v^",H="Rlhe",E="LrHE",X="Dufq",Y="UdFQ",S="#v<>";Func<string,char,int>I=(v,L)=>v.IndexOf(L);Func<char,int,char>z=(y,m)=>q[I(q,y)+m*4];Func<string,char,bool>_=(s,F)=>s.Contains(F);var g=((i as char[][])??((string)i).Split('\n').Select(f=>f.ToCharArray())).ToList();int w=g[0].Length,h=g.Count,u;g=g.Select((r,o)=>r.Select((t,p)=>'R'==t&&w>p+1&&0<=(u=I(D,r[p+1]))?z(t,u):'L'==t&&0<=p-1&&0<=(u=I(D,r[p-1]))?z(t,-1+u):'D'==t&&h>o+1&&0<=(u=I(D,g[o+1][p]))?z(t,-2+u):'U'==t&&0<=o-1&&0<=(u=I(S,g[o-1][p]))?z(t,-u):t).ToArray()).ToList();for(var j=0;j<n;j++){bool L,R,T,B;g=g.Select((r,o)=>r.Select((t,p)=>_(D,t)?t:(R=0<=p-1)&&_(H,r[p-1])?w>p+1&&0<=(u=I(D,r[p+1]))?z(r[p-1],u):r[p-1]:(L=w>p+1)&&_(E,r[p+1])?0<=p-1&&0<=(u=I(D,r[p-1]))?z(r[p+1],-1+u):r[p+1]:(B=0<=o-1)&&_(X,g[o-1][p])?h>o+1&&0<=(u=I(D,g[o+1][p]))?z(g[o-1][p],-2+u):g[o-1][p]:(T=h>o+1)&&_(Y,g[o+1][p])?0<=o-1&&0<=(u=I(S,g[o-1][p]))?z(g[o+1][p],-u):g[o+1][p]:(L&&_(H,t)&&!_(D,r[p+1]))||(R&&_(E,t)&&!_(D,r[p-1]))||(B&&_(Y,t)&&!_(D,g[o-1][p]))||(T&&_(X,t)&&!_(D,g[o+1][p]))?' ':t).ToArray()).ToList();}return string.Join("\n",g.Select(s=>new string(s))).ToUpper().Replace("H","U").Replace("E","D").Replace("F","R").Replace("Q","L").Replace("V","v");};

এটি প্রথমে সহজ বলে মনে হয়েছিল, তবে তারপরে আমি আরও কোড লিখতে থাকি। : ডি

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

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

// Casts to Func<object, int, string> so as to accept both string and char[][] input
(i, n) =>{
    // Shorten constants/functions
    string q = "RlherLHEfquDFQUd", D = "><v^", H = "Rlhe", E = "LrHE", X = "Dufq", Y = "UdFQ",S="#v<>";
    Func<string, char, int> I = (v, L) => v.IndexOf(L);
    Func<char, int, char> z = (y, m) => q[I(q,y) + m * 4]; // Updates the direction of the platform
    Func<string, char, bool> _ = (s, F) => s.Contains(F);

    // Convert either string or char[][] input into common format
    var g = ((i as char[][]) ?? ((string)i).Split('\n').Select(f => f.ToCharArray())).ToList();

    // Get board dimensions
    int w = g[0].Length,h = g.Count,u;

    // Update platforms to reflect the direction they're initially moving
    g = g.Select((r, o) => r.Select((t, p) =>
        'R' == t &&w>p+1&&0<=(u=I(D,r[p+1]))?z(t,u):
        'L' == t &&0<=p-1&&0<=(u= I(D, r[p-1]))?z(t,-1+u):
        'D' == t &&h>o+1&&0<=(u= I(D, g[o+1][p]))?z(t,-2+u):
        'U' == t &&0<=o-1&&0<=(u= I(S,g[o-1][p]))?z(t,-u):t
    ).ToArray()).ToList();

    // Go through each timestep
    for (var j=0;j<n;j++)
    {
        bool L,R,T,B;
        g = g.Select((r, o) => r.Select((t, p) => 
            // Don't change <>^v characters
            _(D,t) ? t :

            // Move platforms going right
            (R=0 <= p - 1) && _(H,r[p-1]) ? w > p+1 && 0<=(u= I(D, r[p+1])) ? z(r[p-1],u) : r[p - 1] :

            // Move platforms going left
            (L=w > p + 1) && _(E,r[p+1]) ? 0 <= p-1 && 0<=(u= I(D, r[p-1])) ? z(r[p+1],-1+u) : r[p + 1] :

            // Move platforms going down
            (B=0 <= o - 1) && _(X,g[o-1][p]) ? h > o+1 && 0<=(u= I(D, g[o+1][p])) ? z(g[o - 1][p],-2+u) : g[o-1][p] :

            // Move platforms going up
            (T=h > o + 1) && _(Y,g[o+1][p]) ? 0<=o-1&&0<=(u= I(S, g[o-1][p]))?z(g[o + 1][p],-u) :g[o+1][p]:

            // Erase platforms that moved
            (L&&_(H,t)&&!_(D,r[p+1]))||
            (R&&_(E,t)&&!_(D,r[p-1]))||
            (B&&_(Y,t)&&!_(D,g[o-1][p]))||
            (T&&_(X,t)&&!_(D,g[o+1][p]))
            ? ' ':

            // Maintain whatever character this was
            t
            ).ToArray()).ToList();
    }

    // Replace direction characters with platform label and join into string return value.
    return string.Join("\n",g.Select(s=>new string(s))).ToUpper().Replace("H", "U").Replace("E", "D").Replace("F", "R").Replace("Q", "L").Replace("V", "v");
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.