From 8222f5e1db4570e37c518525fd24a92fb9433b05 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 3 May 2024 23:40:20 +0200 Subject: [PATCH] =?UTF-8?q?rs:=20add=20=C2=AB165.=20Compare=20Version=20Nu?= =?UTF-8?q?mbers=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- rs/compare-version-numbers.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 rs/compare-version-numbers.rs 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 + } +}