CODE LINK IS GIVEN TO BOTTOM ড্রোন রোভার (Drone Rovers)

মঙ্গলে বসতি স্থাপনের জন্য উপযুক্ত স্থান নির্বাচনে প্রাথমিক অভিযান চলছে। এ কাজে ব্যবহার করা হচ্ছে দুটি ড্রোন রোভার। কেন্দ্রীয় স্টেশন থেকে তাদেরকে বিভিন্ন দিকে যাবার নির্দেশ দেওয়া হয়। এরা সেই অনুযায়ী বিভিন্ন স্থানে গিয়ে ভূতাত্ত্বিক জরিপ চালায়। প্রাথমিকভাবে উদ্দিষ্ট অঞ্চলকে ৮ বাই ৮ আকারের ছকে ভাগ করা হয়েছে। সর্ববামের এবং নিচের ঘরটির স্থানাংক (০,০) এবং সবথেকে উপরের ডানের ঘরটির স্থানাংক (৭,৭)

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

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

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

যেমন- “LLRU” এই নির্দেশ স্ট্রিং এর ক্ষেত্রে- প্রথমে প্রথম ড্রোনটি নিজের স্থান থেকে একঘর বামে সরবে, এর পর দ্বিতীয় ড্রোনটি নিজের স্থান থেকে এক ঘর বামে সরবে, এরপর প্রথমটি একঘর ডানে সরবে, এবং সব শেষে দ্বিতীয়টি একঘর উপরে সরবে। ৮ বাই ৮ ছকের বাম ডান উপর বা নিচের দিককার সীমানা সংলগ্ন কোনো ঘরে অবস্থানকালে যদি কোনো ড্রোনকে সীমানা অতিক্রমের নির্দেশ দেওয়া হয় তাহলে সেই ধাপে ড্রোনটি নির্দেশটি অমান্য করে যে ঘরে ছিলো সে ঘরেই থাকবে। লক্ষ্যণীয়, একটি ড্রোন যদি শুরুতে (x,y) অবস্থানে থাকে তাহলে তার বাম, ডান, উপরের এবং নিচের পজিশনগুলো হবে যথাক্রমে (x-1,y), (x+1,y), (x,y+1), (x,y-1)।

ইনপুটের বর্ণনা

প্রথম লাইনে একটি ইন্টিজার সংখ্যা T দেওয়া থাকবে, যা টেস্ট কেস সংখ্যা নির্দেশ করছে। এর পর T সংখ্যক লাইন থাকবে যার প্রতিটিতে স্পেস দিয়ে আলাদা করা চারটি ইন্টিজার x1, y1, x2, y2 এবং একটি স্ট্রিং S দেওয়া থাকবে। যেখানে ছকের সবচেয়ে নিচের বামের ঘরটিকে মূলবিন্দু (0,0) ধরে, (x1,y1) প্রথম ড্রোনটির শুরুর অবস্থান এবং (x2,y2) দ্বিতীয় ড্রোনটির শুরুর অবস্থান প্রকাশ করে। এবং স্ট্রিং S টি নির্দেশ তালিকা প্রকাশক করে। S অনুযায়ী কেন্দ্রীয় স্টেশন ড্রোন দুটোকে পরিচালনা করে। ২টি ড্রোনের প্রাথমিক অবস্থান ভিন্ন হবে।

1<= T <= 1000

0<=x1, y1, x2, y2<=7

স্ট্রিং S এর দৈর্ঘ্য 100 বা তার কম।

আউটপুটের বর্ণনা

প্রতি টেস্ট কেসের জন্য আলাদা লাইন ছাপাতে হবে। সেই টেস্ট কেসে যদি সংঘর্ষ অনিবার্য হয় তাহলে লাইনটিতে COLLISION আর না হলে SAFE ছাপাতে হবে। কেস নাম্বার প্রিন্ট করতে অবশ্যই ভুলো না, স্যাম্পল ইনপুট/আউটপুট দেখ।

Sample

