Ключевое слово
03 | 10 | 2024
Новости Библиотеки
Шахматы Онлайн
Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Головоломка

Головоломка 28 Апр 2024 07:57 #1

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Найти шесть пятибуквенных существительных русского языка с неповторяющимися буквами.
"Е", "Ё" считается одной буквой.

wordly_test.jpg


Для разминки начнити с пяти слов.

Головоломка 28 Апр 2024 17:08 #2

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Мой вариант из 5 слов :)

wordly_test3.jpg
The following user(s) said Thank You: Vladimirovich

Головоломка 30 Апр 2024 05:02 #3

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
alexlaw wrote:
Найти шесть пятибуквенных существительных русского языка с неповторяющимися буквами.
Есть ли решение - неизвестно :?
Надо это вопрос отдать компу - пусть думает он %-)
Но ему нужно помочь :writing:
Вот база из 2943 пятибуквенных слова :glasses: (с неповторяющимися буквами)
Warning: Spoiler! [ Click to expand ]


Конечно здесь не только существительные (надо бы отсеять не существительные)

Остается скормить это все компу :beer: и пусть подумает

Головоломка 30 Апр 2024 06:10 #4

  • Andralex
  • Andralex's Avatar
  • OFFLINE
  • Боярин
  • на уровне 2 разряда
  • Posts: 2797
  • Thank you received: 75
  • Karma: 17
Найти шесть пятибуквенных существительных

√ Отсеивать придётся "вручную". Разве что CHATGPT в помощь.
√ Значит, будет шесть вложенных циклов, а это скармливание займёт времени "до утра".
√ Очевидно, что слова с одной гласной будут в приоритете.
:glasses:
...не мы первые, не мы последние...

Головоломка 30 Апр 2024 10:12 #5

  • Andralex
  • Andralex's Avatar
  • OFFLINE
  • Боярин
  • на уровне 2 разряда
  • Posts: 2797
  • Thank you received: 75
  • Karma: 17
Прикинем насчёт шести пятибуквенных существительных.
Чистая арифметика: 33-5*6=3. Что крайне маловероятно. :popcorn:
То есть, если комбинация такая и будет найдена, то в зазоре останутся три буквы.
Например, малоупотребительные Ъ Й Щ.

На написание алгоритма 6*5 ушло 15 минут. Но ждать окончания перебора надоело.

А пока несколько примеров пятибуквенных пятёрок.

АБРЕК ВОЗНЯ ЖМУДЬ ХЛЮСТ ЩИПЦЫ
АБРЕК ВЫЖИГ ДОНЬЯ ЗУМПФ ХЛЮСТ
АБРИС ВЗДОХ МУЛЯЖ ФЕТЮК ШПЫНЬ
АБРИС ВЗЛОМ ТЮФЯК УДЭГЕ ШПЫНЬ
АБРИС ВЪЕЗД ГЛУШЬ МОХНЫ ТЮФЯК
АБРИС ВЪЕЗД ГЛУШЬ ТЮФЯК ЭПОНЖ
АБРИС ВЪЕЗД МУЛЯЖ ТЮЧОК ШПЫНЬ
АБРИС ВЪЕЗД ТЮФЯК ХОЛУЙ ШПЫНЬ
АБРИС ВЫЕЗД ГЛУШЬ ТЮФЯК ЭПОНЖ
АБРИС ТЮФЯК УЗДЦЫ ХМЕЛЬ ЭПОНЖ
АБРИС ТЮФЯК УЗДЦЫ ШМЕЛЬ ЭПОНЖ
АБЦУГ ВЕДРО КНЯЗЬ ФИЖМЫ ХЛЮСТ
АБЦКГ ВЕДРО МЯЧИК ХЛЮСТ ШПЫНЬ
АБЦУГ ВЕДРО ХЛЮСТ ШПЫНЬ ЯМЩИК

(пока хватит)
...не мы первые, не мы последние...

Головоломка 01 Май 2024 15:36 #6

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Простым "сочетанием" 6 из 2943 эту задачу не решить.

Screenshot_20240501-182755.png


Комп будет считать целую вечность :unsure:
Нужен какой-то алгоритм.
Какой - не знаю :?

Головоломка 01 Май 2024 16:28 #7

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 108994
  • Thank you received: 2195
  • Karma: 108
В кэш надо что нито записать изначально
Для каждого слова создать списки только совместимых слов
Это О2, это недолго и должно сократить потом проход
Потом для каждого слова уже искать не из 2943, а только в этом списке для этого слова

