ক্র্যাশিং কারের অনুকরণ


9

ভূমিকা

আমার কিছু এএসসিআইআই গাড়ি রয়েছে যার বেগ এবং দিকনির্দেশ রয়েছে। তাদের গতি তাদের সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়। গাড়ি থাকলে <>তা থেমে গেছে। উদাহরণ স্বরূপ:

<>
1>
2>
3>

এক সেকেন্ড পরে, আমি পেতে

<>
 1>
  2>
   3>

দু'জনের পরে, আমি পেয়েছি

<>
  1>
    2>
      3>

দুটি গাড়ি খুব কাছাকাছি থাকলে এগুলি ক্র্যাশ করে।

1> <1
1> <2

এক সেকেন্ড পরে, এটি হয়ে যায়

 ###
 ##

যদি দুটি গাড়ি ছেদ করে তবে হ্যাশট্যাগ হয়ে ওঠে they

যদি একটি গাড়ি অন্যটির উপর 'হপ' করার জন্য যথেষ্ট দ্রুত হয়, তবে এটি ক্রাশের ফল দেয় না।

3><1   2><1   4><>

হয়ে

 <13>   ###     <>4>

কোনও গাড়ি যদি স্ক্রিনের বাইরে চলে যায় তবে তা অদৃশ্য হয়ে যায় (ক্রাশ না হলে)। ডান-স্ক্রিনে কোনও গাড়ি যাওয়ার কোনও উপায় নেই।

 <11>
<1  1>
1    1>
      1>

চ্যালেঞ্জ

প্রদত্ত গাড়ী পদার্থবিজ্ঞানের ভিত্তিতে, আপনাকে অবশ্যই একটি প্রোগ্রাম তৈরি করতে হবে যা ভবিষ্যতে এক সেকেন্ড সময়-পদক্ষেপ নিতে পারে। ইনপুটটি স্পেস সহ সর্বাধিক গতিবেগের গাড়ি (5 টির সাথে মিলবে (<[1-5]|[1-5]>|<>| )+) ge সিমুলেশনটি একটি লাইনে ঘটবে, তবে সেই লাইনের কোনও নির্দিষ্ট আকার নেই।

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

<> 1> 2> 3> 4> 5>
<>  1>  2>  3>  4>  5>

1><1   1> <1   1>  <1
 ##     ###     1><1

2><2   2> <2   2>  <2   2>   <2   2>    <2
<22>    ###      ##       ###       2><2

<22>  <1 3>   <2
    ###     ##

<><>     1><>     2><>     3><>     4><>     5><>
<><>      ###       ##       ###      <>4>     <> 5>

<><1 <2 <3 <4 <5
###<2<3<4<5

স্কোরিং

এই , তাই সর্বনিম্ন সংখ্যক বাইট জয়ের সাথে কোড!


1
<22> <1 3> <2 2 ### ## 2 সেখানে থাকা উচিত নয় - ফলাফলগুলি নিয়ে অন্যান্য সমস্যাও রয়েছে
ড্যানিয়েলইন্ডি

1
আমি পরীক্ষার কেসগুলিতে "<> <1 <2 <3 <4 <5" "### <2 <3 <4 <5" যুক্ত করার পরামর্শ দিই - কেসটি ক্রাশ হওয়ার সাথে সাথে এবং অন্যান্য গাড়িগুলিকে "স্পর্শ" করে তবে অংশ হয় নি এর মধ্যে
ড্যানিয়েলইন্ডি

@DanielIndie এটি একটি আকর্ষণীয়। আমি এগিয়ে গিয়ে চ্যালেঞ্জটি সম্পাদনা করেছি।
আর্নল্ড

<>বেগটি 0
l4m2

দুঃখিত! আমি যুক্ত করেছি যে সবকিছু লেখার পরে তাই আমি এটি ব্যাখ্যা করতে ভুলে গেছি।
নাথান উড

উত্তর:


3

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

s=>[...s.replace(/\S./g,([a,b],i)=>r[r[i+=+b?-b:~~a]=r[i]?C:a,++i]=r[i]?C:b,r=[],C='#')&&r].map((c,i)=>c?r[i-1]==C|r[i+1]==C?C:c:' ').join``

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

মন্তব্য

