Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの強力なパスワードチェッカー


文字列、パスワードがあるとします。パスワードを強力にするために必要な最小限の変更を見つける必要があります。したがって、パスワードには次の基準があります-

  • 長さは6文字以上、20文字以下である必要があります
  • 少なくとも1つの小文字、少なくとも1つの大文字、および少なくとも1つの数字が含まれている必要があります。
  • …aaa…、…PPP…、…888…のように3つの繰り返し文字を続けて含めることはできません。

したがって、入力が「aa26bbb」のような場合、大文字がなく、連続して3つのbがあるため、少なくとも1つの変更が必要です。したがって、任意のbを1つの大文字に置き換えて、強くすることができます。

これを解決するには、次の手順に従います-

  • missingTypes:=3を設定します。
  • 小文字が少なくとも1つある場合は、missingTypesを1つ減らします
  • 大文字が少なくとも1つある場合は、missingTypesを1つ減らします
  • 少なくとも1つの数値がある場合は、missingTypesを1つ減らします
  • 変更:=0、1つ:=0および2つ:=0、p:=2
  • p
  • s[p]がs[p– 1]と同じであり、これもs [p-2]と同じである場合、
    • 長さ:=2
    • p
    • 長さ:=長さ+ 1
    • p:=p + 1
  • 変更:=変更+長さ/ 3
  • 長さが3で割り切れる場合は、1ずつ増やします
  • それ以外の場合、長さが3で割り切れる場合は、2を1増やします
  • それ以外の場合は、pを1増やします
  • サイズがs<6の場合、missing_typeの最大値と6 –sのサイズを返します
  • それ以外の場合、サイズがs <20の場合は、missing_typeの最大値を返し、変更します
  • それ以外の場合
    • 削除:=sのサイズ– 20
    • 変更:=変更–最小の削除と1つ
    • change:=change –(min of(max of delete – one and 0)and two * 2)/ 2
    • 変更:=変更–(削除の最大値– 1 – 2 * 2および0)/ 2
  • return delete + max of missing_type and change
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution(object):
       def strongPasswordChecker(self, s):
          missing_type = 3
          if any('a' <= c <= 'z' for c in s): missing_type -= 1
          if any('A' <= c <= 'Z' for c in s): missing_type -= 1
          if any(c.isdigit() for c in s): missing_type -= 1
          change = 0
          one = two = 0
          p = 2
          while p < len(s):
             if s[p] == s[p-1] == s[p-2]:
                length = 2
                while p < len(s) and s[p] == s[p-1]:
                   length += 1
                   p += 1
                change += length / 3
                if length % 3 == 0: one += 1
                elif length % 3 == 1: two += 1
             else:
                p += 1
          if len(s) < 6:
             return max(missing_type, 6 - len(s))
          elif len(s) <= 20:
             return max(missing_type, change)
          else:
             delete = len(s) - 20
             change -= min(delete, one)
             change -= min(max(delete - one, 0), two * 2) / 2
             change -= max(delete - one - 2 * two, 0) / 3
             return delete + max(missing_type, change)
    ob = Solution()
    print(ob.strongPasswordChecker('aa26bbb'))

    入力

    “aa26bbb”

    出力

    1

    1. コイン交換のためのPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − N枚のコインが与えられ、Sに各値が無限に供給されるように、それらのコインを変更したいと考えています。順序に関係なく、変更できる方法がいくつあるかを表示する必要があります。 動的計画法の概念を使用して問題ステートメントを解決し、時間の複雑さを軽減します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach def count(S, m, n):    # base case    table = [[0 for x in

    2. Windows 7 のパスワードを変更する方法

      Windows 7 システムで個人データを保護するには、パスワードのセキュリティが非常に重要です。適切なログイン パスワードは、重要なデータを取得するためにコンピュータにアクセスしようとする人に対する防御の最前線です。 Windows 7 パスワードの変更 定期的に行う必要があります。 Windows 7 でログイン パスワードを簡単に変更する方法は次のとおりです 1. [スタート] をクリックし、[コントロール パネル] を選択します。 2. コントロール パネルで、[ユーザー アカウントとファミリー セーフティ] をクリックします。 3. ユーザー アカウントの下に、[Win