Skip to content

Commit 4686c02

Browse files
committed
Fix: update 1444 Ruby solution
1 parent 816fa2e commit 4686c02

1 file changed

Lines changed: 28 additions & 53 deletions

File tree

algorithms/ruby/1444-number-of-ways-of-cutting-a-pizza.rb

Lines changed: 28 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -34,74 +34,49 @@
3434
3535
=end
3636

37+
# Runtime: 200 ms
38+
# Memory: 211.4 MB
3739
# @param {String[]} pizza
3840
# @param {Integer} k
3941
# @return {Integer}
4042
def ways(pizza, k)
41-
rows = pizza.size
42-
cols = pizza[0].size
43-
apples = Array.new(rows + 1) { Array.new(cols + 1, 0) }
44-
f = Array.new(rows) { Array.new(cols, 0) }
45-
46-
row = rows - 1
47-
while row >= 0
48-
col = cols - 1
49-
while col >= 0
50-
apples[row][col] = ((pizza[row][col] == "A") && 1 || 0) + apples[row + 1][col] + apples[row][col + 1] - apples[row + 1][col + 1]
51-
f[row][col] = (apples[row][col] > 0) && 1 || 0
52-
col -= 1
43+
r, c = pizza.size, pizza[0].size
44+
ap = Array.new(r + 1).map { Array.new(c + 1, 0) }
45+
(0...r).reverse_each do |i|
46+
(0...c).reverse_each do |j|
47+
x = ?A == pizza[i][j] ? 1 : 0
48+
ap[i][j] = x + ap[i + 1][j] + ap[i][j + 1] - ap[i + 1][j + 1]
5349
end
54-
row -= 1
5550
end
56-
51+
dp = Array.new(k).map { Array.new(r).map { Array.new(c, 0) } }
52+
dp[0] = Array.new(r).map.with_index { |_, i| Array.new(c).map.with_index { |_, j| ap[i][j] > 0 ? 1 : 0 } }
5753
mod = 1000000007
58-
remain = 1
59-
while remain < k
60-
g = Array.new(rows) { Array.new(cols, 0) }
61-
row = 0
62-
while row < rows
63-
col = 0
64-
while col < cols
65-
next_row = row + 1
66-
while next_row < rows
67-
if apples[row][col] - apples[next_row][col] > 0
68-
g[row][col] += f[next_row][col] %= mod
69-
end
70-
next_row += 1
54+
(1...k).each do |rmn|
55+
(0...r).each do |i|
56+
(0...c).each do |j|
57+
val = 0
58+
(i + 1...r).each do |ni|
59+
val += dp[rmn - 1][ni][j] if ap[i][j] - ap[ni][j] > 0
7160
end
72-
73-
next_col = col + 1
74-
while next_col < cols
75-
if apples[row][col] - apples[row][next_col] > 0
76-
g[row][col] += f[row][next_col] %= mod
77-
end
78-
next_col += 1
61+
(j + 1...c).each do |nj|
62+
val += dp[rmn - 1][i][nj] if ap[i][j] - ap[i][nj] > 0
7963
end
80-
col += 1
64+
dp[rmn][i][j] = val % mod
8165
end
82-
row += 1
8366
end
84-
f = g
85-
remain += 1
8667
end
87-
88-
f[0][0]
68+
dp[k - 1][0][0]
8969
end
9070

9171
# **************** #
9272
# TEST #
9373
# **************** #
9474

