From c786243a21a2a1f2293df6aabf4f2d10240682a9 Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 16 Apr 2024 06:57:36 +0300 Subject: [PATCH] 2024-04-16 v. 5.4.7: added "2299. Strong Password Checker II" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/easy/2299_strong_password_checker_ii.rb | 32 +++++++++++++++++++ .../test_2299_strong_password_checker_ii.rb | 13 ++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lib/easy/2299_strong_password_checker_ii.rb create mode 100644 test/easy/test_2299_strong_password_checker_ii.rb diff --git a/README.md b/README.md index 92bf3fd6..7db3592a 100644 --- a/README.md +++ b/README.md @@ -407,3 +407,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 2283. Check if Number Has Equal Digit Count and Digit Value | [Link](https://leetcode.com/problems/check-if-number-has-equal-digit-count-and-digit-value/) | [Link](./lib/easy/2283_check_if_number_has_equal_digit_count_and_digit_value.rb) | | 2287. Rearrange Characters to Make Target String | [Link](https://leetcode.com/problems/rearrange-characters-to-make-target-string/) | [Link](./lib/easy/2287_rearrange_characters_to_make_target_string.rb) | | 2293. Min Max Game | [Link](https://leetcode.com/problems/min-max-game/) | [Link](./lib/easy/2293_min_max_game.rb) | +| 2299. Strong Password Checker II | [Link](https://leetcode.com/problems/strong-password-checker-ii/) | [Link](./lib/easy/2299_strong_password_checker_ii.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 42fcb1c3..75e7c512 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 = '5.4.6' + s.version = '5.4.7' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE] s.executable = 'leetcode-ruby' diff --git a/lib/easy/2299_strong_password_checker_ii.rb b/lib/easy/2299_strong_password_checker_ii.rb new file mode 100644 index 00000000..422dce83 --- /dev/null +++ b/lib/easy/2299_strong_password_checker_ii.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/strong-password-checker-ii/ +# @param {String} password +# @return {Boolean} +def strong_password_checker_ii(password) + return false if password.length < 8 + + lower = 0 + upper = 0 + digit = 0 + special = 0 + last = '[' + + password.each_char do |letter| + return false if letter == last + + last = letter + + if letter.match?(/\d/) + digit += 1 + elsif '!@\#$%^&*()-+'.include?(letter) + special += 1 + elsif letter.match?(/[[:upper:]]/) + upper += 1 + elsif letter.match?(/[[:lower:]]/) + lower += 1 + end + end + + lower.positive? && upper.positive? && special.positive? && digit.positive? +end diff --git a/test/easy/test_2299_strong_password_checker_ii.rb b/test/easy/test_2299_strong_password_checker_ii.rb new file mode 100644 index 00000000..7dddfb55 --- /dev/null +++ b/test/easy/test_2299_strong_password_checker_ii.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/easy/2299_strong_password_checker_ii' +require 'minitest/autorun' + +class StringPasswordCheckerIITest < ::Minitest::Test + def test_default + assert(strong_password_checker_ii('IloveLe3tcode!')) + assert(!strong_password_checker_ii('Me+You--IsMyDream')) + assert(!strong_password_checker_ii('1aB!')) + end +end