Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2015-07-01 20:00:32 ЛС | профиль | цитата
Сколько можно составить новых слов из слова "обороноспособность"? Не менее 74. А из слова "автомобилеразгрузчик"? Не менее 1500! Итак, вот схема для экспериментов с поиском слов в словах (требуется вложенный russian.txt).
карма: 9
0
файлы: 1oboronosposobnost.rar [147.8KB] [701]
Ответов: 2265
Рейтинг: 676
#2: 2015-07-01 20:07:43 ЛС | профиль | цитата
HiAsm писал(а):
Element SplitStr not found in current palette
Что за зверь? Где водиться? Положите тушку в архив, чтоб не бегать по лесам.
карма: 11

0
Ответов: 1926
Рейтинг: 172
#3: 2015-07-01 20:51:02 ЛС | профиль | цитата
Исправил в исходном файле, заменил этот (мой) компонент на эквивалентную схему.
карма: 9
0
Ответов: 8926
Рейтинг: 823
#4: 2015-07-01 21:46:50 ЛС | профиль | цитата
3042, словарик надо поболее найти [flood]Как же мне неприятны крашенные, с разрывом линий, раскиданные на два экрана схемы [/flood]
компактнее.jpg

карма: 19

0
файлы: 1компактнее.jpg [130KB] [1263]
Ответов: 1926
Рейтинг: 172
#5: 2015-07-01 22:06:04 ЛС | профиль | цитата
Леонид, согласен, да где ж его взять-то?
------------ Дoбавленo в 22.06:
[flood]А я наоборот, люблю разрывы, т.к. лучше с ними ориентируюсь На вкус и цвет...[/flood]
карма: 9
0
Ответов: 8926
Рейтинг: 823
#6: 2015-07-01 23:44:12 ЛС | профиль | цитата
3042, а интернет на что? первая ссылка по "обратный словарь русского языка" и он на Яндекс-диске https://yadi.sk/d/sA_xJHqZhcJ5d, может и лучше есть
карма: 19

1
Голосовали:3042
Ответов: 16884
Рейтинг: 1239
#7: 2015-07-02 08:42:46 ЛС | профиль | цитата
Леонид писал(а):
словарик надо поболее найти
И нарисовать алгоритм на бумажке
3042 писал(а):
Сколько можно составить новых слов из слова "обороноспособность"?
Точно знаю, что составленные слова могут начинаться на 11 разных букв. Зачем перебирать весь словарь ?
А если быть совсем точным, то всего на 7 разных букв.
А цепочка из StrCase и Delete вообще отстой - сначала варим барана, а потом снимаем с него шкуру.
Отличный пример для начинающих.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1926
Рейтинг: 172
#8: 2015-07-02 19:58:29 ЛС | профиль | цитата
Tad писал(а):
А цепочка из StrCase и Delete вообще отстой - сначала варим барана, а потом снимаем с него шкуру.

Такой уж у меня словарь, не стал я его менять, хотя это, конечно, влияет на производительность.

Tad писал(а):
Точно знаю, что составленные слова могут начинаться на 11 разных букв. Зачем перебирать весь словарь ?

хорошая мысль

Леонид писал(а):
обратный словарь русского языка

А почему именно "обратный"?
карма: 9
0
Ответов: 8926
Рейтинг: 823
#9: 2015-07-02 21:49:28 ЛС | профиль | цитата
3042, как правило в "обратных" словарях (сортировка по алфавиту справа) только "голые" слова без толкования
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#10: 2015-07-03 11:49:08 ЛС | профиль | цитата
3042 писал(а):
Tad писал(а)
А цепочка из StrCase и Delete вообще отстой - сначала варим барана, а потом снимаем с него шкуру.

