powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
18 сообщений из 18, страница 1 из 1
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688119
artem_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть у нас набор букв, есть табличка, содержащая словарик. Как нам сделать так, чтобы по этому набору выбирались все слова, получаемые из них?
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688128
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простым перебором порядка следования символов - получаем набор (можно назвать словом) - по нему прямой запрос к таблице (т.е. можно по лайку можно на полное совпадение), найдено вхождение - записываем в коллекцию или в другую таблицу.

Цикл перебора позиций букв писать не буду:)
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688131
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такая чудная функция InStr
пишешь условие:
InStr(перваяИзБукв,Слово) and InStr(втораяИзБукв,Слово) and ... and InStr(последняяИзБукв,Слово) and Len(Слово)=КоличествоБукв
все слова удовлетворяющие этому условию - твои
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688139
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правда с длинной можно подумать по другому, чтобы включались слова с повторами букв.
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688145
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sasha_1
Вот у меня набор букв: мамаздапа. Слова (некоторые) - мама, мазда, дам и т.п.

Так что тут нужно сначала получить все возможные наборы, включая и наборы из одной буквы.
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688151
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я понял немножко по другому вопрос.
но функция все равно полезная :)
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688475
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
случаем не Т9 для мобил?
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32688584
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это, кажется, для игры "Эрудит" или "Scramble"

Предлагаю так...

Разложить набор букв в таблицу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
мамаздапа

tblНаборБукв:

БукваНабора  БуквВНаборе
м                   2 
а                   4 
з                   1 
д                   1 
п                   1 

Словарик на две таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
tblСловарик:

СловоID   Слово   УникальныхБукв
---------------------------------
 1             мама      2 
 2             мазда     4 
 3             дам       3 
 4             кара      3 

tblБуквыСлова:

СловоID  БукваСлова  БуквВСлове 
 1            м               2 
 1            а               2 
 2            м               1 
 2            а               2 
 2            з               1 
 2            д               1 
 3            д               1 
 3            а               1 
 3            м               1 
 4            к               1 
 4            а               2 
 4            р               1 

Подзапросом найти все буквы в словарике встречающиеся нужное колличество раз.
Код: plaintext
1.
2.
3.
4.
5.
qrySub:

SELECT tblБуквыСлова.СловоID
FROM tblБуквыСлова INNER JOIN tblНаборБукв ON tblБуквыСлова.БукваСлова = tblНаборБукв.БукваНабора
WHERE (((tblБуквыСлова.БуквВСлове)<=[tblНаборБукв].[БуквВНаборе]));

А теперь найти нужные слова
Код: plaintext
1.
2.
3.
SELECT tblСловарик.Слово
FROM qrySub INNER JOIN tblСловарик ON qrySub.СловоID = tblСловарик.СловоID
GROUP BY tblСловарик.Слово, tblСловарик.УникальныхБукв
HAVING (((Count(tblСловарик.СловоID))=[tblСловарик].[УникальныхБукв]));

В прикрепленном файле база с этими таблицами и запросами.
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32689083
artem_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
последнее решение интересное
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32689291
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли генерить len(string)! (в смысле факториал) штук выражений типа like "*м*а*м*а*з*д*а*л*а*"?
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32689665
artem_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не проще
слов в словарике 18 тыщ
а комбинаций могут быть миллионы...
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32689900
ппп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этот счет гдето я видел готовое решение.Однако тест показал серьезные иормоза после 1000 записей. если интересно еому могу поискать.
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690357
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artem_kaслов в словарике 18 тыщ
а комбинаций могут быть миллионы...

Это уже интереснее... :)

Если не влом, можно ли выложить тестовые данные куда-нибудь? Например на am.rusimport.ru .
Не все конечно, хотя бы кил 100.

Мы бы дальше порешали бы
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690371
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Предлагаю решение, хотя оно и не привязано к Аксессу.

1. В обоих словах (в том, которое надо проверить, и в разрешенном наборе букв) сортируем буквы по алфавиту при помощи любого алгоритма сортировки массива:

мазда -> аадзм
мамаздапа -> аааадзммп

2. В слове, которое надо проверить, вставляем звездочки между группами разных букв и пишем условие:

"аааадзммп" like "*аа*д*з*м*"

Если в слове есть какая-то лишняя буква (даже из разрешенных, но с превышением количества, например второе "д" или пятое "а"), то условие будет ложно.
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690428
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От нечего делать попробовал еще вариант. Сделал упрощенно, чтоб не возиться.

