2017-12-29 42 views
-3

알파벳과 숫자를 사용하여 문자 조합을 만드는 함수를 만들고 싶습니다. 나는 자바 스크립트 또는 그루비에서 이것을하고 싶습니다. 여기 내가있는 곳이면 어떤 도움을 주시면 감사하겠습니다.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/) 중 하나를 얻는 것이 좋습니다. –

+0

나는 얼마나 많은 문자를 가지고 있는지 확인했는데, 239가 있었으므로이 문자 집합을 사용하는 길이가 8 문자 인 문자열이 10645920227784266881입니다. 또한 문자열이 아닌 단어를 생성하려고 시도하는 경우 (단어에서 결코 사용되지 않는 문자를 사용하기 때문에 명백 함) 아마 무차별 공격을 시도하고있을 것입니다. 그것이 내가 시간을 절약 할 수 있다면 암호의 절반 정도가 암호에 사용되지 않는다는 것입니다 (문자 집합은 암호가 96 자입니다). 또한 HashCat을 사용하십시오. –

답변

1
선택한 길이의 모든 단어 조합 인쇄

그루비 예 :

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). 콜렉트 {문자}' – cfrick