Ключи и замки V

Подмножества и перестановки

Описание задачи

Самая сложная версия. Из шаблона keyTpl можно удалять любые зубчики и менять местами оставшиеся. Ключ — любая перестановка любого подмножества букв.

Правило генерации

Правило совпадения с замком

Если ключ короче замка, он всё равно может подойти, если "хвост" замка состоит только из -.

Lock: "A-C--"
Key: "AC"

Сравнение:
  Key[0]='A' vs Lock[0]='A' ✓
  Key[1]='C' vs Lock[1]='-' ✓
  Lock[2]='C' — ключ короче, проверяем хвост
  Lock[3]='-', Lock[4]='-' — всё OK ✓

Результат: ключ "AC" открывает замок "A-C--"

Lock: "A-C-X"
Key: "AC"
Хвост: "-X" содержит не только '-' → не открывает

Пример

Условие
keyTpl: "ACCX"
locks: ["AC--", "X---", "A-C-"]
minLocks: 2
Возможные ключи
Подмножества и их перестановки:
"" (пустой), "A", "C", "X", "AC", "CA", "AX", "XA", 
"CX", "XC", "CC", "ACC", "CAC", "CCA", "ACX", "AXC",
"CAX", "CXA", "XAC", "XCA", "CCX", "CXC", "XCC", "ACCX", ...
Результат (примерный)
countKeys → N
findKeys → [ключи, открывающие ≥2 замков]

Ключевые моменты

← Ключи и замки III К списку →