ছোট্ট অভিযাত্রী আবদুল্লাহ ( Abdullah the Little Explorer )

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

হঠাৎ আবদুল্লাহ আবিষ্কার করল যে তার জিপিএস আর রেডিও কোনটাই কাজ করছে না। শেষ যেখানে জিপিএস ঠিকমত কাজ করেছিল আবদুল্লাহ সেই অবস্থানটি জানে, কিন্তু সে তার বর্তমান অবস্থান জানে না। তার অবস্থান XY তলের একটি বিন্দু হিসেবে প্রকাশ করা যায়, যেখানে X অক্ষ পশ্চিম হতে পূর্ব দিকে এবং Y অক্ষ দক্ষিণ হতে উত্তর দিকে। আবদুল্লাহ এটাও জানে যে সে কোন দিকে কত মাইল যাত্রা করেছিল। সে শুধুমাত্র উত্তর, দক্ষিণ, পূর্ব এবং পশ্চিম দিকে যাত্রা করেছিল।

হঠাৎ তার রেডিও কাজ করা শুরু করল এবং সে তৎক্ষণাৎ তার সর্বশেষ জানা অবস্থান এবং তার পর থেকে সে কোন দিকে কতটুকু গিয়েছিল তা রেডিওর সাহায্যে বেসক্যাম্পে প্রেরণ করল। বেসক্যাম্পের লোকেরা কি পারবে আবদুল্লাহর বর্তমান অবস্থান চিহ্নিত করতে?

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

ইনপুটের প্রথম লাইনে টেস্টকেসের সংখ্যা T দেওয়া থাকবে। প্রতিটি টেস্টকেসের প্রথম লাইনে স্পেস দিয়ে আলাদা করাদুইটি পূর্ণসংখ্যা X এবং Y দেওয়া থাকবে, যা আবদুল্লাহর সর্বশেষ জানা অবস্থান নির্দেশ করে। পরবর্তী লাইনে একটি স্ট্রিং দ্বারা সে কোন দিকে কতটুকু গিয়েছিল তা দেওয়া থাকবে। সরণের সংখ্যা হবে 1 হতে 10000 এর মধ্যে। তার প্রতিটি সরণ দুইটি বর্ণ দিয়ে প্রকাশ করা হবে। প্রথম বর্ণটি হবে N, S, E অথবা W, যা নির্দেশ করে সরণের দিক। পরের বর্ণটি হবে 0 হতে 9 এর মধ্যে, যা সে কত মাইল গিয়েছিল তা প্রকাশ করে।

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

প্রতিটি টেস্টকেসের জন্য একটি লাইনে স্পেস দিয়ে আলাদা করা দুইটি পূর্ণসংখ্যা X এবং Y আউটপুট দিতে হবে, যা আবদুল্লাহর বর্তমান অবস্থানের স্থানাংকদ্বয় নির্দেশ করে।

Sample

Input
2 
2 2
N9W2N3W5S9E2S6
3 5 
E9S9E5S2W4N9W3S7

Output
-3 -1 
10 -4

আমি আজ সকাল থেকে চেষ্টা করছি ।এই কমান্ডগুলা apply করব কিভাবে? string এ নিলাম কিন্তু নাম্বার গুলা count করে কিভাবে result বের করব? আমাকে বেপারটা কেও একটু বুঝিয়ে দিবেন?? এটা যদি solve করতে পারি তাহলে এ ধরনের অনেক সমস্যা সমাধান করতে পারব। কেও আমাকে বুঝিয়ে দেন please!!!!

asked 17 Mar '16, 09:08

AhadKhan's gravatar image

AhadKhan
95220


আপনার সমস্যাটি বুঝতে পেরেছি । আপনি N9W2N3W5S9E2S6 থেকে কিভাবে সংখ্যাগুলো আলাদা করবেন তা বুঝতে পারছেন না ।

এখানে কয়েকটি বেসিক বিষয় বলি ।

আপনি যদি একটি স্ট্রিং মান যেখানে ইন্টিজার আছে যেমন "১২৩" , সেটিকে ইন্টিজারে নিতে চান তবে আপনি atoi() ফাংশন ব্যাবহার করতে পারেন । উদাহরনঃ

// use of atoi()
char str[100] = "123";
int a = atoi(str);
printf("%d",a);

আপনি যদি কিছু ক্যারেকটার দিয়ে একটি স্ট্রিং তৈরি করতে চান তবে আপনাকে শেসে '\0' দিতে হবে ।

// make a string with some characters
char str[100];
str[0] = 'a';
str[1] = 'f';
str[2] = '1';
str[3] = 'e';

// printf("%s",str); // উল্টাপাল্টা কিছু আসতে পারে ।

str[4] = '\0';
printf("%s",str);

এবার একটি ক্যারেকটার ডিজিট কি না তা চেক জন্য isdigit() ফাংশন আছে । এর জন্য ctype.h হেডার এড করতে হবে ।

// use of isdigit()
char a = '1';
char b = 'a';

if( isdigit(a) )  printf("true\n");    
else printf("false\n");
// output true


if( isdigit(b) )  printf("true\n");    
else printf("false\n");
// output false

এবার আপনি কাজ শুরু করতে পারেন ।

// select a string
str[] = "N9W2N3W5S9E2S6";  // you can take it as input
char val[100]; // for separate int 
char d; // for direction
int ds; // for distance


