![]() |
перебор символов(DELPHI)
подскажите пожалуйсто как организовать перебор всех возможных вариантов символов?
например: a .. z aa ab .. az .. ba bb .. bz .. zz aaa aab ... zzz .... zzzzzzz......... |
Всех вариантов - бесконечное количество (т.к. ты макс. длину не указал)
А как можно организовать бесконечное? |
Допиши условие, тогда уже можно будет обсуждать как сделать!
|
условие - подобрать пароль методом перебора символов. длину пароля не знаю. (: если не сложно подскажите как такое организовать.
|
Кури перевод чисел из одной системы счисления в другую, в твоём случае основатель системы 26(число англ. букв), каждый разряд будет в диапазоне [0..25], перевести тебе надо будет из десятичной в то которую я указал. Потом получаное число прогоняем по всем разрярам и к разряду прибавляем 0x61 и поучлаем нужный символ, профит?:)
|
не профит. я ничего не понял. =\
|
а если ещё цифры вкючить и символы в перебор?
|
Эх, щас напишу тада как это сделать
|
Цитата:
Код:
myChar := Chr(66); // Использование Char для конвертирования2. Объявить в const базу пароля и по ней пробегать в цикле. Вот пример как реализовывать через const: PHP код:
|
Код:
const ci_interval = 26; {â àãë. ñëîâàðå 26 áóêàô:)}Код:
procedure TForm1.Button1Click(Sender: TObject);a b c .. z aa ab ac ... |
Цитата:
PHP код:
|
Цитата:
Код:
While (1=1) do |
спасибо большое (:
|
Я вообще не понимаю смысла кода от JnK, выше код который даёт бесконечное число комбинации(точнее максимальное от Cardinal / 26) :)
|
Цитата:
while true do begin end; где здесь организация? |
интересно, что будет занимать больше времени?
Цитата:
Цитата:
Мне кажется что 1е, т.к. в цикле мы дополнительно сравниваем действительно ли 1=1...или я ошибаюсь? UPD: при 4х различных тестах пришел к выводу, что как бы ни было парадоксально, на 1 выполнение цикла Цитата:
Цитата:
|
Jingo Bo, У тебя пропускается вывод на aa .. az сразу с b
Код:
aНасчет кода я показывал метод реализации, и ниже дописал, что лучше сделать 1 циклом, насчет "бесконечного цикла" то ниже приведен код. Т.к. пароли имеют чувствительность к регистру и используются цифры, сделал на основе константы. PHP код:
|
Цитата:
1. 1=1 2. true=true; (т.е. -1=-1) 2 GhostOnline, обзываться не стоит, перепутал условие. P.s. Сорри за оффтоп. |
Цитата:
Цитата:
|
Цитата:
PHP код:
Рекомендуется тестировать при как можно меньшем кол-ве запущенных приложений! тест общий занимает около 2х секунд... интересны результаты... Абсолютно не претендую на адекватность теста, тем более скорее всего он не особо адекватен.. UPD3: Прогнав пару-тройку раз, заметил что результаты примерно одинаковые, на моей машине значения либо 671ms ибо 687ms |
правильно, потому что 1=1 сравниваются константы
компилятор такие вещи вычисляет заранее кстати, AlexTheC0d3r советую для таких вещей установить себе профайлер чтобы каждый раз не мучаться с настройкой велика - GProfile Намного хуже когда я вижу такой код: if Button1.Enabled = True then ... |
Цитата:
Эт я тоже давно читал примеры говнокода и вот до сих пор вспоминаю код : if Length(IntToStr(number)) = 1 then {один разряд у числа} else { не один } или if true then {что то делаем} else {а дальше сплошной профит} Такие мастера находятся:)) |
Потестил код, короче с true как ни крути выигрывает, 672ms, при 1=1 686ms. Но в отладчике код одинаков, то есть ни там ни там нет проверки, но разница есть, во всём виноваты массоны:))
|
Новый тест, без оптимизации...
Действительно, как бы не парадоксально это выглядело, но PHP код:
PHP код:
PHP код:
|
Один раз было, что True на 10 мс быстрее выполнилось чем 1=1:
1: 3859ms 2: 3844ms 3: 91609ms 1: 4249ms 2: 4000ms 3: 92421ms P.s. 3 метод просто убивает :) |
Цитата:
|
Хватит гадать, в обоих случаях константные выражения.
Точная скорость выполнения зависит от слишком многих факторов |
Цитата:
|
всё, разобрался. но возникла другая проблема. по коду Jingo Bo, если брать словарь 79 символов и переменную int64, то перебор возможен до ~7(длина пароля) символов, потом всё по новой переберает. =\
|
| Время: 10:55 |