Такой уж у меня словарь, не стал я его менять, хотя это, конечно, влияет на производительность.
Словарь здесь вообще ни при чем.
Удали лишнее - потом Lower.
------------ Дoбавленo в 11.49:
Когда-то была подобная задача.
Вот сегодня нашёл свой IC и переделал под твою задачу:
Add(MainForm,2953706,21,105)
{
Height=117
Position=1
}
Add(Edit,11872502,84,105)
{
Left=25
Top=15
Width=330
Text="Обороноспособность"
ClearAfterEnter=1
link(onEnter,14826946:doWork,[])
}
Add(Label,6505962,231,112)
{
Left=30
Top=50
Alignment=1
}
Add(InlineCode,14826946,154,112)
{
WorkPoints=#6:doWork|
EventPoints=#5:onRes|
VarPoints=#4:vStr|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|15: Str:string;|9: public|20: onRes:THI_Event;|54: procedure doWork(var _Data : TData; Index : Word);|52: procedure vStr(var _Data : TData; Index : Word);|5: end;|0:|14:implementation|29:procedure THiAsmClass.doWork;|17:var s,sss:string;|19: i, j : integer;|5:begin|18:// Получаем строку|29:str := Trim(toString(_Data));|66:// Проверяем на "пусто". Если нет, то переводим в нижний регистр. |50:If str='' then exit else str:= AnsiLowerCase(str);|8:sss:='';|36:// удаляем повторы и символы "Ъ Ы Ь"|104:for i:=1 to length(str) do if (pos(str[i],sss)=0) and not (str[i] in ['ъ'..'ь']) then sss:=sss+str[i]; |49:// простенькая сортировка, но вполне приемлемо. |5:j:=0;|14: While j=0 do|9: begin|11: j:=1;|35: for i:= 1 to length(sss)-1 do|94: if sss[i+1]<sss[i] then begin s:=sss[i]; sss[i]:= sss[i+1]; sss[i+1]:=s[1]; j:=0; end; |6: end;|23:_hi_onEvent(onRes,sss);|4:end;|0:|27:procedure THiAsmClass.vStr;|5:begin|21: dtString(_Data,str);|4:end;|0:|4:end.|
link(onRes,6505962:doText,[])
}

(прикинул, что на компонентах будет вагон и маленькая тележка )
И, насколько я помню, компонент ArraySort работает нормально с русскими буквами только с компилятором FPC, а вот с Delphi нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1926
Рейтинг: 172
#11: 2015-07-03 13:19:24 ЛС | профиль | цитата
Tad, У меня после выполнения этого кода получилось получилось "бнопрст", это не 11, а 7 букв. Да и удалять повторы букв нельзя, ведь суть задачи в том, чтобы составить новые слова, используя все имеющиеся буквы с учётом их количества.
карма: 9
0
Ответов: 16884
Рейтинг: 1239
#12: 2015-07-03 18:36:37 ЛС | профиль | цитата
3042 писал(а):
это не 11, а 7 букв.
Всё верно, 7. Я сначала просчитался.
"бнопрст" - это список начальных букв для чтения слов из словаря, т.е. все составленные слова могут начинаться только на эти буквы и ни на какие другие.
Если слово, считанное со словаря, начинается на какую-то другую букву,
то не надо его прогонять через цепочку Delete->Lower->Memory->Length->If_else->Copy-> и т.д.
А ты гонишь весь словарь.

Считанное слово начинается на одну из этих букв?
Да - работаем с ним,
Нет - без лишних слов (затрат времени на прогон через цепочку) берем следующее и т.д.
Как-то так.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1926
Рейтинг: 172
#13: 2015-07-03 19:42:46 ЛС | профиль | цитата
Tad, у меня как: ключевое слово разбивается на буквы, которые заносятся в список. А затем берётся слово из словаря, и с него начинает выдаваться по одной букве: 1-я, 2-я, 3-я и пр. Каждая из них проходит проверку: входит ли она в набор букв ключевого слова. Как только какая-то буква не входит в набор букв ключевого слова, проверяемое слово словаря отбрасывается. Сначала проверяется именно первая буква! Так что если первая буква не входит в набор букв ключевого слова, то словарное слово сразу отбросится, по сути, что ты и предлагаешь.

Lower нельзя выкинуть, от delete можно избавиться, просто убрав всё лишнее в словаре, Copy тоже останется (им мы будем копировать ту самую первую букву).
карма: 9
0
Ответов: 16884
Рейтинг: 1239
#14: 2015-07-03 21:11:18 ЛС | профиль | цитата
3042 писал(а):
Lower нельзя выкинуть
А я и не предлагал ничего выбрасывать. Я предлагал поменять их местами. Сначала удалить ненужное, а потом уже Lower.
Или я не доходчиво объясняю ?
Tad писал(а):
Словарь здесь вообще ни при чем.
Удали лишнее - потом Lower.


7о_m.rar Во всяком случае через длинную цепочку обработки я пропускаю на ~5500 слов из словаря меньше.(Для "Обороноспособность")
Смотри Caption формы.

1. Кстати, само слово "Обороноспособность" из списка результата исключать нельзя. Оно тоже составлено из тех же букв.
Но это дело вкуса.
2. А всего из "Обороноспособность" можно составить 75 слов. (а не 74)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 17о_m.rar [1.7KB] [346]
Ответов: 1926
Рейтинг: 172
#15: 2015-07-04 07:47:40 ЛС | профиль | цитата
Tad писал(а):
А я и не предлагал ничего выбрасывать. Я предлагал поменять их местами. Сначала удалить ненужное, а потом уже Lower.

Я вот про это:
Tad писал(а):
то не надо его прогонять через цепочку Delete->Lower->Memory->Length->If_else->Copy-> и т.д.

В любом случае, для каждого слова придётся использовать copy, lower, возможно memory. Но цепочка действительно получается меньше.


карма: 9
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)