Loading...
Icakiss avatar Icakiss 0 Точки

03. Plant Discovery Final Exam

Условието на задачата пише ясно : Note: If any of the command is invalid, print "error"

Загубих един час, докато не ми казаха да погледна слидо.

И пак я докарах само до 60/100.

function solve(arr) {
    let n = arr.shift()
    let obj = {}
    let countRatings = {}
    for (let i = 1; i <= n; i++) {
        let line = arr.shift().split('<->')
        let [plant, rare] = [...line]
        rare = Number(rare)
        if (obj.hasOwnProperty(plant)) {
            obj[plant][0] += rare
        } else {

            obj[plant] = [rare]
        }
    }
    line = arr.shift()
    while (line != "Exhibition") {
        line = line.split(': ')
        let [comm, plantThings] = [...line]
        plantThings = plantThings.split(' - ')
        
     if(obj.hasOwnProperty(plantThings[0])){   

        if (comm === 'Rate') {
            let [plant, rate] = [...plantThings]
            rate = Number(rate)
            if (obj[plant][1] == undefined) {
                obj[plant].push(rate)

            } else {
                obj[plant][1] += rate
            }


            if (countRatings.hasOwnProperty(plant)) {

                countRatings[plant] += 1
            } else {
                countRatings[plant] = 1
            }
        } else if (comm === 'Update') {
            let [plant, rare] = [...plantThings]
            rare = Number(rare)
            obj[plant][0] = rare
        } else if (comm === 'Reset') {
            let [plant] = [...plantThings]
            countRatings[plant] = 0
            obj[plant][1] = 0
        }
    } else {
        console.log('error');
    }
        line = arr.shift()
    }
    let array = Object.entries(obj)
    for (let line of array) {
        let i = array.indexOf(line)
        let name = line[0]
        let count = +countRatings[name]
        if (count != 0) {
            array[i][1][1] = +array[i][1][1] / count
        }
    }
 
    array = array.sort((a, b) => b[1][0] - a[1][0] || b[1][1] - a[1][1])

    console.log(`Plants for the exhibition:`)
    for (const line of array) {
        let name = line[0]
        console.log(`- ${name}; Rarity: ${line[1][0]}; Rating: ${(line[1][1]).toFixed(2)}`)


    }
}

 

Тагове:
0
JavaScript Fundamentals
Tzigoriyn avatar Tzigoriyn 44 Точки

Не ми достигна времето за тази, нещо сбъгясах.

Но погледни този твой ред:

if (obj.hasOwnProperty(plant)) {
            obj[plant][0] <span style="background-color:#ff0000">+</span>= rare

в заданието се казва - "If you receive a plant more than once, update its rarity."

Аз поскоро го разбирам че трябва да замениш стойността с новата, а не да я събираш с първат, с моя беден англиски update=актуализация, от чичоГошоПреводач ;).

 

if (comm === 'Rate') {
            let [plant, rate] = [...plantThings]
            rate = Number(rate)
            if (obj[plant][1]<span style="background-color:#ff0000">(на тази позиция вече имаш стойност)</span> == undefined) {
                obj[plant].push(rate)

Ти вече имаш обект, както и инпут защо го сравняваш с undefined.

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

Тук обаче е момнта да попитам и аз да ли са верни насоките ми. За което благодаря предварително.

0
ZOROBOY avatar ZOROBOY 6 Точки

Колега, според мен си прав за събирането на разстенията, но има и още нещо. Мисля, че големия капан е в проверката за валидна команда.

0
10/08/2020 22:37:37
Tzigoriyn avatar Tzigoriyn 44 Точки

Моята одея е да го направя със switch-case, при което при невалидна команда, отива извън кейса с кое автоматично е направена тази проверка. Благодаря за вниманието!

0
ZOROBOY avatar ZOROBOY 6 Точки

Ти си ок колега - аз забих 2 часа на 37 точки :(  .... след изпита мисля че си открих грешката, но беше късно. Докато не пробвам не мога да съм сигурен, но мисля, че целия ми проблем е в кастването на Rarity вход-а и си го печатам като стринг - друго не виждам какво може да е. След работа ще погледна кода ти и ще ти пиша пак, но на пръв поглед мисля че колегата е прав ;) и може би трябва да добавиш още някоя проверка за валиден вход и отпечатване на 'error', но това можем да тестваме като пуснат изпита на 'practice'....

0
ZOROBOY avatar ZOROBOY 6 Точки

Колега Tzigoriyn, според мен си прав за събирането на разстенията, но има и още нещо. Мисля, че големия капан е в проверката за валидна команда.

Колега Icakiss - Според мен двумерния масив има своите плюсове, но аз лично се стремя да избягвам привеждането на всичко към масиви (комфортна зона) и да използвам предимно обекти, защото JS е обектно ориентиран език и както казват в JS всичко е обект :)  . Аз лично използвах обект с пропертита, които дават яснота кое какво е  и не се гадае кое [0][1]... [1][0]... какво е и кода е по четим и лесен за проследяване.

Като човек изкарал 37 на тази задача и 220 общ резултат на финалния изпит не се наемам да давам съвети - изказвам лично мнение, защото за мен моя резултат си е провал. Все пак ще пусна и моя код, ако на някой му е интересно да разгледа - може пък да дам някоя идея на някой  :) ....

https://pastebin.com/3NtUyJAG

''' да програмираш е забавно, предизвикателно и интересно.... bring them all.... :)

0
MapoBG avatar MapoBG 36 Точки

Здравейте,

Някой успял да изкара 100/100, може ли да сподели решение?

Стигнах до 50/100, но повече не мога да изкарам.

Като абсолютен прецедент за мен, успях да пусна код, който дава 100% ОК при нулеви тестове и 0/100 на реалните такива, което по мое лично мнение означава, че нещо определено не е наред в заданието/тестовете, а все пак това е изпитна задача......

 

Код 0/100, с 100% работещи 0-ви тестове:

https://pastebin.com/4wNF4cra

50/100 в Judge:

https://pastebin.com/AfscV8zf

Задача:

https://judge.softuni.bg/Contests/Practice/Index/2518#2

 

Поздрави,

0
MapoBG avatar MapoBG 36 Точки

За втори път ми хващаш грешка свързана с arr.length - вземам си бележка и дано да е за последен :) !

Благодаря!

Поздрави,

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