In a small town the population is p0 = 1000
at the beginning of a year. The population regularly increases by 2 percent per year and moreover 50 new inhabitants per year come to live in the town. How many years does the town need to see its population greater or equal to p = 1200
inhabitants?
Note: Always keep the number of inhabitants as an integer. Round up when necessary.
At the end of the first year there will be:
1000 + 1000 * 0.02 + 50 => 1070 inhabitants
At the end of the 2nd year there will be:
1070 + 1070 * 0.02 + 50 => 1141 inhabitants
At the end of the 3rd year there will be:
1141 + 1141 * 0.02 + 50 => 1213
It will need 3 entire years to get to 1200 folks.
Parameters:
p0, percent, aug (inhabitants coming or leaving each year), p (population to surpass)
the function nb_year should return n number of entire years needed to get a population greater or equal to p.
aug is an integer, percent a positive or null number, p0 and p are positive integers (> 0)
Examples:
nb_year(1500, 5, 100, 5000) -> 15
nb_year(1500000, 2.5, 10000, 2000000) -> 10
Tests:
nbYear(1500, 5, 100, 5000)
nbYear(1500000, 2.5, 10000, 2000000)
nbYear(1500000, 0.25, 1000, 2000000)
Good luck!
This challenge comes from g964 on CodeWars. Thank you to 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!
Top comments (9)
Using an iterative style in Clojure. I think an iterative style is best suited for a sequential problem like this, and Clojure felt like a good fit.
This is a 7kyu question in codewar but it's a bit tricky.
I remember I solved it after tens of submissions, because one or two tests were failed for some reason.
Turned out that I should have to deal with integers more carefully.
Here is an answer for ruby version:
Javascript
Using a generator function to calculate the successive years
If you're using generators, go wild :v
or at least
(even though the following is actually shorter)
Here is my solution with PHP code snippets:
Lazy Haskell goodness:
General idea of the solution is to generate an infinite list of population growth per year with the recursive function
nbYear'
. Since Haskell is lazy, I can then use this infinite list to find the first item in the list, which exceeds the goal population.