Ідея тут полягає у створенні майже повторюваного шаблону. Тобто, послідовність, що будується, змінюється в останній момент, щоб уникнути повторення деякої послідовності. Необхідно уникати наслідків типу AA та ABA (де B не більше A).
Приклади:
Я продовжу з початку, перерахувавши всі невеликі приклади, щоб зробити свій опис яснішим. Почнемо з 0.
Дійсно: 0 Недійсний: 00 (візерунок AA) Дійсно: 01 Недійсний: 010 (візерунок ABA) Недійсний: 011 (шаблон АА) Дійсно: 012 Дійсна: 0120 Недійсний: 0121 (шаблон ABA) Недійсний: 0122 (візерунок AA) Недійсний: 01200 (візерунок AA) Недійсний: 01201 (візерунок ABA; 01-2-01) Недійсний: 01202 (візерунок ABA) Дійсна: 01203
Тепер я твердо вірю, що 4
ніколи не потрібно, хоча я не маю доказів, тому що я легко знайшов послідовності сотень символів довгими, які використовують лише 0123
. (Це, мабуть, тісно пов’язано з тим, як потрібні лише три символи, щоб мати нескінченні рядки, що не мають жодного шаблону AA. На цьому є сторінка Вікіпедії .)
Введення-виведення
Введення - це єдине, додатне, ненульове ціле число n
. Ви можете припустити, що n <= 1000
.
Вихід - n
послідовність -характер без підзакон, що відповідають забороненому шаблону (AA або ABA).
Зразкові входи та виходи
>>> 1 0 >>> 2 01 >>> 3 012 >>> 4 0120 >>> 5 01203 >>> 50 01203102130123103201302103120132102301203102132012
Правила
- Допускаються лише символи
0123
. - Чи не Б не довше ніж , ніж А. Це дозволяє уникнути ситуації , при якій
012345
повинен бути слідують ,6
тому що0123451
є це:1-2345-1
. Іншими словами, послідовність була б тривіальною і нецікавою. n
може бути введено будь-яким потрібним методом, крім жорсткого кодування.- Вихід може бути списком або рядком, залежно від того, що простіше.
- Без грубої сили ; час роботи повинен бути на порядку хвилин, не більше години на дійсно повільній машині, протягом
n=1000
. (Це покликане дискваліфікувати рішення, які просто проходять цикл черезn
вселінійні перестановки{0,1,2,3}
, так що трюк та подібні трюки заборонені.) - Стандартні лазівки заборонено, як зазвичай.
- Оцінка балів у байтах. Це єкод-гольф, тому виграє найкоротший запис (можливо - див. бонус).
- Бонус: виберіть найнижчу дозволену цифру на кожному кроці. Якщо
1
і3
можливі варіанти для наступної цифри в послідовності, виберіть1
. Відніміть 5 байт від вашої оцінки. Однак візьміть на замітку нижче.
Примітка!
Можливі тупики. Ваша програма чи функція повинні уникати цього. Ось приклад:
Пень: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201231021301203102303302303302303302303302303303302303 Пень: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201231021301203103302303303303302303303302303303302303 Пень: 01203102130123103201302103120132102301203102132012302103120130231032012302132031023012032102312013021031230132031021301203210230132031230210320123102130120310330230330330230330230330230330230 Пень: 01203102130123103201302103120132102301203102132012302103120130231032012302132031023012032102312013021031230132031021301203210230132031230210320123102130120310330230330230330230330230330230330230330230330230
Кожну з цих послідовностей не можна більше продовжувати (без використання a 4
). Але також зауважте, що між першими та другими двома є вирішальна різниця. Я заміню спільну початкову підданість на, X
щоб зробити це більш зрозумілим.
Пень: X2130120 Пень: X2130123 Пень: X320 Пень: X321301203102130
Останні дві цифри X
є 10
, тому єдиним можливим вибором для наступної цифри є 2
і 3
. Вибір 2
призводить до ситуації, коли послідовність повинна припинятися. Тут не спрацює жадібний алгоритм . (Все одно не без зворотних трекінгу.)
n
, але враховуючи, що пні, які моя програма знаходить, як правило, збільшуються в середньому на 10 цифр щоразу, я дуже впевнений, що існує нескінченна послідовність. Я не впевнений, як напівжадний алгоритм можна перевірити на довільно великі послідовності. Я можу обмежити вимогу до n
= 1000 і просто не турбуватися про вище n
.
AA
це справді тип, ABA
де B
порожньо. Це, можливо, може допомогти впорядкувати деякі рішення.
n
? Якщо хтось дає евристичний напівжадливий алгоритм, як ви переконаєтесь, що він не стикається з проблемами дуже великої довжини? Загальна проблема є цікавою, і мені не вдалося знайти нічого щодо уникнення шаблону, де ми обмежуємо довжину частини шаблону. Якщо хтось може підготувати загальний рецепт, я очікую, що це найкращий підхід.