2 ডি স্পেসে কোনও অবজেক্ট ট্র্যাক করুন


11

বিবরণ

এই চ্যালেঞ্জটির কাজটি এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা কোনও প্রদত্ত বস্তুকে একটি স্পেসে অনুসরণ করে।n×n

ইনপুট / আউটপুট

আপনার প্রোগ্রামটি 3 ইনপুট দেওয়া হবে যা কোনও বুদ্ধিমান পদ্ধতিতে নেওয়া যেতে পারে :

nপ্লেনের পাশের আকার হবে। (সুতরাং, জন্য আপনার প্লেনটি )। আপনি ধরে নিতে পারেন সর্বদা একটি বিজোড় পূর্ণসংখ্যার হবে।n=55×5n

s স্থানাঙ্কের এক জোড়া হিসাবে দেওয়া বস্তুর প্রারম্ভিক অবস্থান হবে ।(x,y)

Dঅর্ডারযুক্ত জোড়গুলির ভেক্টর হবে। Dবিন্যাস অনুসরণ করবে , যেখানে সবসময় হতে হবে এক এর , অঙ্কবাচক ও প্রাথমিক intercardinal দিকনির্দেশের জন্য, এবং হতে হবে 'টিক্স' সংখ্যার জন্য একটি পূর্ণসংখ্যা।D=[(d0,t0),(d1,t1),...,(dn,tn)]dkটি কে'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'tk

এই ইনপুটগুলি দেওয়া, আপনার প্রোগ্রামটি অবশ্যই বিমানের মধ্যে অবজেক্টের একটি ট্র্যাকিং আউটপুট করতে পারে।

বিধি

আউটপুট অবশ্যই সমতল সীমানা থাকতে হবে । উদাহরণ:

- 21012 +
+ + ┌─────┐
2│ │
1│ │
0│ │
1│ │
2│ │
-└─────┘

খালি বিমানের উদাহরণ হতে পারে । উপরের এবং পাশের নম্বরগুলি কেবলমাত্র রেফারেন্সের জন্য এবং প্রিন্ট করার দরকার নেই।5×5

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

কিছু গ্রহণযোগ্য বিমানের মধ্যে রয়েছে:

┌──┐ .... ---- + - +
│ │। । | | | |
│ │। । | | | |
└──┘; ....; ----; - + +

অগ্রহণযোগ্য প্লেনগুলির মধ্যে রয়েছে:

      .... .... ++++। ।
            । । + + ।
            । + + ।
    ; ....; ....; + +; । ।

ট্র্যাক করার অবজেক্টটি আপনি যে কোনও চরিত্রই চয়ন করতে পারেন, যতক্ষণ না এটি কেবল বিমানের 1 টি স্থান দখল করে এবং সীমানা অক্ষর থেকে আলাদা is

ট্র্যাক করা অবজেক্টের ট্রেসগুলি আপনি যে বর্ণগুলি চয়ন করেন তা হতে পারে, যতক্ষণ না তারা কেবল বিমানটিতে 1 টি স্থান দখল করে থাকে এবং অবজেক্ট থেকে পৃথক হয়।

প্রতিটি উপাদান এর জন্য অবজেক্টটি স্পেসগুলি দিকে সরিয়ে নিয়ে একটি ট্রেস পিছনে রেখে দেয়।(dk,tk)Dtd

যদি বস্তুটি একটি সীমানায় আঘাত করে তবে তা প্রতিফলিত হবে। যদি এখনও অবজেক্টটির কোনও পদক্ষেপ বাকী থাকে তবে এটি যেদিকে প্রতিফলিত হয়েছিল সেদিকেই চলতে থাকবে।

রেফারেন্সের জন্য, এই দিকনির্দেশগুলি একে অপরের প্রতিফলিত হয়:

NSউপরের বা নীচের সীমানা পূরণ করা হলে ;;