Можно еще улучшить
Каждому - своё.

Головоломка 02 Май 2024 06:34 #8

  • Andralex
  • Andralex's Avatar
  • OFFLINE
  • Боярин
  • на уровне 2 разряда
  • Posts: 2797
  • Thank you received: 75
  • Karma: 17
  // пример для двух слов

  Stroka = "" ; Bukva = "";   FlagPovtor=false ;
 // сумматор    для символа    флаг повторов

   for (x1=1; x1<=kovlo_records("Table"); x1++)
   { for (x2=(x1+1); x2<=kovlo_records("Table"); x2++)
     {
       GoToRecord x1 ;
       Stroka = [ Spisok ];  // запоминаем первое словов из колонки таблицы
       GotoRecord x2 ; 
       FlagPovtor=false;
        for (z=1; z<=5; z++) // крощим на буквы второе слово
            {
          
          Bukva= SubString([ Spisok ], z, 1);
          if (SearchString(Stroka,Bukva)) >0  
            // ищем совпадения каждой из букв второго слова в пером слове
          {  // если буквы повторяются, то выполняется следующая итерация x2 
             Flagpovtor=true; Break; // выходим из цикла
          }
            }   // for z 
          if (FlagPovtor==false) // здесь два слова без повторов букв
           Stroka += [ Spisok ];  // Складываем в строку и переходим к третьему слову
                                  // и т.д. по аналогии до шестого слова 
     }  // for x2
   } // for x1
...не мы первые, не мы последние...

Головоломка 02 Май 2024 07:12 #9

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Я собираюсь тоже попробовать набросать код :writing:
У меня идея такая:
  • 32 буквы (Е Ё) одна буква - это 32 бита А первый включенный бит, Я последний (тридцать первй).
  • Значит решением будет число с 30 включенными битами.
  • Перекодируем словарь в числа.
  • Разделяем на списки (по начальной букве)
  • Берем случайным образом шесть (чисел) слов из разных списков
  • Делаем XOR c шестью числами
  • Считаем кол-во бит
  • Если 30 бит, то стоп.

Головоломка 03 Май 2024 04:14 #10

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
alexlaw wrote:
Делаем XOR c шестью числами
Эта мысль не верна.
  1. 1 xor 1 xor 1 xor 1 xor 1 xor 1 = 0
  2. 1 xor 1 xor 1 xor 1 xor 1 xor 0 = 1
  3. 1 xor 1 xor 1 xor 1 xor 0 xor 0 = 0
  4. 1 xor 1 xor 1 xor 0 xor 0 xor 0 = 1
  5. 1 xor 1 xor 0 xor 0 xor 0 xor 0 = 0
  6. 1 xor 0 xor 0 xor 0 xor 0 xor 0 = 1
Если более 1 единицы, то нам нужен 0

Ну да ладно, пока немного кода
//для записи инфы в файл -  test.txt
procedure WriteToFile(s:string;flag:Integer);
var
F: TextFile;
begin
  try
          AssignFile(F, ExtractFilePath(Application.ExeName)+'test.txt');{Ассоциируем переменную с файлом}
       case flag of
           0:Rewrite(F); {файла нет или он должен быть перезаписан, открытие для записи}
           1:Append(F);
       end;
          Write(F,s);
  finally
    CloseFile(F);
  end;
end;
//перекодируем слова в числовой код
procedure TWordle_6.FormCreate(Sender: TObject);
 var
str_wordle,str:string;
i,j,z:integer;
U32:cardinal;
begin
//файла test.txt нет или он должен быть перезаписан
WriteToFile('',0);
//имя файла со словарем
str_wordle:='2941_Words.txt';
 try
