2016-01-13 2 views
-3

Я пытаюсь кодировать что-то, где я массив букв, и я хочу, чтобы система печатиSwift взлома паролей

в

б

гр

d

... (не является частью печати, чтобы сократить, что должно отображаться)

аа

аб

ас

переменного тока

...

хорошо

gooe (буквы в этой строке делать не пробелы, я сделал это потому, что переполнение стека признает это как плохую грамматику)

goof

В настоящее время я делаю это быстро. (Я вытаскиваю буквы из массива.), Поэтому, короче говоря, это похоже на то, как система перебора вынуждает взломать пароль.

ответ

2

Перемещение таких слов очень похоже на увеличение числа оснований 26. Вы можете использовать String(.., radix:) инициализатор для достижения этой цели:

extension Character { 
    var unicodeScalarsValue: UInt32 { 
     return String(self).unicodeScalars.first!.value 
    } 
} 

func printWordSequence(numWords: Int) { 
    for i in 0..<numWords { 
     print(String(i, radix: 26).characters.map({ 
      char -> String in 
      let a = char.unicodeScalarsValue 
      if a < 58 { 
       return String(UnicodeScalar(a + 49)) 
      } 
      else { 
       return String(UnicodeScalar(a + 10)) 
      } 
     }).joinWithSeparator("")) 
    } 
} 

printWordSequence(3000) 

/* 
a 
b 
c 

... 

elh 
eli 
elj */ 

Если расширение Character берется из Leo Dabus ответа в теме "What's the simplest way to convert from a single character String to an ASCII value in Swift?.


Если вы не хотите хотите сохранить слова в массиве (для последующей печати или использования), измените функцию выше слегка:

func generateWordSequence(numWords: Int) -> [String] { 
    var myArr : [String] = [] 
    for i in 0..<numWords { 
     myArr.append(String(i, radix: 26).characters.map({ 
      char -> String in 
      let a = char.unicodeScalarsValue 
      if a < 58 { 
       return String(UnicodeScalar(a + 49)) 
      } 
      else { 
       return String(UnicodeScalar(a + 10)) 
      } 
     }).joinWithSeparator("")) 
    } 
    return myArr 
} 

var myWordSequence = generateWordSequence(3000) 
myWordSequence.map { print($0) } 
/* same as above ... */ 
Смежные вопросы