Софтуерно Инженерство
Loading...
+ Нов въпрос
valllentinnaa avatar valllentinnaa 6 Точки

Sudomu* /JS Advanced/

Здравейте! Опитвам се да реша задача: https://judge.softuni.bg/Contests/Compete/Index/1802#9, до момента това е, което съм написала https://pastebin.com/9CQd965g (кодът не е на ниво, но искам да го refactor-на по-късно), за момента работи локално, но в judge гърми. Не знам как да подходя, след като при мен уж е окей, а там не.. Някой има ли идея?

Тагове:
1
JavaScript Advanced
willystyle avatar willystyle 1143 Точки
Best Answer

Здравей,

1) Махни document.addEventListener('DOMContentLoaded', () => { , скрипта се зарежда след като е зареден HTML-a, a в джъдж не съм сигурен, че има такъв евент.

2) Търсенията в ДОМ връщат array-like objects, а не обикновени масиви. Разликата е тънка и новите браузери съвсем я намалят(но в джъдж имплементацията сигурно е друга и прави разлика), но като цяло те са обекти които имат length но функцийте за масиви не се прилагат върху тях директно (ползват се .call или други хватки, предлагам ти за да работи форийч в джъдж да замениш inputs с [...inputs], това ги трансформира в нормални масиви.

Това ще ти донесе 84%, останалите се губят според мен в логиката ти за проверка за sudomu. Понеже не можах да разчета твоята, я промених:

function solve() {
    let inputs = document.querySelectorAll('input');
    const checkBtn = document.querySelectorAll('button')[0];
    const clear = document.querySelectorAll('button')[1];

    const table = document.querySelector('table');
    const checkPar = document.querySelectorAll('#check p')[0];

    checkBtn.style.cursor = 'pointer';
    clear.style.cursor = 'pointer';

    clear.addEventListener('click', reset);
    checkBtn.addEventListener('click', checkResult);

    function reset() {
        [...inputs].forEach(input => (input.value = ''));
        table.style.border = 'none';
        checkPar.textContent = '';
    }

    function checkResult() {
        let matrix = [
            [inputs[0].value, inputs[1].value, inputs[2].value],
            [inputs[3].value, inputs[4].value, inputs[5].value],
            [inputs[6].value, inputs[7].value, inputs[8].value]
        ];
        isSudomu = true;
        for (let i = 1; i < matrix.length; i++) {
            let row = matrix[i];
            let col = matrix.map(row => row[i]);
            if (col.length != [...new Set(col)].length || row.length != [...new Set(row)].length) {
                isSudomu = false;
                break;
            }
        }
        if (isSudomu) {
            table.style.border = '2px solid green';
            checkPar.style.color = 'green';
            checkPar.textContent = 'You solve it! Congratulations!';
        } else {
            table.style.border = '2px solid red';
            checkPar.style.color = 'red';
            checkPar.textContent = 'NOP! You are not done yet...';
        }
    }
}

 

1
08/10/2019 17:55:23
valllentinnaa avatar valllentinnaa 6 Точки

Благодаря! Много ми помогна :)

1