EW ; যখন একটি পার্শ্বীয় সীমানা পূরণ হয়;

চূড়ান্ত আউটপুটটিতে নতুন সম্ভাব্য চিহ্নগুলি থাকবে, অর্থাত্ যদি অবজেক্টটি এমন কোনও জায়গায় একটি ট্রেস ফেলে রাখে যেখানে ইতিমধ্যে একটি ট্রেস রয়েছে, নতুন ট্রেস অক্ষরটি পুরানোটিকে ওভাররাইট করে।

যথারীতি, স্ট্যান্ডার্ড লুফোলগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়

স্কোরিং:

এটি একটি চ্যালেঞ্জ।

উদাহরণ:

ইনপুট: , ,n=5s=(0,0)D=[(NW,2),(S,2),(E,1)]

এটি কাজ করে:

t=0

    0
 ┌─────┐
 │ │
 │ │
0│ ○ │
 │ │
 │ │
 └─────┘

t=2

    0
 ┌─────┐
 │ ○ │
 │ \ │
0│ \ │
 │ │
 │ │
 └─────┘

t=4

    0
 ┌─────┐
 │ │
 │ | \ │
0│ ○ \ │
 │ │
 │ │
 └─────┘

t=5

    0
 ┌─────┐
 │ │
 │ | \ │
0│└ ○ \ │
 │ │
 │ │
 └─────┘

(0 টি কেবলমাত্র রেফারেন্সের জন্য, এবং তাদের চূড়ান্ত আউটপুটে যাওয়ার দরকার নেই))


n=9s=(3,1)D=[(N,2),(SW,8),(SE,3),(NE,8)]

t=10

      0     
 ┌─────────┐
 │ │
 │ │
 │ │
 │ ∧ │
0│ / | │
 │ ○ / | │
 │⟨ / │
 │ \ / │
 │ ∨ │
 └─────────┘

SWNWNWNE

t=21

      0     
 ┌─────────┐
 │ ○ │
 │ \ │
 │ \ │
 │ \ │
0│ / | ⟩│
 │ ∧ / / │
 │⟨ \ / / │
 │ \ \ / │
 │ ∨ ∨ │
 └─────────┘

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

n=5s=(0,0)D=[(NW,2),(S,2),(E,1)]

আউটপুট:

    0
 ┌─────┐
 │ │
 │ | \ │
0│└ ○ \ │
 │ │
 │ │
 └─────┘


ইনপুট: n=9 , s=(3,1) , D=[(N,2),(SW,8),(SE,3),(NE,8)]

আউটপুট:

      0     
 ┌─────────┐
 │ ○ │
 │ \ │
 │ \ │
 │ \ │
0│ / | ⟩│
 │ ∧ / / │
 │⟨ \ / / │
 │ \ \ / │
 │ ∨ ∨ │
 └─────────┘


ইনপুট: n=3 , s=(1,1) , D=[(N,5),(W,5)]

আউটপুট:

   0
 ┌───┐
 │ | │
0│- ○ ┐│
 │ | │
 └───┘


ইনপুট: n=11 , s=(3,5) , D=[(NW,8),(E,5),(SE,3),(SW,5),(N,6),(NE,10)]

আউটপুট:

       0
 ┌───────────┐
 │ ∧ │
 │ / \ │
 │┌ - / - \ \ │
 │ \ | / \ \ │
 । \ | │ \ │
0│ | /
 │ | \ / / │
 │ | / ○ │
 │ | / \ │
 │ ∨ \ │
 │ \ │
 └───────────┘


এর পরিবর্তে আমরা কি 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'0-সূচকযুক্ত (বা 1-ইনডেক্সড) পূর্ণসংখ্যা হিসাবে নিতে পারি ? সুতরাং উদাহরণস্বরূপ [('NW',2),('S',2),('E',1)]হয়ে যায় [[7,2],[4,2],[2,1]]
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন নিশ্চিত, কোনও সমস্যা নেই। উত্তরে এটি উল্লেখ করার বিষয়টি নিশ্চিত করুন।
জে স্যালা

