10. Tic-Tac-Toe
Здравейте, тази зад. ми дава 90/100 и единия тест не знам как да го оправя:
https://pastebin.com/Aw36uzhH
https://judge.softuni.bg/Contests/Compete/Index/2753#9
Здравейте, тази зад. ми дава 90/100 и единия тест не знам как да го оправя:
https://pastebin.com/Aw36uzhH
https://judge.softuni.bg/Contests/Compete/Index/2753#9
Проблемът е, че не прекъсвате играта ако всички полета са заети, а само когато свършат входните данни или някой от играчите спечели.
Това се вижда и от 3-ти нулев тест, при който програмата изписва "This place is already taken. Please choose another!" заради последната получена команда, вместо да приключи играта преди нея, защото всички игрови полета са вече заети.
["0 1",
"0 0",
"0 2",
"2 0",
"1 0",
"1 2",
"1 1",
"2 1",
"2 2",
"0 0"]
This place is already taken. Please choose another!
The game ended! Nobody wins :(
O X X
X X O
O O X
Пишете, ако не се сещате как може да се справите с този проблем (функция, която да проверява дали има свободни полета или пък брояч на заетите такива... варианти - много).
Да, с дебъгера и аз стигнах до това заключение, и пробвах с find, includes, every, с if проверки, и пак не успях да го измъдря, сигурен съм че е нещо простичко. Също се опасявам че този console.log This place is already taken. Please choose another! , може би не е добре да е сложен в else -a
Ако може да ми покажете как да проверя дали масивът не съдържа false, или ако има по добре решение, ще съм благодарен
Ето примерен вариант с минимални промени по кода, колкото да мине в Judge:
Сложих ги тези 2 реда , но не се получи, опитах и с този some да направя иф проверка при console.loga на This place is already taken. Please choose another! , но пак не успях
Мога ли да ви помоля да сложите целия работещ код, да видя къде ги слагате?
let dashboard = [[false, false, false],
[false, false, false],
[false, false, false]];
let win = false;
let player = 'X';
const hasFreeFields = (matrix) => matrix.some((arr) => arr.some(value => value === false));
for (let i = 0; i < input.length && hasFreeFields(dashboard); i++) {
let [row, col] = input[i].split(' ').map(num => Number(num));
if (!dashboard[row][col]) {
dashboard[row][col] = player;
if (checkForWinner(dashboard, player)) {
win = true;
break;
}
player = player === 'X' ? 'O' : 'X';
} else {
console.log("This place is already taken. Please choose another!");
}
}
if (win) {
console.log(`Player ${player} wins!`);
} else {
console.log("The game ended! Nobody wins :(");
}
dashboard.forEach(line => {
console.log(line.join('\t'));
});
Това е модифицираното решение:
Благодаря много!