//текущая директория приложения
FName:=ExtractFilePath(Application.ExeName);
//если словарь существует
 if FileExists(FName+str_wordle) then begin
   //загружаем словарь из файла в ListBox1
   ListBox1.Items.LoadFromFile(FName+str_wordle);
   //копируем словарь в ListBox2
   ListBox2.Items:=ListBox1.Items;
   //перебераем слова в словаре - ListBox1.Items[i]
   for i := 0 to ListBox1.Count - 1 do begin
     //переменная для числового кода слова
     U32:=0;
     //парсим слово по буквам
     for j := 0 to 4 do begin
         //следующая буква слова
         str:=copy(ListBox1.Items[i],j+1,1);
         //позиция буквы в слове равна позиции бита в коде слова
         for z := 1 to 32 do  begin
              if (str=AlfaBet[z]) then begin
                  //получаем код слова
                  U32:=U32 or (1 shl (z-1));
              end;
         end;
     end;
     //заменяем слово в ListBox2 на его код
     ListBox2.Items[i]:=Format('%u', [U32]);
     //если в коде слова 5 бит то пишем в файл
     //делаем один раз, затем закомментируем эту строку
     if UsePopcnt(StrToInt64(ListBox2.Items[i]))=5 then WriteToFile(ListBox2.Items[i]+#13#10,1);
   end;
   //начальные позиции словаря и его кода в ListBox
   ListBox1.ItemIndex:=0;
   ListBox2.ItemIndex:=0;
 end else begin
 //словарь не найден
 ShowMessage('файл '+str_wordle+' не найден');
 end;
  finally

  end;
end;
//функция подсчета бит
function UsePopcnt(value: Cardinal): Cardinal;
asm
  DB $F3, $0F, $B8, $C0 // popcnt eax, eax
end;
  AlfaBet: array [1..34]  of  string =('Й','Ц','У','К','Е','Н','Г','Ш','Щ','З','Х','Ъ',
  'Ф','Ы','В','А','П','Р','О','Л','Д','Ж','Э',
  'Я','Ч','С','М','И','Т','Ь','Б','Ю',
  '33','34');
Буквы расположены, как на клавиатуре.
Порядок бит Й - первый бит, Ю - последний.
Это не принципиально

Перекодируемый словарь (в каждом числе установлено ровно 5 бит)
Warning: Spoiler! [ Click to expand ]
Last Edit: 03 Май 2024 04:16 by alexlaw.

Головоломка 04 Май 2024 07:49 #11

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Взял словарь - Более 67 тысяч русских существительных в именительном падеже
Чуть подправил свой код из предыдущего поста.
Получил словарь из 2923 слов с не повторяющимися буквами в слове
Warning: Spoiler! [ Click to expand ]


По идеи должны быть только существительные.

Вопрос чисто математический (или логический).
Отобрать из списка чисел (в каждом числе из списка включено ровно 5 бит) шесть чисел с несовпадающими позициями включенных бит.
Т.е. A or B or C or D or E or F = G (в G будут включены 30 бит)
Warning: Spoiler! [ Click to expand ]

Головоломка 05 Май 2024 12:17 #12

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
До меня дошло :idea:
Нужно применить к шести числам логическую операцию "или".
Если в результате получиться число с 30 включенными битами, то этот набор из 6 чисел - решение.
Если меньше 30 бит, то в наборе есть повторы, и не важно конкретные числа. Меняем полностью все шесть чисел на новые.
Поправьте, :glasses: если Я не прав.

Головоломка 10 Май 2024 04:51 #13

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Ну что ж :)
Решения из 6 слов найти не удалось.
Но четкого математического ответа, что это не возможно, то-же нет.
Набросал прогу по алгоритму указанному выше.

wordly5x5.jpg


Недостаток основной - это случайные выбор слов :unsure:

Поэтому исправлю на сочетания
Вот немного об этом - алгоритм
Last Edit: 10 Май 2024 04:52 by alexlaw.
The following user(s) said Thank You: Andralex

Головоломка 19 Май 2024 06:18 #14

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Решения для 6 слов нет на 99%.
_2024_05_19_09_05_59_990.gif

Головоломка 19 Май 2024 06:49 #15

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 108994
  • Thank you received: 2195
  • Karma: 108
alexlaw wrote:
Решения для 6 слов нет на 99%.
Это уже не головоломка :)
Каждому - своё.

Головоломка 19 Май 2024 07:04 #16

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
Vladimirovich wrote:
Это уже не головоломка :)
Хорошо, пусть будет просто задача века, типа квадратуры круга :glasses:

Головоломка 07 Июнь 2024 20:41 #17

  • alexlaw
  • alexlaw's Avatar
  • OFFLINE
  • Дьяк
  • Posts: 199
  • Thank you received: 10
  • Karma: 1
alexlaw wrote:
Vladimirovich wrote:
Это уже не головоломка :)
Хорошо, пусть будет просто задача века, типа квадратуры круга :glasses:

:writing: Решил!!!
Есть решение и я его нашел :)

Головоломка 08 Июнь 2024 01:52 #18

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 108994
  • Thank you received: 2195
  • Karma: 108
:glasses:
Каждому - своё.
  • Page:
  • 1
Moderators: Grigoriy
Рейтинг@Mail.ru

Научно-шахматный клуб КвантоФорум