Итак, считаю, что набор символов в словах ограничен (для себя взял знаки "0"-"9"). Считаю, что количество повторов в знаков в "слове" не важно, важно лишь их наличие.

Сделал таблицу "Слова"
слово - varchar(50) - Primary key
[0] - boolean
[1] - boolean
[2] - boolean
[3] - boolean
[4] - boolean
[5] - boolean
[6] - boolean
[7] - boolean
[8] - boolean
[9] - boolean

В случае, если кол-во повторов важно, вместо boolean используем byte, например, и в поля кладем именно количество вхождений символов в слово, а не признак вхождения. Делал все в a97. В таблице создал второй индекс из полей [0]-[9].

Сделал запрос "разбить":
Код: plaintext
1.
2.
3.
4.
5.
UPDATE Слова SET 
Слова.[ 0 ] = InStr([Слово],'0')<> 0 , Слова.[ 1 ] = InStr([Слово],'1')<> 0 , 
Слова.[ 2 ] = InStr([Слово],'2')<> 0 , Слова.[ 3 ] = InStr([Слово],'3')<> 0 , 
Слова.[ 4 ] = InStr([Слово],'4')<> 0 , Слова.[ 5 ] = InStr([Слово],'5')<> 0 , 
Слова.[ 6 ] = InStr([Слово],'6')<> 0 , Слова.[ 7 ] = InStr([Слово],'7')<> 0 , 
Слова.[ 8 ] = InStr([Слово],'8')<> 0 , Слова.[ 9 ] = InStr([Слово],'9')<> 0 ;

Сделал форму с тремя кнопками:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Option Compare Database
Option Explicit

Private Sub Заполнить_Click()
  Dim t As Long
  
  For t =  1  To  100000   '(сто тысяч) 
    CurrentDb.Execute "insert into Слова (слово) values(" & Abs(Int(Rnd *  1000000 )) & ")"
  Next
  MsgBox "Готово"
End Sub

Private Sub Разбить_Click()
  Dim i As Double
  
  i = Now
  CurrentDb.Execute "разбить"
  Debug.Print Now - i
  MsgBox "Готово"
End Sub

Private Sub Найти_Click()
  Dim s As String
  Dim rs As DAO.Recordset
  Dim i As Double
  
  s = "000000"
  i = Now
  Set rs = CurrentDb.OpenRecordset("select слово from слова where " & _
               "[0]=" & IIf(InStr(s, "0") <>  0 , "True", "False") & " And " & _
               "[1]=" & IIf(InStr(s, "1") <>  0 , "True", "False") & " And " & _
               "[2]=" & IIf(InStr(s, "2") <>  0 , "True", "False") & " And " & _
               "[3]=" & IIf(InStr(s, "3") <>  0 , "True", "False") & " And " & _
               "[4]=" & IIf(InStr(s, "4") <>  0 , "True", "False") & " And " & _
               "[5]=" & IIf(InStr(s, "5") <>  0 , "True", "False") & " And " & _
               "[6]=" & IIf(InStr(s, "6") <>  0 , "True", "False") & " And " & _
               "[7]=" & IIf(InStr(s, "7") <>  0 , "True", "False") & " And " & _
               "[8]=" & IIf(InStr(s, "8") <>  0 , "True", "False") & " And " & _
               "[9]=" & IIf(InStr(s, "9") <>  0 , "True", "False"))
  On Error Resume Next
  rs.MoveLast
  Debug.Print "word:'" & s & "', records:" & rs.RecordCount & ", time:" & (Now - i)
  MsgBox "Готово"
End Sub

Результат работы: создалось ок. 95 000 записей, создавалось минут 15 (celeron 633). Остальное вот:
Код: plaintext
1.
2.
3.
 0 : 00 : 37  
word:'001122', records: 49 , time: 0 : 00 : 00 
word:'000000', records: 0 , time: 0 : 00 : 00 
word:'123456', records: 70 , time: 0 : 00 : 00 
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690439
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гео, ты же вроде сейчас водку пьянствуешь сотоварищи :)
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690448
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не - я завтра водку пьянствую :))
...
Рейтинг: 0 / 0
Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
    #32690453
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоди-ой! :))
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Интересный вопрос (чтобы по набору букв выбирались все слова, получаемые из них)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]