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

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

Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    Помогите, пожалуйста, заменить любое слово в тексте, которое:
    1. Находится не ближе 300 символов к началу текста.
    2. Сделать замену на случайно выбранное слово.
    3. Заменять слово на word21
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    у тебя 2-й и 3-й пункты противоречат друг другу.
     
    venetu нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Случайно выбранное слово из текста, которое не стоит ближе 300 символов к началу текста заменить на word21.
     
  4. PHPCod3r

    PHPCod3r

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

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    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. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Есть небольшой минус этого кода. В случае если обрезание до 300 символов разрежет слово, и рендом выдаст именно последний элемент. Для перестраховки можно в rand отнимать 2 от числа элементов.
     
  7. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Еще он не понимает знаков препинания (кроме пробелов), не сохраняет регистр символов (допустим, если слово стояло в начале предложения и было с заглавной), не определяет кодировку, и не делает тысячу других вещей. Не меньше тысячи недостатков есть у этого кода, реально.

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

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

    Я в общем к чему: не важно, насколько глючный и херовый у тебя код. Единственное требование к нему - экономить время. Если тебе быстрее вручную в блокноте заменить любое слово в пределах 300 символов - то никакой, НИКАКОЙ написанный тобою код не будет хорош, не важно на чем он и насколько круто реализован. И наоборот, любой код, который ты написал быстрее чем заменил бы слово вручную в ноутпаде - идеален. Улучшать его = тратить больше времени = уменьшать выигрыш от его использования.
     
  8. danik

    danik

    Регистр.:
    26 июн 2007
    Сообщения:
    206
    Симпатии:
    53
    а разве в этом случае заменится не рандомное слово из числа первых 300 символов? (смотрю на 1ое требование ТС).
     
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Здесь заменяется только одно.
     
  10. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    А я так и не понял, текст содержит символ перевода строки или нет?
    Если да то их все таки стоит учитывать, а то получиться что это
    adf
    adfasf
    одно слово ;)