Skip to content

Commit f8f534e

Browse files
committed
2024-09-02 v. 6.6.0: added "165. Compare Version Numbers"
1 parent ff02d75 commit f8f534e

File tree

6 files changed

+105
-3
lines changed

6 files changed

+105
-3
lines changed

.rubocop.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Style/MultilineMethodSignature:
2020
Enabled: false
2121
Style/DisableCopsWithinSourceCodeDirective:
2222
Enabled: false
23+
Style/IpAddresses:
24+
Enabled: false
2325

2426
Bundler/GemComment:
2527
Enabled: false

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,3 +525,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
525525
| 150. Evaluate Reverse Polish Notation | [Link](https://leetcode.com/problems/evaluate-reverse-polish-notation/) | [Link](./lib/medium/150_evaluate_reverse_polish_notation.rb) | [Link](./test/medium/test_150_evaluate_reverse_polish_notation.rb) |
526526
| 151. Reverse Words in a String | [Link](https://leetcode.com/problems/reverse-words-in-a-string/) | [Link](./lib/medium/151_reverse_words_in_a_string.rb) | [Link](./test/medium/test_151_reverse_words_in_a_string.rb) |
527527
| 155. Min Stack | [Link](https://leetcode.com/problems/min-stack/) | [Link](./lib/medium/155_min_stack.rb) | [Link](./test/medium/test_155_min_stack.rb) |
528+
| 165. Compare Version Numbers | [Link](https://leetcode.com/problems/compare-version-numbers/) | [Link](./lib/medium/165_compare_version_numbers.rb) | [Link](./test/medium/test_165_compare_version_numbers.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
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 = '6.5.9.1'
8+
s.version = '6.6.0'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/compare-version-numbers/
4+
# @param {String} version1
5+
# @param {String} version2
6+
# @return {Integer}
7+
def compare_version(version1, version2)
8+
v1 = parts(version1)
9+
v2 = parts(version2)
10+
p = 0
11+
12+
while p < v1.size && p < v2.size
13+
return 1 if v1[p] > v2[p]
14+
15+
return -1 if v1[p] < v2[p]
16+
17+
p += 1
18+
end
19+
20+
return 1 if v1.size != p && !has_only_zeros(v1, p)
21+
22+
return -1 if v2.size != p && !has_only_zeros(v2, p)
23+
24+
0
25+
end
26+
27+
private
28+
29+
# @param {String} version
30+
# @return {Array}
31+
def parts(version)
32+
parts = []
33+
version.split('.').each do |part|
34+
start = 0
35+
start += 1 while start < part.size - 1 && part[start] == '0'
36+
37+
parts << part[start..].to_i
38+
end
39+
40+
parts
41+
end
42+
43+
# @param {Array} parts
44+
# @param {Integer} p
45+
# @return {Boolean}
46+
def has_only_zeros(parts, p)
47+
while p < parts.size
48+
return false unless parts[p].zero?
49+
50+
p += 1
51+
end
52+
53+
true
54+
end

test/easy/test_1108_defanging_an_ip_address.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
require 'minitest/autorun'
66

77
class DefangingAnIPAddressTest < ::Minitest::Test
8-
# rubocop:disable Style/IpAddresses
98
def test_default_one
109
assert_equal(
1110
'1[.]1[.]1[.]1',
@@ -19,5 +18,4 @@ def test_default_two
1918
defang_i_paddr('255.100.50.0')
2019
)
2120
end
22-
# rubocop:enable Style/IpAddresses
2321
end
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/165_compare_version_numbers'
5+
require 'minitest/autorun'
6+
7+
class CompareVersionNumbersTest < ::Minitest::Test
8+
def test_default_one
9+
assert_equal(
10+
-1,
11+
compare_version(
12+
'1.2',
13+
'1.10'
14+
)
15+
)
16+
end
17+
18+
def test_default_two
19+
assert_equal(
20+
0,
21+
compare_version(
22+
'1.01',
23+
'1.001'
24+
)
25+
)
26+
end
27+
28+
def test_default_three
29+
assert_equal(
30+
0,
31+
compare_version(
32+
'1.0',
33+
'1.0.0.0'
34+
)
35+
)
36+
end
37+
38+
def test_additional_one
39+
assert_equal(
40+
1,
41+
compare_version(
42+
'1.0',
43+
'0.0.0'
44+
)
45+
)
46+
end
47+
end

0 commit comments

Comments
 (0)