Генератор слов на php

Помогите создать генератор слов на php. Нужно гененировать слова из следующих букв: e, r, t, u, i, o, p, a, s, d, f, g, h, k, l, z, v, b, n, m

Длина получаемого слова - 5 символов. Из генерации нужно удалить слова, в которых:

  • Подряд содержатся 2 и более гласные
  • Подряд содержатся 2 и более одинаковые согласные
  • Подряд содержатся 3 и более согласные

Все данные нужно записать в файл.

То есть:

eraab, eraaa, errab, ertde - такие слова удаляются

ertab, ritar - такие остаются

4 ответа

Есть два способа. 1) простой: перебираем все слова от ааааа до zzzzz.

if(preg_match("/(?:[euioa]{2,})|(?:[qwrtypsdfghjklzxcvbnm]{3,})/",$word){
//Убираем из массива, как несоответствующий п1 или п3
}
$******* = str_split('qqwwrrttyyppssddffgghhjjkkllzzxxccvvbbnnmm',2);
if(strpos($word,$*******)!==false){
//убираем из-за двойной согласной
}


$minlen = 5;
$maxlen = 10;
$num = 10;
$l = array('euioa', 'rtpsdfghklzvbnm');
$ll = array(strlen($l[0]), strlen($l[1]));
$out = array();
$ll0 = sizeof($l[0]);
$ll1 = sizeof($l[1]);
for($j = 0; $j < $num; ++$j){ $cl = rand($minlen, $maxlen); $word = ''; for($i = 0; $i < $cl; ++$i){ if($n === 0) $n = 1; else $n = rand(0, 1); do{ $s = $l[$n][rand(0, $ll[$n]-1)]; }while($s == $word[strlen($word)-1]); $word .= $s; } $out[] = $word;
}
print_r($out);

Немного более общее решение, подразумевающее переменную длину ников. Если надо ровно 5 букв, поменяйте $maxlen на 5.


Полный перебор:

const VOWS = 0;
const CONS = 1;
const ALL = 2;
$lists = array( VOWS => array(), CONS => array(), ALL => array()
);
foreach (array('euioa', 'rtpsdfghklzvbnm') as $i => $chars) { for ($j = 0; $j < strlen($chars); $j++) { $char = $chars[$j]; $lists[$i][$char] = $i + 1; $lists[ALL][$char] = 1 - $i; }
}
function generate($chars, $word = '', $level = 0) { global $lists; if ($level == 5) { echo "$word\n"; return; } foreach ($chars as $char => $type) { $list = $lists[$type]; unset($list[$char]); generate($list, $word.$char, $level + 1); }
}
generate($lists[VOWS] + $lists[CONS]);


И в чем именно у вас проблемы ?

Обычный поиск в глубину причем глубина лимитированная. А так же проверка правил на каждом шаге генерации. Вариантов будет много, сразу предупреждаю.

По поводу генерации ников - я бы порекомендовал генетический алгоритм. Перед этим обучив его каким то списком красивых ников. Далее он будет генерировать не хуже :)

licensed under cc by-sa 3.0 with attribution.