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

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

 

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

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

тема: Ответ 007 на задачу N 5
 
 автор: SoftTime   (10.02.2006 в 10:30)   письмо автору
 
 

Ответ 007 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.

<!-- Axxil-->
<?php
$file
=file('linux.words');
$hash[0]='fb28e9240e83a5264566de844cc45523';
$hash[1]='437233c74e25fe505293cd2e8ecc2696';
$hash[2]='06b2d4b91b5c9eaa8c20a1c270f95b3c';
$hash[3]='e206a54e97690cce50cc872dd70ee896';
$hash[4]='fbfa6902f089e5a0fa2424bd460ecfd0';
$count=0;
foreach(
$file as $word){
  if(
in_array(md5(trim(strtolower($word))),$hash)){
    echo 
$word."<br>";
    
$count++;
  }
  if(
$count==5) break;      
}  
?>


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

   
 
 автор: udaf   (13.02.2006 в 00:23)   письмо автору
 
   для: SoftTime   (10.02.2006 в 10:30)
 

прикольно, а главное быстро
я и не догался бы поместить файл в массив и функция in_array хорошо использована
по моему этот код луший

   
 
 автор: cheops   (13.02.2006 в 00:43)   письмо автору
 
   для: SoftTime   (10.02.2006 в 10:30)
 

Просто суперское решение, читабельное, компактное, досрочный выход при нахождении всех паролей, хэш вычисляется только один раз. Скорость выше всяких похвал - мне это решение больше всех понравилось.

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

а если слов станет 6, надо менять в двух местах ;-)
и неизвестно какой хеш какому слову принадлежит

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

А у меня большая претензия к этому варианту: какой пароль относится к какому хэшу?
А если хешей будет не 5, а 20... как тогда разбираться?
Ну и я считаю что результаты скрипта должны быть доступны для дальнейшей работы (вывод на экран я таковым не считаю). Но это уже мой личный бзик:)

   
 
 автор: akira   (13.02.2006 в 11:04)   письмо автору
 
   для: Loki   (13.02.2006 в 10:30)
 

Я делал через array_searc, загонял словарь в хэш-массив и искал в нем хэш-пароль.

   
 
 автор: Axxil   (13.02.2006 в 12:24)   письмо автору
 
   для: Loki   (13.02.2006 в 10:30)
 

Да нассчёт кому какой хеш принадлежит серьёзный косяк...
Не заметил блин...
А насчёт вывода... Срмневаюсь что в этой же программе понадобится работать с паролями. Но если надо это делается двумя взмахами пальцев :)
<?php 
$file
=file('linux.words'); 
$hash[0]='fb28e9240e83a5264566de844cc45523'
$hash[1]='437233c74e25fe505293cd2e8ecc2696'
$hash[2]='06b2d4b91b5c9eaa8c20a1c270f95b3c'
$hash[3]='e206a54e97690cce50cc872dd70ee896'
$hash[4]='fbfa6902f089e5a0fa2424bd460ecfd0'
$count=0;
$out=array(); 
foreach(
$file as $word){ 
  if(
in_array(md5(trim(strtolower($word))),$hash)){ 
    
array_push($out,array('pass'=>$word,'hash'=>md5(trim(strtolower($word)))));
    
$count++; 
  } 
  if(
$count==sizeof($hash)) break;       

// И пожалуйста работаем с массивом  
foreach($out as $key=>$item){
  echo 
$key.". Hash: ".$item['hash']." Password: ".$item['pass']."<br>";
}  
?>

Но в плане скорости конечно лучше не заносить результат в массив $out а сразу вываливать в браузер

   
 
 автор: Artem S.   (13.02.2006 в 22:19)   письмо автору
 
   для: Axxil   (13.02.2006 в 12:24)
 

Скрипт самый компактный, но imho не самый лучший. За читаемость я бы поставил ниже, а все в
"if(in_array(md5(trim(strtolower($word))),$hash)){" и подобных конструкциях. Мало того что подобный стиль трудно "прочитать", его еще и сложнее редактировать. Так что это читаемость никак не повышает, а снижает.

   
 
 автор: Axxil   (14.02.2006 в 12:55)   письмо автору
 
   для: Artem S.   (13.02.2006 в 22:19)
 

Я ещё раз позволю себе выразить недоумение.
Мы пароли подбираем а не пишем сложнейшую CMS. И здесь важна скорость и память. Лишнии присваивания совсем не к чему.
В данном случае это конечно не смертельно, но надо уметь различать задачи и представлять когда некоторое уменьшение(замечу не смертельное) читабельности приносится в жертву скорости.

   
 
 автор: Саня   (14.02.2006 в 14:06)   письмо автору
 
   для: SoftTime   (10.02.2006 в 10:30)
 

Хе :). У меня такое же решение получилось. Только без if($count==5) break; и trim().
Ничего не смог подобрать, поэтому и не отправил. Так и не понял в чём дело, почему не работает. /* может из-за того, что file() возвращает строки, в которых, в конце, \n? */

   
Rambler's Top100
вверх

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