pipesInPool.js
Здравейте, имам проблем със задача 02. Pipes In Pool от 3.2. Simple Conditions - Exam Problems от книгата JS Basics. Judge ми дава 93/100, но не виждам къде е грешката. Някой успя ли да получи 100/100? Благодаря.
https://pastebin.com/WnUnAUhh
https://judge.softuni.org/Contests/Practice/Index/930#1
Задача: тръби в басейн
Басейн с обем V има две тръби, от които се пълни. Всяка тръба има определен дебит (литрите вода, минаващи през една тръба за един час). Работникът пуска тръбите едновременно и излиза за N часа. Напишете програма, която изкарва състоянието на басейна, в момента, когато работникът се върне.
Входни данни
На функцията се подават четири числа (аргумента):
- Първият ред (аргумент) съдържа числото V – обем на басейна в литри – цяло число в интервала [1 … 10000].
- Вторият ред (аргумент) съдържа числото P1 – дебит на първата тръба за час – цяло число в интервала [1 … 5000].
- Третият ред (аргумент) съдържа числото P2 – дебит на втората тръба за час – цяло число в интервала [1 … 5000].
- Четвъртият ред (аргумент) съдържа числото H – часовете, в които работникът отсъства – число с плаваща запетая в интервала [1.0 … 24.00].
Изходни данни
Да се отпечата на конзолата едно от двете възможни състояния:
- До колко се е запълнил басейнът и коя тръба с колко процента е допринесла. Всички проценти да се форматират до цяло число (без закръгляне).
- "The pool is [x]% full. Pipe 1: [y]%. Pipe 2: [z]%."
- Ако басейнът се е препълнил – с колко литра е прелял за даденото време, число с плаваща запетая.
- "For [x] hours the pool overflows with [y] liters."
Имайте предвид, че поради закръглянето до цяло число се губят данни и e нормално сборът на процентите да е 99%, а не 100%.
Примерен вход и изход
Вход | Изход | Вход | Изход |
---|---|---|---|
1000 100 120 3 |
The pool is 66% full. Pipe 1: 45%. Pipe2: 54%. | 100 100 100 2.5 |
For 2.5 hours the pool overflows with 400 liters. |
Насоки и подсказки
За да решим задачата, ще прочетем входа, ще извършим няколко проверки и изчисления и ще отпечатаме резултата.
Обработка на входните данни
Първата ни стъпка е да прочетем входните данни:
Следващата ни стъпка е да декларираме и инициализираме променлива, в която ще изчислим с колко литра се е напълнил басейна за времето, в което работникът е отсъствал. Изчисленията ще направим като съберем стойностите на дебита на двете тръби и ги умножим по часовете, които са ни зададени като вход:
Извършване на проверки и обработка на изходните данни
След като вече имаме и стойността на количеството вода, което е минало през тръбите, следва стъпката, в която трябва да сравним това количество с обема на самия басейн.
Това ще направим с проста if-else
проверка, в която условието ще е дали количеството вода е по-малко от обема на басейна. Ако проверката върне true
, то трябва да разпечатаме един ред, който да съдържа в себе си съотношението между количеството вода, минало през тръбите, и обема на басейна, както и съотношението на количеството вода от всяка една тръба спрямо обема на басейна.
Съотношението е нужно да бъде изразено в проценти, затова и всички изчисления до момента в този ред ще бъдат умножени по 100. Стойностите ще бъдат вмъкнати с placeholders и тъй като има условие резултата в проценти да се форматира до две цифри след десетичния знак без закръгляне, то за целта ще използваме метода Math.trunc(…)
:
Ако проверката обаче върне резултат false
, то това означава, че количеството вода е по-голямо от обема на басейна, съответно той е прелял. Отново изхода трябва да е на един ред, но този път съдържа в себе си само две стойности - тази на часовете, в които работникът е отсъствал, и количеството вода, което е разлика между*влязлата вода и обема на басейна.
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/930#1.
Моят код дава 93%, както и Test #11 (Incorrect answer). А този дава 6/100.
Здравей, Saraalkadi,
Решението на колегата danielmarinow минава със 100/100 при предаване на този контест:
https://judge.softuni.org/Contests/Practice/Index/1658#0