パスワード哲学


コード2020日2の出現


タスク:Xのどこに解決する.


X = the number of valid passwords

例入力


1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc
It represents:
  • パスワードポリシー
  • パスワード
  • 第1部

  • 比較split() with RegEx
  • 前のパズルからのヘルパー関数の活用
  • アルゴリズムの記述
  • split ()とregexの比較

  • 私は1年前に最初に発見したとき、このパズルの両方の部分を完成しました
  • でも私の解決策split() なぜなら、私は、正規表現を使用するのにはるかに少ない
  • この行を指定します.
    1-3 a: abcde
    
    使用split 必要でした.
    別々に
    ['1-3 a', 'abcde']
    
    最初の項目を'
    ['1-3','a', 'abcde']
    
    最初の項目の最初の項目を
    ['1','3','a','abcde']
    
    使用regex 簡単なアプローチを提供した.
    次の正規表現の各キャプチャグループに一致します
    /(\d+)-(\d+) (\w): (\w+)/g
    

    前のパズルからのヘルパー関数の活用


    Part 1のパスワードポリシーでは、指定した文字が範囲の境界で指定された文字列内の位置にある必要があります.
    この行の場合:
    1-3 a: abcde
    
    範囲は1,2,3この行の場合:
    2-9 c: ccccccccc
    
    範囲は2,3,4,5,6,7,8,9このシリーズで以前に紹介されたパズルでは、2020年以降のパズルの一つを意味しています.
    const createRange = (lower, upper) => {
        return new Array(upper - (lower - 1)).fill(0).map((item, index) => index + lower)
    }
    

    アルゴリズムの記述


    Generate a list of matched capture groups for each line using the regular expression above
    
    Filter that list to only include items where the following operations return 'true'
      Create a range of numbers that span the lower and upper designated boundaries from the first and second captured groups
      Check that list of numbers for the inclusion of a number that is equivalent to the number returned from the following operations:
        Split the password string into an array of characters
          Filter the list of characters to only include characters that match the character specified by this item's policy
          Return the length of the filtered list
    
    Return the length of the filtered list
    
    私のアルゴリズムの可視化を示します.

    第2部


    わずかに修正された作業アルゴリズムを書く


    Generate a list of matched capture groups for each line using the regular expression above
    
    Filter that list to only include items where the following operations return 'true'
      Create a 2-element list containing the lower and upper designated boundaries from the first and second captured groups
      Filter that list to include either 0, 1 or both numbers based on the following operations:
        For each of the two numbers:
          Split the password string into an array of characters
            Remove N characters from the beginning of the list where N = the current number minus 1
              Return true if the first character is the one specified in the policy
        Return true if the filtered list only contains one number
    Return the length of the filtered list
    
    私のアルゴリズムの可視化を示します.

    実績

  • 十分に自信を使用する感じRegEx の代わりにsplit() このパズルをより雄弁に解決するには
  • 前のパズルの解からのヘルパー関数の再利用
  • 両方の部分を1つの長い連鎖ステートメントとして書く