|
|
|
|
|
для: cheops
(02.10.2009 в 22:54)
| | Вот примерно на этом у меня все и застревало... | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2009 в 22:37)
| | Нужно выкручиваться через рекурсию - если имеется переменное количество сумм - верный признак (можно, конечно и без рекурсии обойтись, но на мой взгляд сложнее получится)... подумать нужно как тут лучше подойти... | |
|
|
|
|
|
|
|
для: cheops
(02.10.2009 в 20:46)
| | Получается, что я недостаточно четко сформулировал задачу. Не учел, что решение может пойти таким путем, когда количество групп синонимов станет элементом кода.
В реале количество групп синонимов заренее неизвестно и может быть достаточно большим. Например, одно четверостишие, а их может быть много, имеет такой вид
Пришла/Ушла/Подошла/Не дошла = пора/такая пора/такая минута/эпоха =, = чтоб/чтобы/когда/ = истинный/действительный/реальный= /мудрец/мудрый человек/философ/мыслитель*
О разуме/Про разум = поведал/рассказал= наконец/в конце концов=.*
Яви/Покажи/Предъяви = нам/всем/людям = слово/словечко/фразу = , восхваляя/нахваливая/превознося = разум/мышление =, *
И поучай/И наставляй/И научи/ = людей/людишек = своим/свойским/личным = рассказом/повествованием =.
Здесь группы синонимов разделены знаками равентства, а фразы зыездочками.
При таком представлении информации нетрудно получить массивы вида
$content[] = array(синонимы);
| столько, сколько их потребуется.
Но от количества групп синонимов в Вашем коде зависит число операторов цикла вида
for($i = 0; $i < count($content[0]); $i++)
|
Как тут быть? | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2009 в 20:10)
| | Вообще-то это сумма сумм - для таких задач наиболее всего рекурсия подходит, но если отталкиваться от существующего примера, то без рекурсии двумерным массивом можно воспользоваться примерно так
<?php
$content[0] = array("Пришла","Ушла","Подошла","Не дошла");
$content[1] = array("пора","такая пора","такая минута","эпоха");
$content[2] = array("чтоб","что бы","когда");
$content[3] = array("истинный","действительный","реальный");
$content[4] = array("мудрец","мудрый человек","философ","мыслитель");
for($i = 0; $i < count($content[0]); $i++)
for($j = 0; $j < count($content[1]); $j++)
for($k = 0; $k < count($content[2]); $k++)
for($l = 0; $l < count($content[3]); $l++)
for($n = 0; $n < count($content[4]); $n++)
{
echo $content[0][$i]." ".$content[1][$j]." ".$content[2][$k]." ".
$content[3][$l]." ".$content[4][$n]."<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(02.10.2009 в 20:02)
| | Как интересно, cheops !
А как потом из этого массива получить набор предложений?
=============
( У меня от двумерности мозги закипают...) | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2009 в 19:51)
| | Хм... может проще воспользоваться двумерным массивом? Т.е. создать массив файлов
<?php
$fl[0] = "first.txt";
$fl[1] = "second.txt";
$fl[2] = "third.txt";
...
?>
|
Поместить содержимое файла в двумерный массив $content, таким образом, что в развернутом виде получится
<?php
$content[0][0] = "Пришла";
$content[0][1] = "Ушла";
$content[0][2] = "Подошла";
$content[0][3] = "Не дошла";
$content[1][1] = "пора";
$content[1][2] = "такая пора";
$content[1][3] = "такая минута";
$content[1][4] = "эпоха";
...
?>
|
Т.е. первый индекс в массиве $content соответствует индексу файла из массива $fl, а второй - индексу слова. Тогда проблема названий отпадает сама собой - у вас будет одно название, а группы слов пронумерованы индексами из массива $fl. | |
|
|
|
|
|
|
|
для: cheops
(02.10.2009 в 19:38)
| | Первое слово 4 варианта
Второе слово 4 варианта
Третье слово 3 варианта
Четвертое слово 3 варианта
Пятое слово 4 варианта.
Всего: 4*4*3*3*4 = 576 вариантов.
Я последнюю строку позже добавил и не посчитал ее варианты.
Спасибо! Очень интересный алгоритм!
====================
Однако с реализацией этого алгоритма возможны некоторые проблемы.
Информация вводится из текстового файла и заранее неизвестно количество слов.
А тут сам код зависит от количества слов! | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2009 в 19:31)
| | Можно поступить примерно так
<?php
$fst = array("Пришла","Ушла","Подошла","Не дошла");
$snd = array("пора","такая пора","такая минута","эпоха");
$thd = array("чтоб","что бы","когда");
$fth = array("истинный","действительный","реальный");
$fiv = array("мудрец","мудрый человек","философ","мыслитель");
for($i = 0; $i < count($fst); $i++)
for($j = 0; $j < count($snd); $j++)
for($k = 0; $k < count($thd); $k++)
for($l = 0; $l < count($fth); $l++)
for($n = 0; $n < count($fiv); $n++)
echo $fst[$i]." ".$snd[$j]." ".$thd[$k]." ".$fth[$l]." ".$fiv[$n]."<br>";
?>
|
PS Только у меня получилось 576 вариантов. | |
|
|
|
|
|
|
| Требуется сделать скрипт, составляющий фразы из синонимов.
Например, есть набор вариантов первого слова
Пришла/Ушла/Подошла/Не дошла
Набор вариантов второго слова
пора/такая пора/такая минута/эпоха
Набор вариантов третьего слова
чтоб/что бы/когда
Набор вариантов четвертого слова
истинный/действительный/реальный
Набор вариантов пятого слова
мудрец/мудрый человек/философ/мыслитель
Всего 144 комбинации, из которых можно составить 144 предложения.
Как бы это сделать? | |
|
|
|
|