From 813f60755c416b3e742ba5e604926e4d1c77fa76 Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 6 Dec 2024 14:49:49 +0300 Subject: [PATCH] 2024-12-06 v. 7.2.5: added "535. Encode and Decode TinyURL" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/535_encode_and_decode_tinyurl.rb | 30 +++++++++++++++++++ .../test_535_encode_and_decode_tinyurl.rb | 18 +++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 lib/medium/535_encode_and_decode_tinyurl.rb create mode 100644 test/medium/test_535_encode_and_decode_tinyurl.rb diff --git a/README.md b/README.md index b03bc96d..1ae6e33a 100644 --- a/README.md +++ b/README.md @@ -590,3 +590,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 516. Longest Palindromic Subsequence | [Link](https://leetcode.com/problems/longest-palindromic-subsequence/) | [Link](./lib/medium/516_longest_palindromic_subsequence.rb) | [Link](./test/medium/test_516_longest_palindromic_subsequence.rb) | | 523. Continuous Subarray Sum | [Link](https://leetcode.com/problems/continuous-subarray-sum/) | [Link](./lib/medium/523_continuous_subarray_sum.rb) | [Link](./test/medium/test_523_continuous_subarray_sum.rb) | | 524. Longest Word in Dictionary through Deleting | [Link](https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/) | [Link](./lib/medium/524_longest_word_in_dictionary_through_deleting.rb) | [Link](./test/medium/test_524_longest_word_in_dictionary_through_deleting.rb) | +| 535. Encode and Decode TinyURL | [Link](https://leetcode.com/problems/encode-and-decode-tinyurl/) | [Link](./lib/medium/535_encode_and_decode_tinyurl.rb) | [Link](./test/medium/test_535_encode_and_decode_tinyurl.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 091173e0..408dd964 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '7.2.4' + s.version = '7.2.5' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/535_encode_and_decode_tinyurl.rb b/lib/medium/535_encode_and_decode_tinyurl.rb new file mode 100644 index 00000000..a6286985 --- /dev/null +++ b/lib/medium/535_encode_and_decode_tinyurl.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$urls = {} + +# https://leetcode.com/problems/encode-and-decode-tinyurl/ +# @param {String} long_url +# @return {String} +def encode(long_url) + short_url = generate_short_url(long_url) + short_url = generate_short_url(long_url) while $urls.include?(short_url) + + $urls[short_url] = long_url + + short_url +end + +# @param {String} long_url +# @return {String} +def generate_short_url(_long_url) + symbols = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' + + short_url = [] + (0...6).each { |_| short_url << symbols[rand(symbols.size)] } + + short_url.join +end + +# @param {String} short_url +# @return {String} +def decode(short_url) = $urls[short_url] diff --git a/test/medium/test_535_encode_and_decode_tinyurl.rb b/test/medium/test_535_encode_and_decode_tinyurl.rb new file mode 100644 index 00000000..8c152648 --- /dev/null +++ b/test/medium/test_535_encode_and_decode_tinyurl.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/535_encode_and_decode_tinyurl' +require 'minitest/autorun' + +class EncodeAndDecodeTinyURLTest < ::Minitest::Test + def test_default_one + assert_equal( + 'https://leetcode.com/problems/design-tinyurl', + decode( + encode( + 'https://leetcode.com/problems/design-tinyurl' + ) + ) + ) + end +end