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

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Помогите, пожалуйста, заменить любое слово в тексте, которое:
1. Находится не ближе 300 символов к началу текста.
2. Сделать замену на случайно выбранное слово.
3. Заменять слово на word21
 
Здравствуйте.
Помогите, пожалуйста, заменить любое слово в тексте, которое:
1. Находится не ближе 300 символов к началу текста.
2. Сделать замену на случайно выбранное слово.
3. Заменять слово на word21
у тебя 2-й и 3-й пункты противоречат друг другу.
 
Случайно выбранное слово из текста, которое не стоит ближе 300 символов к началу текста заменить на word21.
 
А что мешает сделать:
1. Укоротить файл до 300 символов.
2. Разбить файл на строки.
3. В каждой строке, выбрать слова.
4. Все слова занести в двумерный массив с числовыми индексами.(первый индекс номер строки второй номер слова с строке)
5. Далее выбрать случайную пару чисел, и заменить соответствующии элемент массива на слово word21.
Если нужно результат представить в виде файла то обьединяем все элементы массива в строку и выводим(так как массив двумерный то переводы строк потеряться не должны)
Вот такой вот алгоритм, может кто более короткии способ видит?
 
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);
 
Есть небольшой минус этого кода. В случае если обрезание до 300 символов разрежет слово, и рендом выдаст именно последний элемент. Для перестраховки можно в rand отнимать 2 от числа элементов.
 
Есть небольшой минус этого кода. В случае если обрезание до 300 символов разрежет слово, и рендом выдаст именно последний элемент. Для перестраховки можно в rand отнимать 2 от числа элементов.

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

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

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

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