Input
3 
0 0 3 0 RLRL 
7 7 6 7 RRU 
0 0 5 5 LRLRL




 Output
 Case 1: COLLISION
 Case 2: COLLISION 
 Case 3: SAFE

My code --http://ideone.com/gFx4qd

আমি আমার কোডে কোনো ভুল খুঁজে পাচ্ছি না ।আমার আউটপূট ঠিক আসে , কিন্তু জাজে wrong answer শো করে। কেও কি দয়া করে বলবেন আমার কোড এ কি সমস্যা ?

asked 19 Mar '16, 05:04

AhadKhan's gravatar image

AhadKhan
95218

edited 20 Mar '16, 11:32


এখানে অনেকগুলো কেস হেন্ডেল করতে যাওয়ার ফলে আপনি মিলাইতে পারছেন না ।

কিছু বিষয় দেখুন

একটি ড্রোন যদি শুরুতে (x,y) অবস্থানে থাকে তাহলে তার বাম, ডান, উপরের এবং নিচের পজিশনগুলো হবে যথাক্রমে (x-1,y), (x+1,y), (x,y+1), (x,y-1)

তার মানে আমি যদি dir এরেতে সব দিক গুলো রাখি তবে

  1. dir[i] যদি 'L', এবং বর্তমান অবস্থা (2,3) হয় তবে নতুন অবস্থান হবে (2-1,3) = (1,3) ।
  2. dir[i] যদি 'L', এবং বর্তমান অবস্থা (0,3) হয় তবে নতুন অবস্থান হবে (0-1,3) = (-1,3)। এখানে -1 করা যাবে না । তাই অবস্থানের পরিবর্তন হবে না ফলে নতুন অবস্থান হবে (0-1,3) ।

এখন ধরলাম xc,yc এ দুইটি ভেরিয়েবল যথাক্রমে x,y এর মান বাড়বে না কমবে তা হিসাব করবে । তাহলে ব্যাপারটা হবে এরকম ।

        int xc = 0;
        int yc = 0;

        if(dir[i]=='L') xc--;
        else if(dir[i]=='R') xc++;
        else if(dir[i]=='U') yc++;
        else if(dir[i]=='D') yc--;

এখন x,y এর নতুন অবস্থান হবে যথাক্রমে x+xc, y+yc ।

আর আমাদের অবস্থান পরিবর্তন হবে তখনি যখন 0<= x+xc <= 7 ও 0<= y+yc <= 7 হবে । তা না হলে অপরিবর্তিত থাকবে ।

                if(x1+xc>=0 && x1+xc<=7) x1=x1+xc;
                if(y1+yc>=0 && y1+yc<=7) y1=y1+yc; 

এখানে x1,y1 হলো প্রথম ড্রনের জন্য । নিয়ম অনুযায়ী i এর মান জোড় হলে প্রথম ড্রোন বিজোড় হলে দ্বিতীয় ড্রোন । তাই ।

            if(i%2==0){
                if(x1+xc>=0 && x1+xc<=7) x1=x1+xc;
                if(y1+yc>=0 && y1+yc<=7) y1=y1+yc;
            }else{
                if(x2+xc>=0 && x2+xc<=7) x2=x2+xc;
                if(y2+yc>=0 && y2+yc<=7) y2=y2+yc;
            }

যদি x1==x2 এবং y1==y2 হয় তবেই COLLISION ।

তাই প্রথমে একটা ভেরিয়েবল নেই int ck = 1; যদি COLLISION হয় তবে ck এর মান 0 করে দিবো ।

সব দিকে যাওয়ার পড়ে যদি দেখা যায় ck এর মান 1 আছে তার মানে COLLISION হয় নি। আর 0 হয়ে গেলে COLLISION হয়েছে।

    if(x1==x2 && y1==y2) {
         ck=0;
         break;
    }
   if(ck==1){
        printf("Case %d: SAFE\n",cs);
    }else{
        printf("Case %d: COLLISION\n",cs);
    }

তাহলে সবশেষে পুরো কোড