s =>                      // given the input string s
  [ ...s.replace(         // search in s ...
    /\S./g,               //   ... all substrings consisting of 2 non-whitespace characters
    ([a, b], i) =>        //   let a be the 1st character, b the 2nd one and i the position
      r[                  //   update r[]:
        r[i +=            //     apply the car velocity to i:
          +b ? -b         //       if b is a digit, then move b cells backwards
                  : ~~a   //       else: use a to move forwards (or don't move at all)
        ] = r[i] ? C : a, //     if r[i] is set, overwrite it with '#'; otherwise, insert a
        ++i               //     increment i for the 2nd character
      ] = r[i] ? C : b,   //     if r[i] is set, overwrite it with '#'; otherwise, insert b
      r = [],             //   initialize r[] to an empty array
      C = '#'             //   define C as the 'crash' character
  ) && r ]                // end of replace(); return a fully iterable copy of r[]
  .map((c, i) =>          // for each entry c at position i in this array:
    c ?                   //   if c is defined:
      r[i - 1] == C |     //     if either the previous
      r[i + 1] == C ?     //     or the next cell is '#' (in the original array):
        C                 //       replace the current cell with '#'
      :                   //     else:
        c                 //       let c unchanged
    :                     //   else:
      ' '                 //     insert a space
  ).join``                // end of map(); join the result

0

জাভাস্ক্রিপ্ট (নোড.জেএস) , 259 বাইট

254 থেকে 259 কারণ আমি টেস্ট কেস যুক্ত করেছি যা পরীক্ষাগুলিতে নষ্ট হয়নি যা আমার রেজাল্ট রেগেক্স ফাইন্ডারে জটিল

s=>{
c=[]
n=[S=""]
s.replace(/<?\d>?|<>/g,([d,D],i)=>d>0?g(i+ +d,d)+g(i-~d,D):g(i-~~D,d)+g(i-~~D+1,D))
for(i of n)S+=i||" "
return S.replace(/1?[2-9]*1?/g,(d,i)=>d>"1".repeat(l=d.length)?"#".repeat(l):c.slice(i,i+l).join``)}
g=(x,p)=>x<0||(n[x]=-~n[x],c[x]=p)

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


0

রেটিনা , 178 বাইট

^\d([^>])
 $1
T`5-1`d`<.
 *(<(\d)|((\d)>|<>))
$2* $#3*5* $4* $.`* $&¶
T`d`5-1`<.
m`^.{0,5}

G`.
N^$`
$.&
{+m`\A( *)  (.*)¶\1(..?)$
$1$3$2
m`^\A( *)( *)..(.*)¶\1(..?)$
$1##$.2*#$3

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

^\d([^>])
 $1

বাম দিক থেকে গাড়ি চলে যাওয়ার ঘটনাটি পরিচালনা করুন।

T`5-1`d`<.

বাম দিকে চলমান গাড়ির অঙ্কগুলি অস্থায়ীভাবে পরিপূরক করুন।

 *(<(\d)|((\d)>|<>))
$2* $#3*5* $4* $.`* $&¶

প্রতিটি গাড়ি তার নিজস্ব লাইনে রাখুন ( $.`* $&¶) এবং গাড়ির গতির উপর নির্ভর করে কিছু ইনডেন্ট যুক্ত করুন; বাম-চলমান গাড়িগুলি পরিপূরক গতি পায়, নন-মুভিং গাড়িগুলি গতির চেয়ে 5 টি বেশি পায়।

T`d`5-1`<.

বাম-চলমান গাড়ির অঙ্কগুলি অসম্পূর্ণ করুন।

m`^.{0,5}

5 টি গাড়ির সমস্ত বাম দিকে সরান। এটি সমস্ত গাড়ির জন্য ইনডেন্ট স্থির করে।

G`.

বাম দিকে সরানো সমস্ত গাড়ি মুছুন।

N^$`
$.&

বিপরীত অনুভূমিক ক্রমে অবশিষ্ট গাড়িগুলি বাছাই করুন।

{

সমস্ত গাড়ি প্রক্রিয়াজাত না হওয়া পর্যন্ত অবশিষ্ট পর্যায়ে পুনরাবৃত্তি করুন।

+m`\A( *)  (.*)¶\1(..?)$
$1$3$2

যতক্ষণ না পরের গাড়িটি ক্রাশ না হয় ততক্ষণ এটিকে ফলাফলটিতে যুক্ত করুন।

m`^\A( *)( *)..(.*)¶\1(..?)$
$1##$.2*#$3

ফলাফলটিতে ক্র্যাশিং গাড়ি যুক্ত করুন।

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