প্রশ্ন-2.1 কোন একটা বাক্যের মধ্যে যে সব অক্ষর একবারের চাইতে বেশি সংখ্যকবার আছে সেগুলা শুধু একবার রেখে বাকিগুলা সরায় দিবি।
উত্তরঃ
একটা array এর মধ্যে কোন একটা উপাদান আছে কিনা সেটা চেক করা আর কোন একটা স্ট্রিং এর মধ্যে আছে কিনা দুইটাই চেক করার সিস্টেম একই রকমের। indexOf লিখে চেক করতে হয়।
function removeDuplicate(sentence){
var output = "";
for(var i = 0; i < sentence.length; i++){
var letter = sentence[ i ];
if(output.indexOf(letter) == -1){
output = output + letter;
}
}
return output;
}
উপরের কোড কে removeDuplicate("isting bisting disting"); লিখে কল করলে আউটপুট হিসেবে "istng bd" পাওয়া যাবে। সেখানে কোন ডুপ্লিকেট ক্যারেক্টার থাকবে না।
প্রশ্ন-2.2duplicate সরানোর সময় কোন একটা উপাদান অলরেডি যোগ করা হয়ে গেছে কিনা চেক করে। যদি অলরেডি যোগ করা হয়ে যায় সেটা পরে আর যোগ করা হয় না। সেজন্য কোন একটা নাম একবারের বেশি যোগ করা হয় না। এইবার একটা প্রোগ্রাম লেখ যেখানে কোন একটা উপাদান একবারের বেশি সংখ্যক থাকলে সেই উপাদান যোগই করবি না। অর্থাৎ নাম একবারের বেশি দিলে তাকে ইগনোর করবি।
উত্তরঃ
এই কোড কয়েকভাবে করা যায়। একটা উপায় হচ্ছে হ্যাশ টেবিল বা ডিকশনারি দিয়ে করা। আরেকটা উপায় হচ্ছে indexOf এর মতো আরেকটা জিনিস আছে সেটা হচ্ছে lastIndexOf । এই lastIndexOf এর কাজ হচ্ছে কোন একটা array মধ্যে উপাদান পিছনের দিক থেকে খুঁজে।
যেমন ধর [১, ২, ৩, ৪১, ৩, ৭ ] এই array এর মধ্যে ১ মাত্র একবার আছে। তাই এইটাকে সামনের দিক থেকে খুঁজলেও প্রথম পজিশনে পাওয়া যাবে। আবার পিছনের দিক থেকে খুঁজলেও প্রথম পজিশনে পাওয়া যাবে। তাই বলা যায় ১ সংখ্যাটা একবারের বেশি নাই। অন্যদিকে তুই যদি ৩ কে খুঁজতে যাস। তাহলে শুরুর দিক থেকে খুঁজলে পাওয়া যাবে তৃতীয় পজিশনে আর শেষের দিক থেকে খুঁজলে পাওয়া যাবে পঞ্চম পজিশনে।
তারমানে indexOf আর lastIndexOf একই পজিশন দেখাচ্ছে না। তাই এই উপাদানটা একাধিকবার আছে তাই সেটাকে আমরা আমাদের আউটপুট selected নামক array এর মধ্যে যোগ করবো না।
আরেকটা জিনিস খেয়াল রাখবি। আগের কোড করার সময় আমরা চেক করতেছিলাম যে selected নামক array এর মধ্যে উপাদানটা যোগ করা হয়ে গেছে কিনা। এখন যেহেতু names নামক array এর মধ্যে একাধিকবার যোগ করা হয়েছে কিনা সেটা চেক করতে হবে। তাই indexOf আর lastIndexOf এই দুই জিনিসটা চেক করতে হবে names নামক array থেকে
আর এই ফাংশনের কাজ যেহেতু যে নামগুলো একবারের বেশি আসেনি তাই এই ফাংশনের নামটা একটু চেইঞ্জ করে দে।
function getNotRepeated(names){
var selected = [ ];
for(var i = 0; i < names.length; i++){
var name = names[ i ];
if(names.indexOf(name) == names.lastIndexOf(name)){
selected.push(name);
}
}
return selected;
}
এই ফাংশন কে removeDuplicate(["pitu", "ritu", "jitu", "situ", "mitu", "nitu", "bitu", "jitu", "jitu", "bitu", "situ", "litu", "gitu", "litu"]) লিখে কল করলে আউটপুট হিসেবে ["pitu", "ritu", "mitu", "nitu", "gitu"] পাওয়া যাবে। অর্থাৎ যে নামগুলো একবারের বেশি আসেনি সেগুলাকেই আউটপুট হিসেবে দেখাবে।
প্রশ্ন-2.3কোন একটা array এর মধ্যে উপাদানগুলা জোড় সংখ্যকবার থাকলে সেগুলা একদম সরায় দিবি। আর যেগুলা বিজোড় সংখ্যক থাকবে সেগুলা শুধু একবার করে রাখবি। এ রকম একটা প্রোগ্রাম লিখ।
উত্তরঃ
Description coming soon... email for more help
function getOddTimesRepeated(names){
var uniqueNames = [ ];
var output = [];
var nameCount = {};
for(var i = 0; i < names.length; i++){
var name = names[ i ];
if(uniqueNames.indexOf(name) == -1){
uniqueNames.push(name);
nameCount[name] = 1;
}
else{
nameCount[name] = nameCount[name] +1;
}
}
for(var i = 0; i < uniqueNames.length; i++){
var name = names[ i ];
if(nameCount[name]%2!=0){
output.push(name);
}
}
return output;
}