Loading...
valllentinnaa avatar valllentinnaa 9 Точки

Sudomu* /JS Advanced/

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

Тагове:
1
JavaScript Advanced
willystyle avatar willystyle 2472 Точки
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 9 Точки

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

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.