সমস্যা
একটি বগল বোর্ড হলো একটি ২D অ্যারে যেটি অক্ষরগুলো ধারণ করে, যেমন:
const board = [
["I","L","A","W"],
["B","N","G","E"],
["I","U","A","O"],
["A","S","R","L"]
];আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা বগল বোর্ড এবং একটি স্ট্রিং নেবে এবং যাচ্চ করবে যে স্ট্রিংটি বোর্ডে একটি বৈধ গেস (guess) কিনা। বৈধ গেস হলো এমন স্ট্রিং যেটি আড়াঘাড় (horizontally, vertically, বা diagonally) সন্নিহিত সেলগুলো কানেক্ট করে তৈরি করা যায়, এবং কোনো সেল دوبارہ ব্যবহার করা হয় না।
উদাহরণস্বরূপ, উপরের বোর্ডে "LINGO", এবং "ILNBIA" সব বৈধ গেস, কিন্তু "BUNGIE" এবং "SINUS" বৈধ নয়।
উদাহরণ
নিচে কোডটি দেওয়া হলো:
const board = [
["I","L","A","W"],
["B","N","G","E"],
["I","U","A","O"],
["A","S","R","L"]
];
const guess = 'BINGO';
const checkWord = (board = [], guess = '') => {
const numRows = board.length;
const numCols = board[0].length;
let queue = board.reduce((acc, row, i) => {
row.forEach((x, j) => {
if (x === guess[0]) {
acc.push ( { pos: {r: i, c: j} , nextIndex: 1, path: [numCols*i + j ] } );
}
});
return acc;
}, []);
let exploreWord = (obj, queue) => {
let allMoves = [ {r: obj.pos.r - 1, c: obj.pos.c },
{r: obj.pos.r + 1, c: obj.pos.c },
{r: obj.pos.r, c: obj.pos.c - 1 },
{r: obj.pos.r, c: obj.pos.c + 1 },
{r: obj.pos.r - 1, c: obj.pos.c - 1 },
{r: obj.pos.r - 1, c: obj.pos.c + 1 },
{r: obj.pos.r + 1, c: obj.pos.c - 1 },
{r: obj.pos.r + 1, c: obj.pos.c + 1 }];
allMoves.forEach((o) => {
let index = numCols * o.r + o.c;
if (o.r >= 0 && o.r < numRows && o.c >= 0 && o.c < numCols) {
if (board[o.r][o.c] === guess[obj.nextIndex] && !obj.path.includes(index)) {
let cloneObj = JSON.parse(JSON.stringify(obj));
cloneObj.pos = { r: o.r, c: o.c };
cloneObj.nextIndex += 1;
cloneObj.path.push(index);
queue.push(cloneObj);
}
}
});
};
while (queue.length > 0) {
let obj = queue.shift();
if (obj.nextIndex === guess.length) {
return true;
}
exploreWord(obj, queue);
}
return false;
};
console.log(checkWord(board, guess));কোড ব্যাখ্যা
আমরা যে ধাপগুলো নিলাম:
- ২D অ্যারে স্ক্যান করে প্রথম অক্ষর খুঁজে বের করলাম
- পজিশন এবং ইনডেক্স কিউতে পুশ করলাম
- কিউ খালি না হওয়া পর্যন্ত প্রথম অবজেক্ট পপ করি, সব দিক এক্সপ্লোর করি, মিল পেলে আপডেট করি কিউতে, নয়লে ডিসকার্ড করি। মিল পাওয়া যাওয়া বা আর কোনো মিল না থাকা পর্যন্ত চলতে থাকে।
আউটপুট
true