1. Начата процедура восстановления социальных групп. Лидерам старых и новых групп обязательно ознакомиться с регламентом проведения работ.

Случайный выбор слова

Тема в разделе 'PHP', создана пользователем LEXAlForpostl, 8 июн 2011.

  1. Здравствуйте.
    Помогите, пожалуйста, заменить любое слово в тексте, которое:
    1. Находится не ближе 300 символов к началу текста.
    2. Сделать замену на случайно выбранное слово.
    3. Заменять слово на word21
  2. у тебя 2-й и 3-й пункты противоречат друг другу.
    venetu нравится это.
  3. Случайно выбранное слово из текста, которое не стоит ближе 300 символов к началу текста заменить на word21.
  4. А что мешает сделать:
    1. Укоротить файл до 300 символов.
    2. Разбить файл на строки.
    3. В каждой строке, выбрать слова.
    4. Все слова занести в двумерный массив с числовыми индексами.(первый индекс номер строки второй номер слова с строке)
    5. Далее выбрать случайную пару чисел, и заменить соответствующии элемент массива на слово word21.
    Если нужно результат представить в виде файла то обьединяем все элементы массива в строку и выводим(так как массив двумерный то переводы строк потеряться не должны)
    Вот такой вот алгоритм, может кто более короткии способ видит?
  5. PHP:

    // выкусываем первые 300 символов из $text
    $str substr($text,0,300);

    // разбиваем на массив отдельных слов
    $arr explode(' ',$str);

    // заменяем рендомный элемент массива на word21
    $arr[rand(0,count($arr)-1)] = "word21";

    // слепляем массив обратно в строку (возвращаем пробелы)
    $str join(' ',$arr);

    // дописываем к строке оставшийся кусок текста, после 300 символов
    $text $str substr($text,300);

    LEXAlForpostl нравится это.
  6. Есть небольшой минус этого кода. В случае если обрезание до 300 символов разрежет слово, и рендом выдаст именно последний элемент. Для перестраховки можно в rand отнимать 2 от числа элементов.
  7. Еще он не понимает знаков препинания (кроме пробелов), не сохраняет регистр символов (допустим, если слово стояло в начале предложения и было с заглавной), не определяет кодировку, и не делает тысячу других вещей. Не меньше тысячи недостатков есть у этого кода, реально.

    Любой, даже самый навороченный код всегда можно усложнить еще. Чего уж говорить об этих пяти строчках.

    Да, и еще - он не использует ООП. И константа 300 не вынесена в отдельный конфигурационный файлик. И вообще он на PHP, а PHP как известно - говно, сейчас модно юзать руби, ну или на крайняк C++ - нестареющую классику.

    Я в общем к чему: не важно, насколько глючный и херовый у тебя код. Единственное требование к нему - экономить время. Если тебе быстрее вручную в блокноте заменить любое слово в пределах 300 символов - то никакой, НИКАКОЙ написанный тобою код не будет хорош, не важно на чем он и насколько круто реализован. И наоборот, любой код, который ты написал быстрее чем заменил бы слово вручную в ноутпаде - идеален. Улучшать его = тратить больше времени = уменьшать выигрыш от его использования.
  8. а разве в этом случае заменится не рандомное слово из числа первых 300 символов? (смотрю на 1ое требование ТС).
  9. Здесь заменяется только одно.
  10. А я так и не понял, текст содержит символ перевода строки или нет?
    Если да то их все таки стоит учитывать, а то получиться что это
    adf
    adfasf
    одно слово ;)