int i,j;
i=0;
j=0;
d = str[i];
for(i=i+1;isdigit(str[i]);i++){
    val[j] = str[i]; j++;
}
val[j] = '\0';
ds = atoi(val);
printf("%c -> %d\n",d,ds); // output N -> 9

এভাবে সবগুলোর জন্য বাহিরে একটি লুপ চালাইলে হবে । যেহেতু স্ট্রিং এর শেষ ক্যারেক্টারটি '\0' হয় তাই আমরা d এর মান '\0' পেলে হিসাব করা শেষ করবো ।

// select a string
str[] = "N9W2N3W5S9E2S6";  // you can take it as input
char val[100]; // for separate int 
char d; // for direction
int ds; // for distance


int i,j;
i=0;
j=0;
d = str[i];
while(d!='\0'){  // check the value of d is '\0' or not 
    j=0; // start for a new distance 
    for(i=i+1;isdigit(str[i]);i++){
        val[j] = str[i]; j++;
    }
    val[j] = '\0';
    ds = atoi(val);
    printf("%c -> %d\n",d,ds); // output N -> 9
    d = str[i]; // assign the next direction 
}

আর সম্পুর্ন হিসাব মিলায় হবে এরকম

char str[] = "N9W2N3W5S9E2S6";  // you can take it as input
char val[100]; // for separate int
char d; // for direction
int ds; // for distance

int x=2,y=2;


int i,j;
i=0;
j=0;
d = str[i];
while(d!='\0'){
    j=0;
    for(i=i+1;isdigit(str[i]);i++){
        val[j] = str[i]; j++;
    }
    val[j] = '\0';
    ds = atoi(val);
    //printf("%c -> %d\n",d,ds); // output N -> 9

    if(d=='E') x = x+ds;
    else if(d=='W') x = x-ds;
    else if(d=='N') y = y+ds;
    else if(d=='S') y = y-ds;

    d = str[i];
}

printf("%d %d",x,y);

এবার মনে হয় আপনি বাকি কাজটি করতে পারবেন ।

permanent link

answered 22 Mar '16, 06:13

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

edited 22 Mar '16, 06:16

ha vaiya solve korechi eta, apna k onek dhonnobad somoy dewyar jonno . Please amar ei problem ta dekhen--http://programabad.com/questions/3983/please-find-error-in-my-code

(22 Mar '16, 06:18) AhadKhan

এখানে যেহেতু বলা আছে দুরুত্ত এক ক্যারেক্টারের মধ্যেই থাকবে তাই সমাধান একটু ছোটো করা যায় । এ ক্ষেত্রে ক্যারেক্টারটিকে ইন্টিজার করে নিলেই হয় । ক্যারেক্টারকে ইন্টিজার করতে হলে ।

// char to int 
char c = '1';
int a = c - '0';

printf("%d",a);

এর ফলে আপনি direction ও distance বের করতে পারবেন সহজে

// select a string
str[] = "N9W2N3W5S9E2S6";  // you can take it as input 
char d; // for direction
int ds; // for distance


int i;
i=0;
d = str[i];
ds = str[i+1] - '0';
printf("%c -> %d\n",d,ds); // output N -> 9

আর পুরো কোডটি হবে

char str[] = "N9W2N3W5S9E2S6";  // you can take it as input
char val[100]; // for separate int
char d; // for direction
int ds; // for distance

int x=2,y=2;


int i,j;
i=0;
d = str[i];

while(d!='\0'){
    ds = str[i+1] - '0';
    printf("%c -> %d\n",d,ds); // output N -> 9/ output N -> 9

    if(d=='E') x = x+ds;
    else if(d=='W') x = x-ds;
    else if(d=='N') y = y+ds;
    else if(d=='S') y = y-ds;

    i = i+2;
    d = str[i];
}

printf("%d %d",x,y);
permanent link

answered 22 Mar '16, 06:42

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

আপনি একটা array রাখতে পারেন । অথবা ২ টা variable x আর y । যদি আমরা E/W আর m পাই তবে x এর সাথে -m/m যোগ করব এবং N/S m পাই y এর সাথে m/-mযোগ করব । আর x y প্রিন্ট করে দিব । ব্যাস :-)

permanent link

answered 17 Mar '16, 16:59

catGotBored's gravatar image

catGotBored
313

Seta amio jani vaiya ,kintu vaiya amar hishebe miltese na, onek try kortesi,Amar output er shate hisabe mile na

(17 Mar '16, 17:18) AhadKhan

Input array te kivabe rakbo

(17 Mar '16, 17:42) AhadKhan

অবশেযে মিলিয়েছি অনেক কষ্ট করে। তিন দিন ধরে নিয়ে আছি এইটা নিয়ে.........

কোড --http://ideone.com/gOoiAS

permanent link

answered 17 Mar '16, 18:24

AhadKhan's gravatar image

AhadKhan
95220

1

ভাইয়া আপনি কোন জাজ এর প্রব্লেম সল্ভ করছেন?

(19 Mar '16, 09:19) Zahirul_Islam_Monir

Codemarshal

(19 Mar '16, 09:45) AhadKhan
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
×213
×70
×5

question asked: 17 Mar '16, 09:08

question was seen: 1,143 times

last updated: 22 Mar '16, 06:43