95-
# require "test/unit"
96-
# class Test_ways < Test::Unit::TestCase
97-
# def test_
98-
# assert_equal 3, ways(["A..", "AAA", "..."], 3)
99-
# assert_equal 1, ways(["A..", "AA.", "..."], 3)
100-
# assert_equal 1, ways(["A..", "A..", "..."], 1)
101-
# end
102-
# end
103-
104-
105-
pizza = ["..A.A.AAA...AAAAAA.AA..A..A.A......A.AAA.AAAAAA.AA", "A.AA.A.....AA..AA.AA.A....AAA.A........AAAAA.A.AA.", "A..AA.AAA..AAAAAAAA..AA...A..A...A..AAA...AAAA..AA", "....A.A.AA.AA.AA...A.AA.AAA...A....AA.......A..AA.", "AAA....AA.A.A.AAA...A..A....A..AAAA...A.A.A.AAAA..", "....AA..A.AA..A.A...A.A..AAAA..AAAA.A.AA..AAA...AA", "A..A.AA.AA.A.A.AA..A.A..A.A.AAA....AAAAA.A.AA..A.A", ".AA.A...AAAAA.A..A....A...A.AAAA.AA..A.AA.AAAA.AA.", "A.AA.AAAA.....AA..AAA..AAAAAAA...AA.A..A.AAAAA.A..", "A.A...A.A...A..A...A.AAAA.A..A....A..AA.AAA.AA.AA.", ".A.A.A....AAA..AAA...A.AA..AAAAAAA.....AA....A....", "..AAAAAA..A..A...AA.A..A.AA......A.AA....A.A.AAAA.", "...A.AA.AAA.AA....A..AAAA...A..AAA.AAAA.A.....AA.A", "A.AAAAA..A...AAAAAAAA.AAA.....A.AAA.AA.A..A.A.A...", "A.A.AA...A.A.AA...A.AA.AA....AA...AA.A..A.AA....AA", "AA.A..A.AA..AAAAA...A..AAAAA.AA..AA.AA.A..AAAAA..A", "...AA....AAAA.A...AA....AAAAA.A.AAAA.A.AA..AA..AAA", "..AAAA..AA..A.AA.A.A.AA...A...AAAAAAA..A.AAA..AA.A", "AA....AA....AA.A......AAA...A...A.AA.A.AA.A.A.AA.A", "A.AAAA..AA..A..AAA.AAA.A....AAA.....A..A.AA.A.A...", "..AA...AAAAA.A.A......AA...A..AAA.AA..A.A.A.AA..A.", ".......AA..AA.AAA.A....A...A.AA..A.A..AAAAAAA.AA.A", ".A.AAA.AA..A.A.A.A.A.AA...AAAA.A.A.AA..A...A.AAA..", "A..AAAAA.A..A..A.A..AA..A...AAA.AA.A.A.AAA..A.AA..", "A.AAA.A.AAAAA....AA..A.AAA.A..AA...AA..A.A.A.AA.AA", ".A..AAAA.A.A.A.A.......AAAA.AA...AA..AAA..A...A.AA", "A.A.A.A..A...AA..A.AAA..AAAAA.AA.A.A.A..AA.A.A....", "A..A..A.A.AA.A....A...A......A.AA.AAA..A.AA...AA..", ".....A..A...A.A...A..A.AA.A...AA..AAA...AA..A.AAA.", "A...AA..A..AA.A.A.AAA..AA..AAA...AAA..AAA.AAAAA...", "AA...AAA.AAA...AAAA..A...A..A...AA...A..AA.A...A..", "A.AA..AAAA.AA.AAA.A.AA.A..AAAAA.A...A.A...A.AA....", "A.......AA....AA..AAA.AAAAAAA.A.AA..A.A.AA....AA..", ".A.A...AA..AA...AA.AAAA.....A..A..A.AA.A.AA...A.AA", "..AA.AA.AA..A...AA.AA.AAAAAA.....A.AA..AA......A..", "AAA..AA...A....A....AA.AA.AA.A.A.A..AA.AA..AAA.AAA", "..AAA.AAA.A.AA.....AAA.A.AA.AAAAA..AA..AA.........", ".AA..A......A.A.AAA.AAAA...A.AAAA...AAA.AAAA.....A", "AAAAAAA.AA..A....AAAA.A..AA.A....AA.A...A.A....A..", ".A.A.AA..A.AA.....A.A...A.A..A...AAA..A..AA..A.AAA", "AAAA....A...A.AA..AAA..A.AAA..AA.........AA.AAA.A.", "......AAAA..A.AAA.A..AAA...AAAAA...A.AA..A.A.AA.A.", "AA......A.AAAAAAAA..A.AAA...A.A....A.AAA.AA.A.AAA.", ".A.A....A.AAA..A..AA........A.AAAA.AAA.AA....A..AA", ".AA.A...AA.AAA.A....A.A...A........A.AAA......A...", "..AAA....A.A...A.AA..AAA.AAAAA....AAAAA..AA.AAAA..", "..A.AAA.AA..A.AA.A...A.AA....AAA.A.....AAA...A...A", ".AA.AA...A....A.AA.A..A..AAA.A.A.AA.......A.A...A.", "...A...A.AA.A..AAAAA...AA..A.A..AAA.AA...AA...A.A.", "..AAA..A.A..A..A..AA..AA...A..AA.AAAAA.A....A..A.A"]
106-
k = 8
107-
puts ways(pizza, k) # 641829390
75+
require "test/unit"
76+
class Test_ways < Test::Unit::TestCase
77+
def test_
78+
assert_equal 3, ways(["A..", "AAA", "..."], 3)
79+
assert_equal 1, ways(["A..", "AA.", "..."], 3)
80+
assert_equal 1, ways(["A..", "A..", "..."], 1)
81+
end
82+
end

0 commit comments

Comments
 (0)