1
@ আরনাউল্ড হ্যাঁ, আপনাকে একটি একক ট্রেস চরিত্র ব্যবহার করার অনুমতি দেওয়া হয়েছে। আমি একের অধিক ব্যবহার করেছি যাতে পরীক্ষার কেসগুলি কল্পনা করা সহজতর হয় তবে এটির প্রয়োজন হয় না। কেবল নিশ্চিত করুন যে ট্রেস অক্ষরটি সনাক্ত করা অবজেক্টের চরিত্র থেকে আলাদা is
জে স্যালা

1
@ আর্নল্ড " ট্র্যাক করার জন্য অবজেক্টটি আপনি যে কোনও চরিত্রই বেছে নিতে পারেন, যতক্ষণ না এটি কেবল বিমানের 1 টি স্থান দখল করে এবং সীমানা অক্ষর থেকে পৃথক। যেহেতু তারা কেবল বিমানের 1 টি স্থান দখল করে এবং বস্তু থেকে পৃথক ""
কেভিন ক্রুইজসেন

উত্তর:


9

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

(n,x,y,[[dir,len],[dir,len],...])07

0একটি সীমা, 1একটি ট্রেস এবং 3চূড়ান্ত অবস্থানের জন্য একটি স্ট্রিং আউটপুট দেয় ।

(n,x,y,a)=>(g=X=>Y>n?'':(Y%n&&X%n&&a.map(([d,l],i)=>(M=H=>(h-X|v-Y||(k|=a[i+!l]?1:3),l--&&M(H=(h+H)%n?H:-H,h+=H,v+=V=(v+V)%n?V:-V)))(~-(D='12221')[d],V=~-D[d+2&7]),h=x+n/2,v=n/2-y,k=' ')&&k)+(X<n?'':`
`)+g(X++<n?X:!++Y))(Y=!++n)

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

কিভাবে?

একটি 'ক্যানভাস' (যেমন অক্ষরের একটি ম্যাট্রিক্স) এর সূচনা এবং অঙ্কন জাভাস্ক্রিপ্টে কিছুটা ক্লান্তিকর এবং দীর্ঘ।

এই কোডটি একটি ভিন্ন কৌশল ব্যবহার করছে: 2D অ্যারেতে আউটপুট সংরক্ষণের পরিবর্তে, এটি বাম থেকে ডানে এবং উপরে থেকে নীচে অক্ষরে অক্ষরে একটি স্ট্রিং চরিত্র তৈরি করে। প্রতিটি পুনরাবৃত্তিতে:

  • আমরা 0একটি সীমানা পেরিয়ে যদি একটি আউটপুট ।
  • অন্যথায়, আমরা পুরো পথটি অনুকরণ করি এবং দেখুন এটি আমাদের বর্তমান অবস্থানটি অতিক্রম করছে কিনা। আমরা আউটপুট পারেন 1বা 3এটা আছে, বা অন্যথায় একটি স্থান পারেন।
  • আমরা ডান সীমানায় পৌঁছে গেলে আমরা একটি লাইনফিড সংযোজন করি।

সব মিলিয়ে এটি সংক্ষিপ্ততম পদ্ধতির নাও হতে পারে তবে আমি ভেবেছিলাম এটি চেষ্টা করার মতো worth


9

জাভা 10, 350 343 340 336 বাইট

(n,s,S,D)->{int N=n+2,x=N/2+s,y=N/2-S,i=N*N;var r=new char[N][N];for(;i-->0;)r[i/N][i%N]=i/N*(i%N)<1|i/N>n|i%N>n?'#':32;r[y][x]=42;for(var d:D)for(i=d[0];d[1]-->0;r[y+=i%7<2?1/y*2-1:i>2&i<6?y<n?1:-1:0][x+=i>0&i<4?x<n?1:-1:i>4?1/x*2-1:0]=42)i=y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7;r[y][x]=79;return r;}

