2017-12-29 12 views
-3

アルファベットと数字を使って文字の組み合わせを作成する関数を作成したいと考えています。私はjavascriptやgroovyでこれをやりたいと思います。ここに私がいるところに、どんな助けも大いに感謝されるでしょう。選択された長さのすべての単語の組み合わせを印刷Javascript/groovy:可能な限り最大の単語まで作成するには?

def characters = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H" , "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "-", "_", "[", "]", "+", "^", "\", "-", "_", "[", "]", "+", "^", "\", "!", "@", "#", "$", "%", "*", "(", ")", "+", "<", ">", "|", "?", "/", "\", "`", "~", "œ", "∑", "´", "®", "†", "¥", "¨", "ˆ", "ø", "π", "å", "ß", "∂", "ƒ", "©", "˙", "∆", "k", "¬", "Ω", "≈", "ç", "√", "∫", "˜", "µ", "¡", "™", "£", "¢", "∞", "§", "7", "•", "ª", "º", "–", "≠", "“", "‘", "«", "…", "æ", "≤", "≥", "÷", "`", "⁄", "™", "‹", "›", "fi", "fl", "‡", "°", "·", "‚", "—", "±", "Œ", "„", "´", "‰", "ˇ", "Á", "¨", "ˆ", "Ø", "∏", "”", "’", "«", "»", "Å", "Í", "Î", "Ï", "˝", "Ó", "Ô", "", "Ò", "Ú", "Æ", "¸", "˛", "Ç", "◊", "◊", "ı", "◊", "ı", "˜", "Â", "Â", "¯", "˘", "¿", "÷", "¡", "™", "£", "¢", "∞", "§", "¶", "•", "ª", "º", "–", "≠", "œ", "∑", "´", "®", "†", "¥", "¨", "ˆ", "ø", "π", "“", "‘", "«", "å", "ß", "∂", "ƒ", "©", "˙", "∆", "˚", "¬", "…", "æ", "Ω", "≈", "ç", "√", "∫", "˜", "µ", "≤", "≥", "÷", " " ] 

    function create_words(){ 
     def word = "" 
     def total_characters = 2 
     create_word("a", 1) 
    } 

    function create_word(character, number){ 
     characters.each(){ le -> 
      for(var n = 0; n < characters.size(); n++){ 
       def ch = characters[n] 
       characters.each(){ letter -> 
        def word = letter + add_letter(ch, number) 
        words.add(word) 
        for(var c = number; c < number_times; c++){ 
         create_word(character, c) 
        } 
       } 
      } 
      if(!le.equals(" ")){ 
       create_word(characters.next(), 1) 
      } 
     } 
    } 

    function add_letter(character, number){ 
     if(character == "a"){ 
      return "a" * number 
     } 
     return characters.next(character * number) 
    } 
+1

あなたの質問は何ですか? – Zachary

+1

すべての単語を8文字まで(パスワードの標準長)計算するのにかかる時間は大量です。制御文字以外のすべてのASCII文字を使用しているようです。これにより224文字が残されます。この文字セットを使用すると、長さが8文字の6338465731314712576文字列があります。あなたが本当にこれを通過したいのであれば、私はCUDAを学び、[これらの](https://www.nvidia.com/en-us/data-center/dgx-1/)の1つを得ることを勧めます。 –

+0

私はあなたが持っている文字の数を確認しましたが、239があることが判明しました。この文字セットを使用して8文字の文字列が10645920227784266881あります。また、単語ではなく文字列を生成しようとしている場合は、おそらくブルートフォース攻撃を試みている可能性があります。それでは時間を節約しましょう。パスワードの半分はパスワードで使われていません(パスワードは96文字です)。また、HashCatを使うだけです。 –

答えて

1

Groovyの例:

def characters = [ "a", "b", "c", "d", "e", "f"] 
int WORD_LENGTH = 3 
def combinationList = [] 

WORD_LENGTH.times{ 
    combinationList << characters 
} 

combinationList.combinations().each{ 
    println it.join() 
} 
+0

ゴルフの場合: 'def combinationList =(0..WORD_LENGTH).collect {characters}' – cfrick

関連する問題