DEV Community

loading...

Daily Challenge #83 - Deodorant Evaporator

thepracticaldev profile image dev.to staff ・1 min read

This program tests the life of an evaporator containing a gas.

We know the content of the evaporator (content in ml), the percentage of foam or gas lost every day (evap_per_day) and the threshold (threshold) in percentage beyond which the evaporator is no longer useful. All numbers are strictly positive.

The program reports the nth day (as an integer) on which the evaporator will be out of use.

Note: Content is in fact not necessary in the body of the function "evaporator", you can use it or not use it, as you wish. Some people might prefer to reason with content, some other with percentages only. It's up to you but you must keep it as a parameter because the tests have it as an argument.


This challenge comes from g964 from CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Discussion

pic
Editor guide
Collapse
pmkroeker profile image
Peter

In Go! This assumes that the evaporator is always filled up to 100%.

func evaporator(evapPerDay, threshold float64) int {
    days := 0
    fill := 100.0
    for fill >= threshold {
        days += 1
        fill -= (fill * evapPerDay / 100)
    }
    return days
}

Go Playground Example

EDIT:
Forgot to take consider that the evapPerDay is based on the current fill not the starting.

Collapse
bhuvan profile image
Bhuvan Ganesan

Javascript version

const evaporator = (content, evapPerDay, threshold) => {
  let  outOfUseDays = 0, percentage = 100;  
  while (percentage > threshold) {
    percentage = percentage - percentage * (evapPerDay / 100);
    outOfUseDays += 1;
  }
  return outOfUseDays;
}
//console.log('evaporator --> ',evaporator('ml',7,2));
Collapse
aminnairi profile image
Amin

Elm

getDaysBeforeEvaporation : Float -> Float -> Int
getDaysBeforeEvaporation percentageBeforeUnusable percentageLostPerDay =
    let
        percentageBeforeUnusableClamped : Float
        percentageBeforeUnusableClamped =
            percentageBeforeUnusable
                |> clamp 1 100

        percentageLostPerDayClamped : Float
        percentageLostPerDayClamped =
            percentageLostPerDay
                |> clamp 1 100
    in
    floor <| (100 - percentageBeforeUnusableClamped) / percentageLostPerDayClamped

Playground

Try it online here.

Collapse
kvharish profile image
K.V.Harish

My solution in js


const evaporator = (netContent = 100, evapPerDay, threshold) => {
  let  nthDay = 0;  
  while (netContent >= threshold) {
    netContent -= (netContent * (evapPerDay / 100));
    nthDay++;
  }
  return nthDay;
}

Collapse
delixx profile image
DeLiXx
function lifespan(evap_per_day, threshold) {
    let content = 100;
    let day = 0;
    while (fill >= threshold) {
        fill *= 1-(evap_per_day/100);
        day++;
    }
    return day;
}