Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Elena123456 avatar Elena123456 235 Точки

06. System Components - "Error"

Здравейте, ще се радвам, ако някой ми даде идея защо при полежение, че получавам правилния аутпут Judge не ми приема решението. Изписва ми със стряскащи червени букви- "Error".

Предварително благодаря! smiley

 

Условие:  https://pastebin.com/aXag7mNQ

Judge: https://judge.softuni.bg/Contests/Practice/Index/2371#5

Моето решение: https://jsfiddle.net/5wL7ebma/

0
JavaScript Advanced
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

Hi Eli,

From what I can see, error was triggered when printing out the final result string. I hope the refactoring makes it easier to debug the code step-by-step. 

Code:

function solve(array) {
    let register = {};
    array.forEach(line => {
        let [systemName, componentName, subcomponentName] = line.split(' | ');
        if (!register[systemName]) {
            register[systemName] = {};
            register[systemName][componentName] = [];
            register[systemName][componentName].push(subcomponentName);
        } else if (register[systemName] && !register[systemName][componentName]) {
            register[systemName][componentName] = [];
            register[systemName][componentName].push(subcomponentName);
        } else {
            register[systemName][componentName].push(subcomponentName);
        }
    })

    // Order the systemsName in register by amount of components, in descending order, as first criteria, and by alphabetical order as second criteria
    // as string [] only keys

    // let sortedSystemsName = Object.keys(register).sort((a, b) => {
    //     if (Object.keys(register[b]).length > Object.keys(register[a]).length) {
    //         return 1;
    //     } else if (Object.keys(register[b]).length === Object.keys(register[a]).length) {
    //         return a.localeCompare(b);
    //     } else {
    //         return -1;
    //     }
    // });


    sortedSystemsName = Object.entries(register).sort(([systemNameA, componentsA], [systemNameB, componentsB]) => {
        return Object.values(componentsB).length - Object.values(componentsA).length || systemNameA.localeCompare(systemNameB);
    });

    sortedSystemsName.forEach(([currentSystemName, components]) => {
        console.log(currentSystemName); // as string

        let componentCollection = Object.entries(components);
        // let sortedComponentsBySubcomponentsLength = Object.keys(register[currentSystemName]).sort((a, b) =>
        //     Object.keys((register[currentSystemName][b]).length - Object.keys((register[currentSystemName][a].length))));

        let sortedComponents = componentCollection
            .sort(([componentNameA, subcompenentsA], [componentNameB, subcompenentsB]) => subcompenentsB.length - subcompenentsA.length);

        // sortedComponentsBySubcomponentsLength.forEach((currentComponent => {
        //     console.log(`|||${currentComponent}`); // as string

        //     register[currentSystemName][currentComponent].forEach(subcomponent => console.log(`||||||${subcomponent}`));
        // }));

        sortedComponents.forEach((([conName, subCollection]) => {
            console.log(`|||${conName}`); // as string

            subCollection.forEach(sub => console.log(`||||||${sub}`));
        }));
    });
}

 

 

1
Elena123456 avatar Elena123456 235 Точки

Thanks! I will debug your solution to understand what's happening. smiley

Have a nice weekend!

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