From c1a688bf2f45c96e7ce4f296e75d5bd66b51d06b Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 20 Jan 2022 20:49:44 +0100 Subject: [PATCH] dynamic-programming(i): add day 2 and rename day 1 Signed-off-by: Matej Focko --- .../{day-1 => day-01}/fibonacci-number.rb | 0 .../{day-1 => day-01}/tribonacci.rb | 0 .../day-02/climbing-stairs.rb | 27 ++++++++++++++++++ .../day-02/min-cost-climbing-stairs.rb | 28 +++++++++++++++++++ 4 files changed, 55 insertions(+) rename study-plan/dynamic-programming/{day-1 => day-01}/fibonacci-number.rb (100%) rename study-plan/dynamic-programming/{day-1 => day-01}/tribonacci.rb (100%) create mode 100644 study-plan/dynamic-programming/day-02/climbing-stairs.rb create mode 100644 study-plan/dynamic-programming/day-02/min-cost-climbing-stairs.rb diff --git a/study-plan/dynamic-programming/day-1/fibonacci-number.rb b/study-plan/dynamic-programming/day-01/fibonacci-number.rb similarity index 100% rename from study-plan/dynamic-programming/day-1/fibonacci-number.rb rename to study-plan/dynamic-programming/day-01/fibonacci-number.rb diff --git a/study-plan/dynamic-programming/day-1/tribonacci.rb b/study-plan/dynamic-programming/day-01/tribonacci.rb similarity index 100% rename from study-plan/dynamic-programming/day-1/tribonacci.rb rename to study-plan/dynamic-programming/day-01/tribonacci.rb diff --git a/study-plan/dynamic-programming/day-02/climbing-stairs.rb b/study-plan/dynamic-programming/day-02/climbing-stairs.rb new file mode 100644 index 0000000..a52586e --- /dev/null +++ b/study-plan/dynamic-programming/day-02/climbing-stairs.rb @@ -0,0 +1,27 @@ +# @param {Integer} n +# @return {Integer} +def climb_stairs(n) + possible_ways = [0, 1, 2] + + k = 3 + while possible_ways.size <= n do + possible_ways.push(possible_ways[k - 1] + possible_ways[k - 2]) + k += 1 + end + + return possible_ways[n] +end + +RSpec.describe "climb_stairs" do + it "1 is 1" do + expect(climb_stairs(1)).to eq(1) + end + + it "2 is 2" do + expect(climb_stairs(2)).to eq(2) + end + + it "3 is 3" do + expect(climb_stairs(3)).to eq(3) + end +end diff --git a/study-plan/dynamic-programming/day-02/min-cost-climbing-stairs.rb b/study-plan/dynamic-programming/day-02/min-cost-climbing-stairs.rb new file mode 100644 index 0000000..01ac4f2 --- /dev/null +++ b/study-plan/dynamic-programming/day-02/min-cost-climbing-stairs.rb @@ -0,0 +1,28 @@ +# @param {Integer[]} cost +# @return {Integer} +def min_cost_climbing_stairs(cost) + def get(cost, k) + if k < 0 || k >= cost.size then + return 0 + end + return cost[k] + end + + i = cost.size - 1 + while i >= 0 do + cost[i] += [get(cost, i + 1), get(cost, i + 2)].min + i -= 1 + end + + return cost.take(2).min +end + +RSpec.describe "min_cost_climbing_stairs" do + it "of [10,15,20] is 15" do + expect(min_cost_climbing_stairs([10,15,20])).to eq(15) + end + + it "of [1,100,1,1,1,100,1,1,100,1] is 6" do + expect(min_cost_climbing_stairs([1,100,1,1,1,100,1,1,100,1])).to eq(6) + end +end