Ваш код очень точно всегда выводит прописные, строчные буквы и числа именно в этом порядке, независимо от того, какой ввод был.
Это можно исправить несколькими способами, каждый с некоторыми компромиссами.
Самое простое - это действительно применить грубую силу, то есть изучить все три набора в каждой позиции.
В качестве оптимизации вы можете исключить категорию, в которой вы нашли совпадение, из последующих итераций, уменьшив пространство поиска какВаш ход. Это вряд ли будет масштабируемым для реальных проблем, где пространство поиска является более сложным (вы не знаете, будет ли одно или несколько вхождений символов в какой-либо одной категории, за исключением того, что одна категория еще не засвидетельствована для ближайшегоконец строки).
Кроме того, вы можете вспомнить, в какой позиции вы нашли символ в определенной категории, и заново собрать пароль в правильном порядке в конце с этой информацией. В некотором смысле это самое элегантное исправление, но, опять же, оно страдает от проблемы, заключающейся в том, что оно не будет очень полезным в реальной программе взлома паролей.
Другими словами, «полныйРешение "грубой силы" является наиболее масштабируемым, поскольку оно будет масштабироваться до реальных проблем, даже если оно вычислительно наименее масштабируемое.
В дальнейшем подумайте, как можно перечислить все возможные пароли в поиске. пробел, чтобы каждый кандидат на пароль получил предсказуемый индекс и просто перебрал это перечисление.