diff --git a/README.md b/README.md index a5136f65..7961e0a1 100644 --- a/README.md +++ b/README.md @@ -546,3 +546,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 240. Search a 2D Matrix II | [Link](https://leetcode.com/problems/search-a-2d-matrix-ii/) | [Link](./lib/medium/240_search_a_2d_matrix_ii.rb) | [Link](./test/medium/test_240_search_a_2d_matrix_ii.rb) | | 284. Peeking Iterator | [Link](https://leetcode.com/problems/peeking-iterator/) | [Link](./lib/medium/284_peeking_iterator.rb) | [Link](./test/medium/test_284_peeking_iterator.rb) | | 287. Find the Duplicate Number | [Link](https://leetcode.com/problems/find-the-duplicate-number/) | [Link](./lib/medium/287_find_the_duplicate_number.rb) | [Link](./test/medium/test_287_find_the_duplicate_number.rb) | +| 299. Bulls and Cows | [Link](https://leetcode.com/problems/bulls-and-cows/) | [Link](./lib/medium/299_bulls_and_cows.rb) | [Link](./test/medium/test_299_bulls_and_cows.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index cf3d931c..000c9372 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.8.0' + s.version = '6.8.1' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/299_bulls_and_cows.rb b/lib/medium/299_bulls_and_cows.rb new file mode 100644 index 00000000..e6d7c72d --- /dev/null +++ b/lib/medium/299_bulls_and_cows.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/bulls-and-cows/ +# @param {String} secret +# @param {String} guess +# @return {String} +def get_hint(secret, guess) + bulls = 0 + cows = 0 + map = ::Hash.new(0) + + secret.chars.each_with_index do |s, i| + if s == guess[i] + bulls += 1 + else + map[s] += 1 + end + end + + guess.chars.each_with_index do |g, i| + if g != secret[i] && map[g].positive? + cows += 1 + map[g] -= 1 + end + end + + "#{bulls}A#{cows}B" +end diff --git a/test/medium/test_299_bulls_and_cows.rb b/test/medium/test_299_bulls_and_cows.rb new file mode 100644 index 00000000..2a45d064 --- /dev/null +++ b/test/medium/test_299_bulls_and_cows.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/299_bulls_and_cows' +require 'minitest/autorun' + +class BullsAndCowsTest < ::Minitest::Test + def test_default_one = assert_equal('1A3B', get_hint('1807', '7810')) + + def test_default_two = assert_equal('1A1B', get_hint('1123', '0111')) +end