Професионална програма
Loading...
+ Нов въпрос
kristiqn.stoikow11 avatar kristiqn.stoikow11 4 Точки

JavaScript Fundamentals - Object And Classes may 2019/Exercise - 10. Systems Register

Здравейте, доста пот хвърлих в продължение на седмица или 2 по следната задача, но безуспешно, та затова прибягвам до крайни мерки - помагайте с решение ако е възможно, благодаря предварително колеги..
 
Линкове: 
Задача :

https://softuni.bg/trainings/resources/officedocument/41048/exercise-js-fundamentals-may-2019/2343

Джъдж:

https://judge.softuni.bg/Contests/Practice/Index/1322#9

1
JavaScript Fundamentals
TeodorStefanovPld avatar TeodorStefanovPld 1276 Точки

е Покажи си кода да можем да ти помогнем. Иначе като я гледам е просто списък от  обекти който имат property   списък от обекти или нещо подобно. Честно казано нагласянето на принтирането ще е най-тегаво.

общо взето 3 обекта и един foreach за обхождане на входа.

0
16/09/2019 07:06:49
kristiqn.stoikow11 avatar kristiqn.stoikow11 4 Точки

Кодът ми не стига дори до някакво нагласяне на данните.. затова не съм го пуснал. Как да създам обект с пропърти обект? 

0
TeodorStefanovPld avatar TeodorStefanovPld 1276 Точки

Ами не искам да пускам готово решение. Така не се учи. А и няма смисъл щом не можеш и да разбереш обектите все още. 

Но ето пример : кола с двигател и гуми като колата е обект двигателя е обект и гумите и те :Д

let tyre ={

"yearOfMaking":2019,

"durability:100

}

let engine={

"horsepower":300,

"pistons":4

}

let car ={

"engine":engine,

"tyres":[tyre,tyre,tyre,tyre],

"radio":{

"vendor":"sony",

"yearOfCreation":2000,

"maxVolume":30

}

}

ето така се прави, като радиото си е пак обект просто го инициализирам директно на property-то. В js property може да ти е всичко мога да сложа дори функция и тя ще си е валидна като property на обекта. в по високите нива на js и hoc  и тн.. Това си е практика. примерно на колата мога да и сложа property "start" : function(){console.log("started")} и това си е напълно валидно и като кажа. car.start и ще го конзол log-не. Като ти гледам задачата имаш един обект system който държи в себе си components това е лист и тези components държат лист от subcomponents. И после имаш input  разделяш го по space. И ти остава да си направиш проверките дали вече имаш някои от този тип system component subcomponent и това е. Малко nested objects но нищо особенно.

0
16/09/2019 08:05:50
NqkoiSiSmile avatar NqkoiSiSmile 5 Точки

function solve(input) {


    let obj = {};

    for (let line of input) {
        let count = 0;

        let [fisrtName, secondName] = line.split(' ');
        count += 1 + fisrtName.length + secondName.length;

        if (!obj.hasOwnProperty(line)) {
            obj[line] = count
        }
    }


    let print = Object.entries(obj).forEach((e) => {
        console.log(`Name: ${e[0]} -- Personal Number: ${e[1]}`)
    })
}

 

ето ти колега дава 66 може би защото в единия тест са сложили 3 имена. но Колегата е прав с готов код не става. Обектите са нещо което ако не схванещ JavaScript ще ти е мега труден. Казвам го като човек който мина поправка в Теха заради тях.Общо взето следвай принципа:

1. Четеш си входа проверяваш,

2. създаваш обекта(не винаги се решават задачите с него но ако искаш да ги учиш саветвам те само с обекти),

3. Проверяваш дали съществува името в обекта ако не пълниш(според проблема който ти се дава)

4.Пълниш обекта

5.Сортираш

и упражняваш всички кейсове. Вземаш всички изпитни задачи за обекти и ще ги схванеш и после ще си кажеш еййй това е баси лената работа. Успехи в ученето

 

0
willystyle avatar willystyle 2422 Точки

Ще ти дам две решения, едно с обекти:

function solve(input) {
    let register = {};
    for (let line of input) {
        let [systemName, componentName, subcomponentName] = line.split(' | ');       
        if (!register.hasOwnProperty(systemName)) {
            register[systemName] = {};
        }
		if (!register[systemName].hasOwnProperty(componentName)) {
            register[systemName][componentName] = [];
        }
		register[systemName][componentName].push(subcomponentName);
    }
	let sortedKeys = Object.keys(register).sort((a, b) => Object.keys(register[b]).length - Object.keys(register[a]).length || a.localeCompare(b));
    sortedKeys.forEach((key) => {
        console.log(key);
		let sortedSubKeys = Object.keys(register[key]).sort((a, b) => Object.keys(register[key][b]).length - Object.keys(register[key][a]).length);
		sortedSubKeys.forEach((subKey) => {
			console.log(`|||${subKey}`);
			register[key][subKey].forEach((subComponent) => {
				console.log(`||||||${subComponent}`);				
			});			
		});
    });
}

и едно с мапове:

function solve2(params) {
    let systems = new Map();
    for (const row of params) {
        let [name, component, subComponent] = row.split(' | ');
        if (!systems.get(name)) {
            systems.set(name, new Map());
        }
        let setOfSybcomponents = systems.get(name).get(component);
        if (!setOfSybcomponents) {
            systems.get(name).set(component, []);
            setOfSybcomponents = systems.get(name).get(component);
        }
        setOfSybcomponents.push(subComponent);
    }
    let ident = '|||';
    let sortSystems = (a, b) => (b[1].size - a[1].size !== 0) ? b[1].size - a[1].size // By components count -> x[1].size
        : a[0] < b[0] ? -1 // By Name -> x[0]
            : a[0] > b[0] ? 1
                : 0;
    let result = [...systems]
        .sort((a, b) => sortSystems(a, b))
        .map(sys => sys[0]
            + '\n' + [...sys[1]]
                .sort((a, b) => b[1].length - a[1].length) // By subcomponents count -> x[1].length
                .map(c => ident + c[0] + '\n' + ident + ident + c[1].join('\n' + ident + ident))
                .join('\n')
        )
        .join('\n');
    console.log(result.trim());
}

 

1
vladovip avatar vladovip 6 Точки

Здравейте,

Аз почнах до някъде, но като стигнах до сортирането и.... чудо. Ето докъде успях да стигна, или поне така си мисля че съм на прав път...:

 

function orderedRegister(array) {

    let newRegister = [];

    for (let i = 0; i < array.length; i++) {

        let elements = array[i].split(' | ');

        let categoryProducts = {

            systemName: elements[0],

            componentName: elements[1],

            subcomponentName: elements[2],

        };     

        newRegister.push(categoryProducts);

    }

    newRegister.sort((a, b) => a.systemName.localeCompare(b.systemName));

...... и после ???

}

 

orderedRegister(  [

        'SULS | Main Site | Home Page',

        'SULS | Main Site | Login Page',

        'SULS | Main Site | Register Page',

        'SULS | Judge Site | Login Page',

        'SULS | Judge Site | Submittion Page',

        'Lambda | CoreA | A23',

        'SULS | Digital Site | Login Page',

        'Lambda | CoreB | B24',

        'Lambda | CoreA | A24',

        'Lambda | CoreA | A25',

        'Lambda | CoreC | C4',

        'Indice | Session | Default Storage',

        'Indice | Session | Default Security',   ]);

 

 

Благодаря.

 

 

 

0