def adjusted_entropy(min_word_length: 4, extra_dictionary_words: [], entropy_threshhold: -1)
      dictionary_words = Regexp.union( ( extra_dictionary_words + COMMON_PASSWORDS ).compact.reject{ |i| i.length < min_word_length } )
      min_entropy = EntropyCalculator.calculate(base_password)
      # Process the passwords, while looking for possible matching words in the dictionary.
      PasswordVariants.all_variants(base_password).inject( min_entropy ) do |min_entropy, variant|
        [ min_entropy, EntropyCalculator.calculate( variant.sub( dictionary_words, '*' ) ) ].min 
      end
    end
def adjusted_entropy(min_word_length: 4, extra_dictionary_words: [], entropy_threshhold: -1)
      dictionary_words = Regexp.union( ( extra_dictionary_words + COMMON_PASSWORDS ).compact.reject{ |i| i.length < min_word_length } )
      min_entropy = EntropyCalculator.calculate(base_password)
      # Process the passwords, while looking for possible matching words in the dictionary.
      PasswordVariants.all_variants(base_password).inject( min_entropy ) do |min_entropy, variant|
        [ min_entropy, EntropyCalculator.calculate( variant.sub( dictionary_words, '*' ) ) ].min 
      end
    end
Returns the minimum entropy for the passwords dictionary adjustments.
 If a threshhold is specified we will bail early to avoid unnecessary
 processing.
 Note that we only check for the first matching word up to the threshhold if set.
 Subsequent matching words are not deductd.