Skip to content

Commit c0fb531

Browse files
authored
2025-02-17 v. 8.5.8: added "1396. Design Underground System"
2 parents e1389c7 + 9111a53 commit c0fb531

File tree

4 files changed

+135
-1
lines changed

4 files changed

+135
-1
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
690690
| 1382. Balance a Binary Search Tree | [Link](https://leetcode.com/problems/balance-a-binary-search-tree/) | [Link](./lib/medium/1382_balance_a_binary_search_tree.rb) | [Link](./test/medium/test_1382_balance_a_binary_search_tree.rb) |
691691
| 1387. Sort Integers by The Power Value | [Link](https://leetcode.com/problems/sort-integers-by-the-power-value/) | [Link](./lib/medium/1387_sort_integers_by_the_power_value.rb) | [Link](./test/medium/test_1387_sort_integers_by_the_power_value.rb) |
692692
| 1395. Count Number of Teams | [Link](https://leetcode.com/problems/count-number-of-teams/) | [Link](./lib/medium/1395_count_number_of_teams.rb) | [Link](./test/medium/test_1395_count_number_of_teams.rb) |
693+
| 1396. Design Underground System | [Link](https://leetcode.com/problems/design-underground-system/) | [Link](./lib/medium/1396_design_underground_system.rb) | [Link](./test/medium/test_1396_design_underground_system.rb) |
693694
| 1400. Construct K Palindrome Strings | [Link](https://leetcode.com/problems/construct-k-palindrome-strings/) | [Link](./lib/medium/1400_construct_k_palindrome_strings.rb) | [Link](./test/medium/test_1400_construct_k_palindrome_strings.rb) |
694695
| 2116. Check if a Parentheses String Can Be Valid | [Link](https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid/) | [Link](./lib/medium/2116_check_if_a_parentheses_string_can_be_valid.rb) | [Link](./test/medium/test_2116_check_if_a_parentheses_string_can_be_valid.rb) |
695696
| 2425. Bitwise XOR of All Pairings | [Link](https://leetcode.com/problems/bitwise-xor-of-all-pairings/) | [Link](./lib/medium/2425_bitwise_xor_of_all_pairings.rb) | [Link](./test/medium/test_2425_bitwise_xor_of_all_pairings.rb) |

leetcode-ruby.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '8.5.7'
8+
s.version = '8.5.8'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/design-underground-system/
4+
class UndergroundSystem
5+
# Init
6+
def initialize
7+
@stations = {}
8+
@check_ins = {}
9+
end
10+
11+
# @param {Integer} id
12+
# @param {String} station_name
13+
# @param {Integer} t
14+
# @return {Void}
15+
def check_in(id, station_name, t)
16+
@check_ins[id] = { station_name: station_name, time: t }
17+
end
18+
19+
# @param {Integer} id
20+
# @param {String} station_name
21+
# @param {Integer} t
22+
# @return {Void}
23+
def check_out(id, station_name, t)
24+
check_in = @check_ins.delete(id)
25+
26+
name = "#{check_in[:station_name]} -> #{station_name}"
27+
28+
@stations[name] = [] unless @stations.include?(name)
29+
30+
@stations[name] << t - check_in[:time]
31+
end
32+
33+
# @param {String} start_station
34+
# @param {String} end_station
35+
# @return {Float}
36+
def get_average_time(start_station, end_station)
37+
times = @stations["#{start_station} -> #{end_station}"]
38+
39+
times.sum.to_f / times.size
40+
end
41+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/1396_design_underground_system'
5+
require 'minitest/autorun'
6+
7+
class DesignUndergroundSystemTest < ::Minitest::Test
8+
def test_default_one
9+
underground_system = ::UndergroundSystem.new
10+
11+
underground_system.check_in(45, 'Leyton', 3)
12+
underground_system.check_in(32, 'Paradise', 8)
13+
underground_system.check_in(27, 'Leyton', 10)
14+
15+
underground_system.check_out(45, 'Waterloo', 15)
16+
underground_system.check_out(27, 'Waterloo', 20)
17+
underground_system.check_out(32, 'Cambridge', 22)
18+
19+
assert_in_delta(
20+
14.00000,
21+
underground_system.get_average_time(
22+
'Paradise',
23+
'Cambridge'
24+
)
25+
)
26+
27+
assert_in_delta(
28+
11.00000,
29+
underground_system.get_average_time(
30+
'Leyton',
31+
'Waterloo'
32+
)
33+
)
34+
35+
underground_system.check_in(10, 'Leyton', 24)
36+
37+
assert_in_delta(
38+
11.00000,
39+
underground_system.get_average_time(
40+
'Leyton',
41+
'Waterloo'
42+
)
43+
)
44+
45+
underground_system.check_out(10, 'Waterloo', 38)
46+
47+
assert_in_delta(
48+
12.00000,
49+
underground_system.get_average_time(
50+
'Leyton',
51+
'Waterloo'
52+
)
53+
)
54+
end
55+
56+
def test_default_two
57+
underground_system = ::UndergroundSystem.new
58+
59+
underground_system.check_in(10, 'Leyton', 3)
60+
underground_system.check_out(10, 'Paradise', 8)
61+
62+
assert_in_delta(
63+
5.00000,
64+
underground_system.get_average_time(
65+
'Leyton',
66+
'Paradise'
67+
)
68+
)
69+
70+
underground_system.check_in(5, 'Leyton', 10)
71+
underground_system.check_out(5, 'Paradise', 16)
72+
73+
assert_in_delta(
74+
5.50000,
75+
underground_system.get_average_time(
76+
'Leyton',
77+
'Paradise'
78+
)
79+
)
80+
81+
underground_system.check_in(2, 'Leyton', 21)
82+
underground_system.check_out(2, 'Paradise', 30)
83+
84+
assert_in_delta(
85+
6.66667,
86+
underground_system.get_average_time(
87+
'Leyton',
88+
'Paradise'
89+
)
90+
)
91+
end
92+
end

0 commit comments

Comments
 (0)