DEV Community staff staff

Posted on

Daily Challenge #83 - Deodorant Evaporator

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 with your suggestions!

Top comments (5)

pmkroeker profile image
Peter • Edited

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

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

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));
aminnairi profile image


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

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


Try it online here.

kvharish profile image
K.V.Harish • Edited

My solution in js

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

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