Итак, допустим есть файл города.txt, по которому мы сверяем слова (40 строк):
[spoiler] Абакан
Абинск
1Адлер
Адыгейск
Азов
Алагир
1Алапаевск
Алдан
Александров
1Александровск
Алупка
Амурск
Анапа
Арзамас
Архангельск
Астрахань
Балашов
1Балтийск
Барнаул
Белгород
Березники
Благовещенск
Братск
Буденновск
Валаам
Верхоянск
Витим
1Владивосток
Владикавказ
Воркута
Выборг
Галич
Гдов
Геленджик
Горячинск
Губкин
Дзержинск
Дивногорск
Добрянка
Домодедово
[/spoiler]
Загаданы 5 слов из этого словаря (для наглядности нужные отметила 1), буквы которых сложили вместе и отсортировали по алфавиту, ну и перенесли в файл ГородаБуквы.txt :
[spoiler]
А А А а а а а а
Б
В в в в
д д д
е е е
и и
й
к к к к к
л л л л л
н
о о о
п
р р
с с с с с
т т
[/spoiler]
Трудность в том, что даже алгоритм правильный для поиска продумать не получается пока что.
К примеру, с первой попытки всяко ничего не выйдет (как минимум прога возьмет слово Александров вместо Александровска), но как показать, что надо повторно будет все делать, исследуя все возможные комбинации слов и пропуская те, которые уже были проверены?
Если брать логику и переменные с простой сверки, то начало видимо будет выглядеть так:
[spoiler]
$str_find=""
FOR($a=0,$a<15)
$a_find=strreadln("ГородаБуквы.txt",$a+1)
$str_find=STRCONCAT($str_find, $a_find)
END_CYC
$str_find=STRFILTER($str_find, " 1234567890.,-)", 0) //чищу от возможного хлама
print("Исходные буквы - ",$str_find)
print("Количество - ",STRLEN($str_find))
$check=0
$a_new=0
WHILE($check < 5)
$a_str_find = $str_find // чтоб не портить начальную строчку букв
UNDEFINE($Word_arr) // здесь будет лежать вариант ответов
FOR($a=$a_new,$a<40)
$a_check=STRFILTER(strreadln("города.txt",$a+1), " 1234567890.,-+)", 0)
print("слово ",$a_check)
$err=0
WHILE((STRLEN($a_check)>0)&($err=0))
$a_sim=STRCUT($a_check, 1, 1) //проверка букв
Print($a_sim)
$a_count= STRLEN(STRFILTER($a_str_find, $a_sim, 1)) - STRLEN(STRFILTER($a_check, $a_sim, 1))
IF($a_count<0) //не хватает символов
$err=1
$a_check=0
Print("не подходит")
END_IF
$a_check= STRFILTER($a_check, $a_sim, 0)
$a_new=$a+1 //после того, как слово проверено, надо продолжать с проверки следующего
WAITMS(500)
END_CYC
If($err=0)
Print("подходит")
ARRPUSH($Word_arr, $a_check) // добавить слово в массив
INC($check)
WHILE(STRLEN($a_check)>0) // убрать все буквы, составляющие слово, из общего списка
$a_sim=STRCUT($a_check, 1, 1)
$a_count= STRLEN(STRFILTER($a_str_find, $a_sim, 1)) - STRLEN(STRFILTER($a_check, $a_sim, 1))
$a_str_find= STRFILTER($a_str_find, $a_sim, 0)
FOR($a=0,$a<$a_count) //вернуть в общий список зря убранные буквы
$a_str_find= STRCONCAT($a_str_find, $a_sim)
END_CYC
$a_check= STRFILTER($a_check, $a_sim, 0)
END_CYC
print("Новые исходные буквы - ",$a_str_find)
$a_str_find= STRFILTER($a_str_find, $a_sim, 0)
FOR($a=0,$a<ARRSIZE($Word_arr))
Print($Word_arr[$a])
END_CYC
End_If
.............................
END_CYC
END_CYC
[/spoiler]
Кидаю ну совсем уж черновой вариант, работоспособность даже почти не проверена. Просто проблема не только в том, что не знаю Как написать, но и не очень представляю Что писать (логику программы).