Dএকটি 2 ডি পূর্ণসংখ্যা-বিন্যস্ত যেখানে দিকনির্দেশ 0-সূচীবদ্ধ পূর্ণসংখ্যা হল: N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6, NW=7। প্রারম্ভিক- x,yস্থানাঙ্ক দুটি পৃথক পরামিতি sএবং হবে S। আউটপুট একটি অক্ষর-ম্যাট্রিক্স।
এটি #সীমানা *হিসাবে, ট্রেইল হিসাবে এবং Oশেষের পজিশনের জন্য ব্যবহার করে (তবে তিনটিই চাইলে ইউনিকোড রেঞ্জের কোনও ASCII অক্ষর হতে পারে [33,99]তবে আপনি চাইলে))

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

-৪ বাইট @ সিলিংক্যাট ধন্যবাদ ।
চলাচলগুলি সহজ করে এবং আমরা আরও কিছু দিকে যে দিকে যাত্রা করছি তাতে স্পষ্টভাবে আরও কিছু গল্ফ করা যেতে পারে।

ব্যাখ্যা:

(n,s,S,D)->{           // Method with `n`,`s,S`,`D` parameters & char-matrix return-type
  int N=n+2,           //  Set `N` to `n+2`, since we use it multiple times
      x=N/2+s,         //  Calculate the starting `x` coordinate
      y=N/2-S,         //  Calculate the starting `y` coordinate
      i=N*N;           //  Index integer
  var r=new char[N][N];//  Result char-matrix of size `N` by `N`
  for(;i-->0;)         //  Loop `i` in the range (`N**2`, 0]
    r[i/N][i%N]=       //    Set the cell at position `i` divmod-`N` to:
      i/N*(i%N)<1|i/N>n|i%N>n?
                       //     If we're at a border:
       '#'             //      Set the current cell to '#'
      :                //     Else:
       32;             //      Set the current cell to ' ' (a space) instead
  r[y][x]=42;          //  Then set the starting position `x,y` to a '*'
  for(var d:D)         //  Loop over the `D` input:
    for(i=d[0];        //   Set `i` to the current direction
        d[1]-->0       //   Inner loop the current `d` amount of times
        ;              //     After every iteration:
         r[y+=         //      Change `y` based on the current direction
            i%7<2?     //       If the current direction is N, NE, or NW
             1/y*2-1   //        If we're at the top border:
                       //         Go one row down
                       //        Else
                       //         Go one row up
            :i>2&i<6?  //       Else-if the current direction is S, SE, or SW
             y<n?      //        If we're at the bottom border
              1        //         Go one row up
             :         //        Else
              -1       //         Go one row down
            :          //       Else (directions E or W)
             0]        //        Stay in the same row
          [x+=         //      Change `x` based on the current direction
            i>0&i<4?   //       If the current direction is E, NE, or SE
             x<n?      //        If we're NOT at the right border
              1        //         Go one column to the right
             :         //        Else:
              -1       //         Go one column to the left
            :i>4?      //       Else-if the current direction is W, NW, or SW
             1/x*2-1   //        If we're NOT at the left border:
                       //         Go one column to the left
                       //        Else:
                       //         Go one column to the right
            :          //       Else (directions N or S)
             0]        //        Stay in the same column
               =42)    //      And fill this new `x,y` cell with a '*'
      i=               //    Determine the new direction
        y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7;
                       //     (See loose explanation below)
  r[y][x]=79;          //  And finally set the last `x,y` cell to 'O'
  return r;}           //  And return the result-matrix

y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7বেশিরভাগ দিকের পরিবর্তন 4-iএবং ব্যবহারের 8-iজন্য নীচে এটির একটি গল্ফযুক্ত সংস্করণ :

