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

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

 

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

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

тема: Ответ 002 на задачу N 5
 
 автор: SoftTime   (09.02.2006 в 15:39)   письмо автору
 
 

Ответ 002 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
<?php
 
/**************************************************************************************
        cluster - 06b2d4b91b5c9eaa8c20a1c270f95b3c
        Linux - e206a54e97690cce50cc872dd70ee896
        Lisbon - fbfa6902f089e5a0fa2424bd460ecfd0
        pyramid - 437233c74e25fe505293cd2e8ecc2696
        subprogram - fb28e9240e83a5264566de844cc45523
        1.5634 -время выполнения
 **************************************************************************************/
 
function gettime()                                          //функция записи времени 
 

   
$part_time explode ' ' microtime () ); 
   
$real_time $part_time ] . substr $part_time ] , );  
   return 
$real_time
 } 

 
$start_time gettime(); 
 
 
$pas = array ("437233c74e25fe505293cd2e8ecc2696",
              
"fb28e9240e83a5264566de844cc45523",
             
"06b2d4b91b5c9eaa8c20a1c270f95b3c",
                         
"e206a54e97690cce50cc872dd70ee896",
             
"fbfa6902f089e5a0fa2424bd460ecfd0");
 
$find_pas = array();
 
$find 0;
 
$c_mas count$pas );

 
$words fopen "d:linux.words" "r" ) or die( "Error" );

 while ( 
$word fgets $words ) )
 {
   
$hash md5 strtolower preg_replace "/s/" ,"" $word ) ) );
   if ( 
in_array $hash $pas ) ) //сравниваем хэши
   
{
     
$find_pas $hash ] = $word;
     if ( ++
$find == $c_mas //если нашли все слова - выход из цикла
       
break;
   } 
 }
 
 foreach ( 
$find_pas as $var => $value )
   echo 
"$value - $var<br>";
 
 
$stop_time gettime();                    //время завершение выполнения скрипта 
 
$time bcsub $stop_time $start_time );  //  Время выполнения скрипта 
 
echo $time;
?>


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

   
 
 автор: cheops   (13.02.2006 в 00:00)   письмо автору
 
   для: SoftTime   (09.02.2006 в 15:39)
 

Вот оригинальный ответ
<?php
 
/**************************************************************************************
        cluster - 06b2d4b91b5c9eaa8c20a1c270f95b3c
        Linux - e206a54e97690cce50cc872dd70ee896
        Lisbon - fbfa6902f089e5a0fa2424bd460ecfd0
        pyramid - 437233c74e25fe505293cd2e8ecc2696
        subprogram - fb28e9240e83a5264566de844cc45523
        1.5634 -время выполнения
 **************************************************************************************/
 
function gettime()                                          //функция записи времени 
 

   
$part_time explode ' ' microtime () ); 
   
$real_time $part_time ] . substr $part_time ] , );  
   return 
$real_time
 } 

 
$start_time gettime(); 
 
 
$pas = array ("437233c74e25fe505293cd2e8ecc2696",
              
"fb28e9240e83a5264566de844cc45523",
             
"06b2d4b91b5c9eaa8c20a1c270f95b3c",
                         
"e206a54e97690cce50cc872dd70ee896",
             
"fbfa6902f089e5a0fa2424bd460ecfd0");
 
$find_pas = array();
 
$find 0;
 
$c_mas count$pas );

 
$words fopen "d:\linux.words" "r" ) or die( "Error" );

 while ( 
$word fgets $words ) )
 {
   
$hash md5 strtolower preg_replace "/\s/" ,"" $word ) ) );
   if ( 
in_array $hash $pas ) ) //сравниваем хэши
   
{
     
$find_pas $hash ] = $word;
     if ( ++
$find == $c_mas //если нашли все слова - выход из цикла
       
break;
   } 
 }
 
 foreach ( 
$find_pas as $var => $value )
   echo 
"$value - $var<br>";
 
 
$stop_time gettime();                    //время завершение выполнения скрипта 
 
$time bcsub $stop_time $start_time );  //  Время выполнения скрипта 
 
echo $time;
?>

   
 
 автор: cheops   (13.02.2006 в 00:08)   письмо автору
 
   для: cheops   (13.02.2006 в 00:00)
 

Пароли не совсем корректно расшифровываются - два выдаются с заглавной буквой, хотя в условиях сказано, что они все состоят из букв в нижнем регистре. Конструкция
preg_replace ( "/\s/" ,"" , $word )

явно лишняя не говоря уже о том, что регулярные выражения - это достаточно дорогостоящие по времени функции. Не используется функция file(), вместо неё используется связка fopen()+fgets() - это экономит память, но снижает читабельность и скорость. Конструкция ++$find == $c_mas также не способствует читабельности.

   
 
 автор: Саша   (13.02.2006 в 09:44)   письмо автору
 
   для: cheops   (13.02.2006 в 00:08)
 


preg_replace ( "/\s/" ,"" , $word )

использовалась для верности... да, ее можно заменить...
А вот с функцией file() , у меня получалось по времени больше... почему-то... по этому переключился на fopen()+fgets().

   
Rambler's Top100
вверх

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