From 94eeae5f5c04ee956ff8f6e2baf58a77c3e96fb0 Mon Sep 17 00:00:00 2001 From: fartem Date: Wed, 8 Jan 2025 13:04:42 +0300 Subject: [PATCH] 2025-01-08 v. 7.7.8: added "880. Decoded String at Index" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/880_decoded_string_at_index.rb | 29 +++++++++++++++ .../test_880_decoded_string_at_index.rb | 37 +++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 lib/medium/880_decoded_string_at_index.rb create mode 100644 test/medium/test_880_decoded_string_at_index.rb diff --git a/README.md b/README.md index ec96a47e..df6b9110 100644 --- a/README.md +++ b/README.md @@ -632,6 +632,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 863. All Nodes Distance K in Binary Tree | [Link](https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/) | [Link](./lib/medium/863_all_nodes_distance_k_in_binary_tree.rb) | [Link](./test/medium/test_863_all_nodes_distance_k_in_binary_tree.rb) | | 865. Smallest Subtree with all the Deepest Nodes | [Link](https://leetcode.com/problems/smallest-subtree-with-all-the-deepest-nodes/) | [Link](./lib/medium/865_smallest_subtree_with_all_the_deepest_nodes.rb) | [Link](./test/medium/test_865_smallest_subtree_with_all_the_deepest_nodes.rb) | | 869. Reordered Power of 2 | [Link](https://leetcode.com/problems/reordered-power-of-2/) | [Link](./lib/medium/869_reordered_power_of_2.rb) | [Link](./test/medium/test_869_reordered_power_of_2.rb) | +| 880. Decoded String at Index | [Link](https://leetcode.com/problems/decoded-string-at-index/) | [Link](./lib/medium/880_decoded_string_at_index.rb) | [Link](./test/medium/test_880_decoded_string_at_index.rb) | ### Hard diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 4c3b6c75..0a0b53a0 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.7.7' + s.version = '7.7.8' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/880_decoded_string_at_index.rb b/lib/medium/880_decoded_string_at_index.rb new file mode 100644 index 00000000..4371f236 --- /dev/null +++ b/lib/medium/880_decoded_string_at_index.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/decoded-string-at-index/ +# @param {String} s +# @param {Integer} k +# @return {String} +def decode_at_index(s, k) + size = 0 + + s.each_char do |c| + if c =~ /[0-9]/ + size *= c.to_i + else + size += 1 + end + end + + s.each_char.reverse_each do |c| + k %= size + + return c if k.zero? && c =~ /[A-Za-z]/ + + if c =~ /[0-9]/ + size /= c.to_i + else + size -= 1 + end + end +end diff --git a/test/medium/test_880_decoded_string_at_index.rb b/test/medium/test_880_decoded_string_at_index.rb new file mode 100644 index 00000000..7647cadc --- /dev/null +++ b/test/medium/test_880_decoded_string_at_index.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/880_decoded_string_at_index' +require 'minitest/autorun' + +class DecodedStringAtIndexTest < ::Minitest::Test + def test_default_one + assert_equal( + 'o', + decode_at_index( + 'leet2code3', + 10 + ) + ) + end + + def test_default_two + assert_equal( + 'h', + decode_at_index( + 'ha22', + 5 + ) + ) + end + + def test_default_three + assert_equal( + 'a', + decode_at_index( + 'a2345678999999999999999', + 1 + ) + ) + end +end