Codewars Kata SQL

Simple Fun #74: Growing Plant

Task

Each day a plant is growing by upSpeed meters. Each night that plant's height decreases by downSpeed meters due to the lack of sun heat. Initially, plant is 0 meters tall. We plant the seed at the beginning of a day. We want to know when the height of the plant will reach a certain level.

Example

For upSpeed = 100, downSpeed = 10 and desiredHeight = 910, the output should be 10.

After day 1 --> 100
After night 1 --> 90
After day 2 --> 190
After night 2 --> 180
After day 3 --> 280
After night 3 --> 270
After day 4 --> 370
After night 4 --> 360
After day 5 --> 460
After night 5 --> 450
After day 6 --> 550
After night 6 --> 540
After day 7 --> 640
After night 7 --> 630
After day 8 --> 730
After night 8 --> 720
After day 9 --> 820
After night 9 --> 810
After day 10 --> 910

For upSpeed = 10, downSpeed = 9 and desiredHeight = 4, the output should be 1.

Because the plant reach to the desired height at day 1(10 meters).

After day 1 --> 10

Input/Output

Input

-----------------------------------------
| Table | Column | Type |
|---------------+----------------+------|
| growing_plant | down_speed | int |
| | up_speed | int |
| | desired_height | int |
-----------------------------------------

Columns

  • up_speed: A positive integer representing the daily growth. Constraints: 5 ≤ up_speed ≤ 100.
  • down_speed: A positive integer representing the nightly decline. Constraints: 2 ≤ down_speed < up_speed.
  • desired_height: A positive integer representing the threshold. Constraints: 4 ≤ desired_height ≤ 1000.

Output

-------------------
| Column | Type |
|----------+------|
| id | int |
| num_days | int |
-------------------

num_days is the number of days that it will take for the plant to reach/pass desiredHeight (including the last day in the total count).

Solution:

SELECT id, 
CASE WHEN desired_height <= up_speed THEN 1
ELSE CEIL((desired_height - up_speed)::decimal / (up_speed - down_speed))::int + 1 END AS num_days
FROM growing_plant;

Link

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store