y<2?     // If we're at the top border
 i==0?   //  If the current direction is N
  4      //   Change it to direction S
 :i==1?  //  Else-if the current direction is NE
  3      //   Change it to SE
 :i==7?  //  Else-if the current direction is NW
  5      //   Change it to SW
 :       //  Else
  i      //   Leave the direction the same
:x<2?    // Else-if we're at the left border
 i==7?   //  If the current direction is NW
  1      //   Change it to NE
 :i==6?  //  Else-if the current direction is W
  2      //   Change it to E
 :i==5?  //  Else-if the current direction is SW
  3      //   Change it to SE
 :       //  Else
  i      //   Leave the direction the same
:y>=n?   // Else-if we're at the bottom border
 i==3?   //  If the current direction is SE
  1      //   Change it to NE
 :i==4?  //  Else-if the current direction is S
  0      //   Change it to N
 :i==5?  //  Else-if the current direction is SW
  7      //   Change it to NW
 :       //  Else
  i      //   Leave the direction the same
:x>=n?   // Else-if we're at the right border
 i==1?   //  If the current direction is NE
  7      //   Change it to NW
 :i==2?  //  Else-if the current direction is E
  6      //   Change it to W
 :i==3?  //  Else-if the current direction is SE
  5      //   Change it to SW
 :       //  Else
  i      //   Leave the direction the same
:        // Else
 i       //  Leave the direction the same

3

কাঠকয়লা , 74 বাইট

NθJ⊘⊕θ⊘⊕θUR±⊕⊕θJN±NFA«≔⊟ιζF⊟ι«≔ζδ↷δ¶F›⊗↔ⅈθ≦±ζF›⊗↔ⅉθ≦⁻⁴ζ≧﹪⁸ζ↷⁴¶↶⁴↶δ↷ζ*¶↶ζPo

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। N, x, y, d বিন্যাসে ইনপুট নেয় যেখানে d [দূরত্ব, দিক] জোড়গুলির অ্যারের একটি অ্যারে যেখানে দিকটি একটি সংখ্যাসূচক এনকোডিং হয় = 0 দক্ষিণ ঘড়ির কাঁটার দিক থেকে 7 = দক্ষিণ পূর্ব দিকে। ব্যাখ্যা:

NθJ⊘⊕θ⊘⊕θUR±⊕⊕θ

ইনপুট করুন nএবং একটি বাক্স আঁকুন যার অভ্যন্তরটি আকারের উপর ভিত্তি করে আকার।

JN±N

ইনপুট করুন এবং এতে লাফিয়ে পড়ুন xএবং y(তবে উপেক্ষণ করুন yকারণ চারকোলের y- অক্ষগুলি বাড়ছে)।

FA«

এন্ট্রি উপর লুপ d

≔⊟ιζ

প্রাথমিক দিকটি বের করুন।

F⊟ι«

কাঙ্ক্ষিত দূরত্বের জন্য পুনরাবৃত্তি করুন।

≔ζδ

দিকটি সংরক্ষণ করুন।

↷δ¶

সেই দিকটিতে একটি পরীক্ষামূলক পদক্ষেপ করুন।

F›⊗↔ⅈθ≦±ζ

যদি এটি পাশ থেকে যায় তবে দিকটি অনুভূমিকভাবে ফ্লিপ করুন।

F›⊗↔ⅉθ≦⁻⁴ζ

এটি যদি উপরে বা নীচে চলে যায় তবে দিকটি উল্লম্বভাবে উল্টাতে হবে।

≧﹪⁸ζ

8 দিকের দিকটি হ্রাস করুন (পিভট কমান্ড কেবল 0 থেকে 7 পর্যন্ত মান গ্রহণ করে)।

↷⁴¶↶⁴

পরীক্ষামূলক পদক্ষেপটি পূর্বাবস্থায় ফেরান।

↶δ↷ζ*¶

