diff --git a/rs/compare-version-numbers.rs b/rs/compare-version-numbers.rs new file mode 100644 index 0000000..52cba37 --- /dev/null +++ b/rs/compare-version-numbers.rs @@ -0,0 +1,30 @@ +use std::cmp; +use std::iter; + +impl Solution { + fn segments(version: &str) -> Vec { + version + .split('.') + .map(|s| s.parse::().expect("valid version is guaranteed")) + .collect() + } + + fn extend(segments: &[i32]) -> impl Iterator + '_ { + segments.iter().chain(iter::repeat(&0)) + } + + pub fn compare_version(version1: String, version2: String) -> i32 { + let (s1, s2) = (Self::segments(&version1), Self::segments(&version2)); + let length = cmp::max(s1.len(), s2.len()); + + for (l, r) in Self::extend(&s1).zip(Self::extend(&s2)).take(length) { + if l < r { + return -1; + } else if l > r { + return 1; + } + } + + 0 + } +}