+ Нов въпрос
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
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 6 Точки

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

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

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

0
ZOROBOY 6 Точки

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

0
ZOROBOY 6 Точки

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

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

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

https://pastebin.com/3NtUyJAG

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

0
MapoBG 29 Точки

Здравейте,

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

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

Благодаря!

Поздрави,

1