Професионална програма
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 13 Точки

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

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

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 13 Точки

Моята одея е да го направя със 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 27 Точки

Здравейте,

Някой успял да изкара 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 27 Точки

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

Благодаря!

Поздрави,

1