From 91b11d0b64b1204b4513018893aa65789a734b73 Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 8 Nov 2024 09:36:26 +0300 Subject: [PATCH] 2024-11-08 v. 6.9.9: added "400. Nth Digit" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/400_nth_digit.rb | 19 +++++++++++++++++++ test/medium/test_400_nth_digit.rb | 11 +++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 lib/medium/400_nth_digit.rb create mode 100644 test/medium/test_400_nth_digit.rb diff --git a/README.md b/README.md index 6a80e56d..56449d77 100644 --- a/README.md +++ b/README.md @@ -564,3 +564,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 388. Longest Absolute File Path | [Link](https://leetcode.com/problems/longest-absolute-file-path/) | [Link](./lib/medium/388_longest_absolute_file_path.rb) | [Link](./test/medium/test_388_longest_absolute_file_path.rb) | | 394. Decode String | [Link](https://leetcode.com/problems/decode-string/) | [Link](./lib/medium/394_decode_string.rb) | [Link](./test/medium/test_394_decode_string.rb) | | 398. Random Pick Index | [Link](https://leetcode.com/problems/random-pick-index/) | [Link](./lib/medium/398_random_pick_index.rb) | [Link](./test/medium/test_398_random_pick_index.rb) | +| 400. Nth Digit | [Link](https://leetcode.com/problems/nth-digit/) | [Link](./lib/medium/400_nth_digit.rb) | [Link](./test/medium/test_400_nth_digit.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 6526a02f..c9880f2e 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 = '6.9.8.1' + s.version = '6.9.9' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/400_nth_digit.rb b/lib/medium/400_nth_digit.rb new file mode 100644 index 00000000..a9867be2 --- /dev/null +++ b/lib/medium/400_nth_digit.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/nth-digit/ +# @param {Integer} n +# @return {Integer} +def find_nth_digit(n) + sz = 1 + p = 1 + + loop do + d = 9 * sz * p + + return ((n - 1) / sz + p).to_s[(n - 1) % sz].to_i if n <= d + + n -= d + sz += 1 + p *= 10 + end +end diff --git a/test/medium/test_400_nth_digit.rb b/test/medium/test_400_nth_digit.rb new file mode 100644 index 00000000..6eb46ae7 --- /dev/null +++ b/test/medium/test_400_nth_digit.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/400_nth_digit' +require 'minitest/autorun' + +class NthDigitTest < ::Minitest::Test + def test_default_one = assert_equal(3, find_nth_digit(3)) + + def test_default_two = assert_equal(0, find_nth_digit(11)) +end