Александр Б.
4 сообщения
#16 лет назад
Цитата ("Zionit"):

Отфильтровать регуляркой всё кроме букв и создать массив (explode). после чего по нему пройтись 1 цыклом и посмотреть сколько раз повторяються елементы с одинковыми значениями?)))) Или, непомню как, поменять в массиве местами ключ и значение, и просто выводить foreach ---> echo sizeof ....


Память у PHP не резиновая
Сергей Д.
116 сообщений
#16 лет назад
Цитата ("Zionit"):
Цитата ("SergeD"):
Может быть достаточно простая простая задача...
например:
Имеется поток текста. необходимо определять, было ли текущее слово(элемент) в потоке или оно появилось первый раз.
По завершении получить частоту уникальных значений.

Решить можно быстро и многими способами...


Отфильтровать регуляркой всё кроме букв и создать массив (explode). после чего по нему пройтись 1 цыклом и посмотреть сколько раз повторяються елементы с одинковыми значениями?)))) Или, непомню как, поменять в массиве местами ключ и значение, и просто выводить foreach ---> echo sizeof ....


К сожалению - это не верное решение, и примитивное. Вы опять не внимательны...( как и с определением IP моего сайта)...
Николай М.
1895 сообщений
#16 лет назад
Информатика и математика плотно идут рядок, думаю надо выбирать задачы уровня универститетскых соросовкых олимпиад, задачки там очень сложные, как в плане математики так и информатики. Помню когда училса в тех.лицее то у нас екзамен бил подобного уровня, со школьной или даже с уникерситетской программой не сравниться, хотя задания били комплексние, точно также и тут надо сделать, не суто 1 алгоритм, а напр. обьёденить криптографию, графику, БД, регулярные виражения, в общем то что насущно) Надо это потому что напр. я хорошо варю в БД, криптографии тоже более менее, а вот в графике или в 3-Д совсем дуб дерево) Конечно если будет задача на БД то я справлюсь, а если графика то тютю... ладно суть то думаю уловили.

Вот ещё пришло в голову, незнаю возможно ли такое.. написать небольшую систему для сбора и анализа всех ошибок что валяться во время работы сайта, и полезно и непросто вроде) Или напр. скрипт который будет вводить код на рапиде, скачивать файлик, а в случаи обрива и т.д. перекачивать его наново, ну такая себе экспертная система)
Арт Б.
50 сообщений
#16 лет назад
А почему же вы оставили позади другие специальности - SEO, дизайнеров, копирайтеров, переводчиков? Или для них отдельные конкурсы планируются?
 Falcon
400 сообщений
#16 лет назад
Наверное, потому что программисты круче всех - они всё тянут и на них всё держится. А насчет дизайнеров и т.д. время от времени бывают тендеры в проектах. С программистами такая шутка не проходит... Представляю себе: "дайте мне две-три реализации проекта, я выберу какая получше".
Вадим Т.
3240 сообщений
#16 лет назад
loverman92, по SEO - я даже не знаю как можно конкурс провести... а вот для дизайнеров, копирайтеров и переводчиков - вполне возможно что-то организуем.
 Falcon
400 сообщений
#16 лет назад
Можно пользовать буфер (последнее слово отсекаем и проверяем, не стыкуется ли оно с первым в начале следующего блока). Рубим буфер по небуквенным символам $words = preg_split("/+/i", $buffer), потом, используя слово, как ключ, проверяем, не находится ли оно в списке выбывших. В языке от силы тысяч 50 слов, так что беря даже в среднем 10 букв в слове, памяти на всё это дело хватит с лихвой.

$grand_table = array();
$unique = 0;
$count = 0;

// ...буффер

foreach ($words as $word) {
if(array_key_exists($word, $grand_table)) {
if(++$grand_table == 1) {
--$unique;
}
} else {
$grand_table = 0;
++$unique;
}
++$count;
}

// ...буффер

echo "Привет. Всего слов: $count, уникальных: $unique.";
Ярослав С.
778 сообщений
#16 лет назад
У меня хоть и небольшой опыт в программировании на PHP, но такие мероприятия поддерживаю целиком и полностью, поэтому +1. А по поводу выбора типа задания, необходимо определиться что будет за конкурс: на знание методови синтаксиса данного языка или же из области олимпиадных задач, где действительно плотно связаны математика и информатика и нужно пораскинуть мозгами (имхо, последний вариант лучше, т.к. по первому хватит и справочника под рукой, ну и немного мозгов соответсвенно ))
Да и вообще, почему сразу на PHP??? Давайте лучше на Паскале или Си... )
 Falcon
400 сообщений
#16 лет назад
tvv, ага. Но хочется заковырочку какую-нибудь вставить.
Вадим Т.
3240 сообщений
#16 лет назад
phpmaniac, лучше так:

$grand_table = array();

foreach ($words as &$word) {
if (!array_key_exists($word, $grand_table)) $grand_table = null;
}

echo "Всего слов: " . count($words) . ", уникальных: " . count($grand_table) . ".";

Это более оптимально, зачем же лишние инкременты и декременты делать для каждого слова, это лишние операции.
Вадим Т.
3240 сообщений
#16 лет назад
А учитывая специфику PHP, так будет еще лучше по производительности (хотя с точки зрения логики - менее корректно):
$grand_table = array();

foreach ($words as &$word) $grand_table = null;

echo "Всего слов: " . count($words) . ", уникальных: " . count($grand_table) . ".";
Андрей Д.
1267 сообщений
#16 лет назад
Цитата:
А вот то же самое, но используя функцию PHP array_flip для работы с массивами (работает еще немного быстрее, я только что замерял):


вот об этом я говорил

Цитата ("Zionit"):
Или, непомню как, поменять в массиве местами ключ и значение
Вадим Т.
3240 сообщений
#16 лет назад
А вот то же самое, но используя функцию PHP array_flip для работы с массивами (работает еще немного быстрее, я только что замерял):
echo "Всего слов: " . count($words) . ", уникальных: " . count(array_flip($words)) . ".";

Но для обработки потока, когда массивов $words может быть несколько, обрабатываемых в скрипте один за другим, то лучше использовать предложенный мной предыдущий способ.
 Falcon
400 сообщений
#16 лет назад
tvv, второй вариант в 17 раз быстрее. :shok:
Андрей Д.
1267 сообщений
#16 лет назад
phpmaniac, возьмите большую базу слов и он будет ещё быстрее))), а поровняв со скоростью работы с 3 вариантом.... Должно быть ещё раз в 10-20 быстрее
 Falcon
400 сообщений
#16 лет назад
tvv, кстати, без ссылки получается ещё быстрее, так что не надо было её добавлять.
foreach ($words as $word) $grand_table = null;
 Falcon
400 сообщений
#16 лет назад
Zionit, я юзаю Братьев Карамазовых Достоевского...
Андрей Д.
1267 сообщений
#16 лет назад
И как, тот вариант который я описал 2 (последний предложеный tvv) быстрее? и на сколько?
 Falcon
400 сообщений
#16 лет назад
Zionit, хочешь почивать на лаврах tvv?
Вадим Т.
3240 сообщений
#16 лет назад
Цитата ("phpmaniac"):
tvv, кстати, без ссылки получается ещё быстрее, так что не надо было её добавлять.

Это на коротких словах оно немного быстрее. А если слова длинные, хотя бы 5 символов и более (и тем более разной длины) - то без ссылки будет медленнее. И чем больше будет длина слов, тем более явно будет проявляться повышение производительности при использование ссылки.

Хотя я могу ошибаться, может быть мой тест недостаточно полный. Вообще такие вещи нужно на реальных данных проверять.