Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 011 на задачу N 4
 
 автор: SoftTime   (07.02.2006 в 14:50)   письмо автору
 
 

Ответ 011 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.
<?php

/* Принцеп "барабанов". На различных старых устройствах
были такие счетчики. Каждый разряд крутился и после 9 прокручивался
следующий барабан, когда и он дохожил до 9 прокручивался следующий и т.д.
Тут барабанами явл. символы. и после последнего символа алфавита,
он прокручивает следующий разряд */

set_time_limit(0);
ob_implicit_flush();
// Хеш
$passHash "8dbc672497bdc46f88e864bb1121232c";
// Алфавит перебора
$maskArr = array("a""b""c""d""e""f""g""h""i""j""k""l""m",
                 
"n""o""p""q""r""s""t""u""v""x""y""z",);
// Размер слова
$maskSize 4;
// Размер алфавита
$maskArrSize sizeof($maskArr) - 1;
// Последний символ
$lastChar end($maskArr);
// Последний пароль
$lastPass str_repeat($lastChar$maskSize);

// Первый символ и будет 1 словом
$pass $maskArr[0];
// Индекс слудующей буквы для первого символа
$index 1;

// Функция время работы в долях секунд
function getmicrotime() {
    list(
$usec$sec) = explode(' 'microtime());
    return ((float)
$usec+(float)$sec);
}

echo 
"searching....<br>
"
;
// Фиксируем начало
$start_time getmicrotime();
// Подбераем пока не совпадет или не закончатся слова
while ($passHash != md5($pass) && $pass != $lastPass) {
    
// Проверяем что прошли весь алфавит
    
if (!isset($maskArr[$index])) {
        
// сбрасываем 1ый барабан в 1ый символ        
        
$index 0;  
        
$num 0;
        
// Может получиться что один "барабан" повлечет
        // за собой все остальные - по этому цикл    
        
do {
            
// сбрасываем текущий "барабан" на первый символ алфавита 
            
$pass{$num} = $maskArr[0];       
            
// переходим в след. разряд
            
$num++;
            
// он был?
            
if (isset($pass{$num})) {
                
// находим индекс значения из алфавита и добавлем +1 (следующий индекс)
                
$newindex array_search($pass{$num}, $maskArr) + 1;
            } else {
                
// иначе индекс 0 (первый символ алфавита)
                
$newindex 0;
            }
          
// пока "барабаны" не перестануть крутиться
          // а условием этого что есть еще буквы из алфавита          
        
} while (!isset($maskArr[$newindex]));
        
$pass{$num} = $maskArr[$newindex];
    } else {
        
// инче меняем первый барабан
        
$pass{0} = $maskArr[$index];
    }    
    
// увеличиваем индекс
    
$index++;
}

if (
$passHash == md5($pass))  {
    echo 
"Found!
"
;
    echo 
$passHash ." = ".$pass;
} else {
    echo 
"Not found
"
;
}

$end_time getmicrotime() - $start_time;
echo 
"
<br>Spend time: "
$end_time"sec";

?>


http://www.softtime.ru/info/task.php?id_article=74

   
 
 автор: cheops   (08.02.2006 в 23:54)   письмо автору
 
   для: SoftTime   (07.02.2006 в 14:50)
 

Немного громоздко и загадочно, но диапазон легко расширяем, нет вложенных циклов и используется функция set_time_limit(0), которая для такой задачи более чем уместна.

   
 
 автор: Necro   (09.02.2006 в 02:04)   письмо автору
 
   для: SoftTime   (07.02.2006 в 14:50)
 

У меня почему-то не находит lena? Остальное находит.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования