Поміркуйте, як слово могло бути впорядковане на довільно великій сітці Boggle, якщо правило про використання одного і того ж кубика літер не один раз ігнорується . Також припустимо, що у вас є необмежена кількість кубиків букв (з усіма літерами), і Qu
це просто Q
.
Слово MISSISSIPPI
можна було впорядкувати, використовуючи лише 6 кубів. Ось одна з можливих домовленостей:
S
MIS
PP
Починаючи з M
ми, ми неодноразово робимо будь-який крок по горизонталі, вертикалі чи по діагоналі, поки все слово не прописано.
Дивно, але на більш довгу фразу, як AMANAPLANACANALPANAMA
і, потрібно лише 6 кубів:
MAN
PLC
Однак мінімальна кількість кубів, необхідних для довших, складніших рядків, не завжди очевидна.
Виклик
Напишіть програму, яка займає рядок, і упорядкуйте її таким чином, як Боггл , щоб використовувати мінімальну кількість кубів . (Розміри отриманої сітки та кількість порожніх комірок не мають значення.)
Припустимо, у вас є необмежена кількість кубів для кожного символу ASCII для друку, за винятком простору (шістнадцяткові коди від 21 до 7E), оскільки він використовується як порожня комірка сітки. Будуть введені лише рядки ASCII для друку (без пробілів).
Введення слід брати з stdin або командного рядка. Вихід повинен перейти до stdout (або найближчої альтернативи).
Провідні або остаточні рядки та пробіли у висновку є нормальними (але, сподіваємось, їх немає непомірною кількістю).
Простір пошуку вибухає експоненціально, коли рядок стає довше, але вам не потрібно намагатися зробити свій алгоритм ефективним (хоча це було б непогано :)). Це код-гольф, тому найкоротше рішення в байтах виграє.
Приклад
Якби введення було Oklahoma!
(мінімум 8 символів), усі вони були б дійсними виводами, оскільки всі мають точно 8 заповнених комірок сітки і вони відповідають (переглянутому) шаблону читання Boggle:
Oklaho
!m
або
!
Oamo
klh
або
lkO
!amo
h
тощо.