int main()
{
    int T;
    scanf("%d",&T);
    for(int cs=1; cs<=T; cs++){


    int x1,y1,x2,y2;
    char dir[100000];
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    scanf("%s",dir);

    int ck = 1;

    int ln = strlen(dir);
    int i=0;
    for(i=0; i<ln; i++){
        int xc = 0;
        int yc = 0;

        if(dir[i]=='L') xc--;
        else if(dir[i]=='R') xc++;
        else if(dir[i]=='U') yc++;
        else if(dir[i]=='D') yc--;

        if(i%2==0){
            if(x1+xc>=0 && x1+xc<=7) x1=x1+xc;
            if(y1+yc>=0 && y1+yc<=7) y1=y1+yc;
        }else{
            if(x2+xc>=0 && x2+xc<=7) x2=x2+xc;
            if(y2+yc>=0 && y2+yc<=7) y2=y2+yc;
        }
        if(x1==x2&&y1==y2) {
                ck=0;
                break;
        }
    }
    if(ck==1){
        printf("Case %d: SAFE\n",cs);
    }else{
        printf("Case %d: COLLISION\n",cs);
    }

}

return 0;
}
permanent link

answered 22 Mar '16, 08:54

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

reverted 22 Mar '16, 08:58

বরাবরের মতো আপনাকে অনেক thanks ,স্যার !

(22 Mar '16, 09:02) AhadKhan
1

দারন ভাবে বুজিয়েছেন ! অনেক সমস্যার আজ যট খুলল । Thanksssssssssssssssssssss

(22 Mar '16, 09:21) AhadKhan

এখানে একটু ছোটো কথা ছিলোঃ

৮ বাই ৮ ছকের বাম ডান উপর বা নিচের দিককার সীমানা সংলগ্ন কোনো ঘরে অবস্থানকালে যদি কোনো ড্রোনকে সীমানা অতিক্রমের নির্দেশ দেওয়া হয় তাহলে সেই ধাপে ড্রোনটি নির্দেশটি অমান্য করে যে ঘরে ছিলো সে ঘরেই থাকবে।

Input:

1 
0 0 1 0 LL

Output:
Case 1: COLLISION
permanent link

answered 21 Mar '16, 13:38

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

ভাইয়া , আমি তো হিসাবে মিলাইতেছি , কিন্তু আওটপুট ঠিক আসতেছে না । একটূ দেখবেন কোথায় ভুলটা হইছে , একটু বুঝিয়ে দিন । http://ideone.com/gFx4qd

(22 Mar '16, 04:58) AhadKhan
1

ভাইয়া আপনাকে ধন্যবাদ , আমি সমস্যাটা খুঁজে পেয়েছি ! FEELING HAPPY.......

(22 Mar '16, 05:18) AhadKhan

না ভাইয়া আরেকটা সমস্যা দেখা দিয়েছে ,আপনার টা কারেক্ট করলাম কিন্তু আরেক আওটপুট ভুল হইতেছে

(22 Mar '16, 05:28) AhadKhan

একটু এখন একটু দেখেন ভাই ---http://ideone.com/26VUhq

(22 Mar '16, 05:47) AhadKhan

1

6 7 7 7 LL

এর জন্য SAFE

(22 Mar '16, 06:48) Sharif Chowdhury

Vaiya pura code ta den

(22 Mar '16, 08:04) AhadKhan

কোন অনলাইন জাজ? লিঙ্ক টা কি দেওয়া যাবে?

(22 Mar '16, 10:14) Zahirul_Islam_Monir
showing 5 of 7 show 2 more comments

কোন অনলাইন জাজ? লিঙ্ক টা কি দেওয়া যাবে?Sorry for comment but it's only for attention.

permanent link

answered 22 Mar '16, 10:25

Zahirul_Islam_Monir's gravatar image

Zahirul_Islam_Monir
2039

edited 22 Mar '16, 10:26

Thanks a lot

(22 Mar '16, 13:51) Zahirul_Islam_Monir
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×402
×70
×54
×5

question asked: 19 Mar '16, 05:04

question was seen: 1,100 times

last updated: 22 Mar '16, 13:51