সঠিক দিকে মুখ করুন এবং তারপরে একটি ট্রেস মুদ্রণ করুন এবং সরান।

↶ζPo

ডিফল্ট দিকে ফিরে যান, এবং বর্তমান অবস্থানে বস্তুটি মুদ্রণ করুন।


2

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

(এন, এক্স, ওয়াই, [[দির, লেন], [দির, লেন], ...]) হিসাবে ইনপুট নেয় যেখানে বিটমাস্ক ব্যবহার করে দিকনির্দেশগুলি এনকোড করা হয়:

S : 1  
N : 2   
E : 4  
W : 8  
SE: 5 (1|4)  
SW: 9 (1|8)
NE: 6 (2|4)
NW:10 (2|8)

এর সাথে একটি স্ট্রিং আউটপুট করে

- 1 for top and bottom boundary
- 4 for left and right boundary 
- 5 for corners 
- 0 for trace
- 8 for the final position.

সীমানার জন্য পৃথক মানগুলি পরবর্তী দিকটি মূল্যায়নের জন্য ব্যবহৃত হয়

(n,x,y,d)=>(Q=[e=`
5`+'1'[R='repeat'](n)+5,o=n+3,-o,c=[...e+(`
4`+' '[R](n)+4)[R](n)+e],1,1+o,1-o,,-1,o-1,~o],p=1-o*(~n/2+y)-~n/2+x,c[d.map(([q,s])=>{for(a=q;s--;p+=Q[a^=c[p+Q[a]]*3])c[p]=0}),p]=8,c.join``)

কম গল্ফড

F=(n,x,y,d) => (
  o = n+3, // vertical offset, accounting for boundaries and newline
  // Q = offsets for different directions, bitmask indexed 
  Q = [,  // 0000 no direction
     o,   // 0001 S
     -o,  // 0010 N
     ,    // 0011 NS - invalid
     1 ,  // 0100 E
     1+o, // 0101 SE
     1-o, // 0110 NE
     ,    // 0111 NSE - invalid
     -1,  // 1000 W
     o-1, // 1001 SW
    -o-1],// 1010 NW

  e = `\n5`+'1'.repeat(n)+5, // top and bottom boundary
  c = [...e + (`\n4` + ' '.repeat(n) + 4).repeat(n) + e], // canvas
  p = 1 - o*(~n/2+y) - ~n/2 + x, // start position
  d.map( ([q,s]) => { // repeat for each element in 'd'
    a = q; // starting offset pointer - will change when bounce
    while( s-- )
    {
      c[p] = 0; // trace
      b = c[p + Q[a]] // boundary value or 0 (space count 0)
      a ^= b * 3 // xor with 0 if no bounce, else 3 or 12 or 15
      p += Q[q]  // advance position
    }
  })
  c[p] = 8, // set end position
  c.join``
)

পরীক্ষা

var F=
(n,x,y,d)=>(Q=[e=`
5`+'1'[R='repeat'](n)+5,o=n+3,-o,c=[...e+(`
4`+' '[R](n)+4)[R](n)+e],1,1+o,1-o,,-1,o-1,~o],p=1-o*(~n/2+y)-~n/2+x,c[d.map(([q,s])=>{for(a=q;s--;p+=Q[a^=c[p+Q[a]]*3])c[p]=0}),p]=8,c.join``)

var out=x=>O.textContent+=x

var test=(n,x,y,d)=>{
  var dd = d.map(([d,s])=>[,'S','N',,'E','SE','NE',,'W','SW','NW'][d]+' '+s)
  out([n,x,y]+' ['+dd+']')
  out(F(n,x,y,d))
  out('\n\n')
}

test(5,0,0,[[10,2],[1,2],[4,1]])
test(9,3,-1,[[2,2],[9,8],[5,3],[6,8]])
test(11,3,-5,[[10,8],[4,5],[5,2],[9,5],[2,6],[6,10]])
<pre id=O></pre>


2

সি (জিসিসি) , 352 323 বাইট

সিলিংক্যাটকে ধন্যবাদ 29 বাইট ডাউন।

#define G(x,a)x+=a=x<2|x>m-3?-a:a
#define A(p)atoi(v[p])
m,r,c,x,y,s,a,b;main(q,v)int**v;{m=A(1)+2;int f[r=m*m];for(x=A(2)+m/2;r--;f[r]=32);for(y=A(s=3)+m/2;++s<q;)for(a=cos(A(s)*.8)*2,b=sin(A(s)*.8)*2,c=A(++s);c--;G(y,b),f[y*m+x]=42)G(x,a);for(f[y*m+x]=64;++r<m;puts(""))for(c=0;c<m;c++)putchar(c%~-m&&r%~-m?f[r*m+c]:35);}

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

প্রোগ্রামটি কমান্ড লাইন আর্গুমেন্ট (যেমন a.out 10 1 1 3 5 0 4 7 2) হিসাবে ইনপুট নেয় :

  • প্রথম যুক্তিটি হচ্ছে ক্ষেত্রের আকার,
  • (x,y)
  • (d,t)dEt

ব্যাখ্যা

// Update the coordinate AND simultaneously modify the direction (if needed)
#define G (x, a) x += a = x < 2 || x >= m - 2 ? -a : a

// Get the numeric value of an argument
#define A (p) atoi (v[p])

// variables
m, // width and height of the array with field data
r, c, // helpers
x, y, // current coordinates of the actor
s, // helper
a, b; // current direction of the movement

main (q, v) char **v;
{
    // array size is field size + 2 (for borders)
    m = A (1) + 2;

    // allocate the array
    int f[r = m * m];

    // fill the array with spaces,
    for
    (
        // but first get x of the actor
        x = A (2) + m / 2;

        r--;

        f[r] = 32
    );

    // trace: iterate over remaining commandline argument pairs
    for
    (
        // but first get y of the actor
        y = A (s = 3) + m / 2;

        ++s < q; // loop until no args left
    )
        // for each such pair
        for
        (
            a = cos (A (s) * .8) * 2,  // get the x-increment
            b = sin (A (s) * .8) * 2, // get the y-increment
            c = A (++s);  // then get the number of steps

            c--;

            // after each step:
            G (y, b), // update y and maybe the y-direction
            f[y * m + x] = 42 // draw the trail
        )
            G (x, a); // update x and maybe the x-direction

   // output
   for
   (
       f[x * m + y] = 64; // put a @ to the current position of the actor
       ++r < m; // r == -1 at the beginning of the loop so preincrement

       puts("") // terminate each row with newline
   )
       // iterate over columns in the row
       for (c = 0; c < m; c++)
           putchar
           (
               c % ~ -m && r % ~ -m ? // if it is not a border cell,
               f[r * m + c] // output the character from the array
               : 35 // otherwise output the #
           );
}

1
আমি বিশ্বাস করি যে আপনার কোডটি শেষ অবস্থানে অবজেক্টের আউটপুট অনুপস্থিত, যেহেতু ট্র্যাক করা অবজেক্টের ট্রেস আপনি যে কোনও অক্ষর চয়ন করেছেন তা হতে পারে, যতক্ষণ না তারা বিমানটিতে কেবলমাত্র 1 স্থান দখল করে থাকে এবং অবজেক্ট থেকে পৃথক হয়তা ছাড়া আমার কাছে এটি বেশ ভাল লাগছে।
জে স্যালা

ওফস, আমি পুরোপুরি এটি মিস করেছি, জে.সাল্লাকে লক্ষ্য করার জন্য ধন্যবাদ é ভাগ্যক্রমে সংশোধন প্রোগ্রামটি আর তৈরি করতে পারেনি।
সর্বাধিক ইয়েখলাভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.