Абстрактная проблема переписывания (Грабители)

9

Это несколько -подобно вызов. Это нить грабителей; нить полицейских здесь .

Грабители

Полицейские будут публиковать абстрактные системы переписывания. Ваша задача - взломать их представления, доказав, что целевая строка может или не может быть достигнута из исходной строки, применяя их правила перезаписи. (Это можно сделать, опубликовав последовательность правил перезаписи, которая начинается с исходной строки и заканчивается целью, или математически доказав, что она существует или не существует.)

Смотрите ветки полицейских для деталей и определений.

Натаниель
источник
Do'h! Я поставил награду за неправильный вопрос, это должно было быть задачей полицейских. Так что кто-то получит случайную награду.
Натаниэль
Не беспокойтесь, я вернул награду.
Джеймс
@DJMcMayhem: Хм ... так вот почему SE API перечисляет этот вопрос как отмеченный, но без суммы вознаграждения или даты закрытия. : o Хорошо, пора добавить проверку входных данных в мой пользовательский скрипт.
Илмари Каронен

Ответы:

16

jimmy23013

Давайте работать в обратном направлении для этого. Сначала мы превращаем цифры в их двоичные представления. Мы идем от VW626206555675126212043640270477001760465526277571600601к VW++__+_++__+____++_+_++_++_+++_++++_+__+_+_++__+___+_+____+___++++_+______+_+++___+__++++++________++++++____+__++_+_++_+_+_++__+_+++++++_++++__+++_______++______+. Затем мы продолжаем применять обратное к DCW:W+и DW:W_до тех пор, пока не очистим все символы. Наш результат сейчас VDCDCDDDCDDCDCDDDCDDDDDCDCDDCDDCDCDDCDCDDCDCDCDDCDCDCDCDDCDDDCDDCDDCDCDDDCDDDDCDDCDDDDDCDDDDCDCDCDCDDCDDDDDDDCDDCDCDCDDDDCDDDCDCDCDCDCDCDDDDDDDDDCDCDCDCDCDCDDDDDCDDDCDCDDCDDCDCDDCDDCDDCDCDDDCDDCDCDCDCDCDCDCDDCDCDCDCDDDCDCDCDDDDDDDDCDCDDDDDDDCW. Теперь мы хотим, чтобы эта строка соответствовала VD+C+W; то есть мы хотим переместить все Dбуквы слева от всех Cстрок. Это может быть сделано путем реверса DCC:CD. Мы делаем это, повторяя следующий алгоритм:

  1. Найдите первое Dсправа от блока Cs.
  2. Переместите Dналево от этого блока.
  3. Удвойте число Cс.

Посредством некоторой математики мы можем определить, что в конечном итоге мы получим 123 Dс и 4638704741628490670592103344196019722536654143873 Cс (вы были правы насчет того, что это не подходит для ответа SE ... Я сомневаюсь, что это будет соответствовать, если хранится как состояния всех атомов на Земле в сочетании: P).

Если мы будем продолжать применять обратное V:VD, мы можем избавиться от всех Ds сейчас, так что мы получаем VCCC.......CCCW. Мы конвертируем Vобратно в YZ. Теперь у нас есть YZCCC.......CCCW.

Мы хотим иметь возможность избавиться от всех Cс и иметь его в форме YAAA...AAABBB...BBBZW. К счастью, это можно сделать следующим способом. Во-первых, мы YB:Yобращаемся 585812508217580921743211 раз, чтобы получить YBBB.......BBBZCCC.......CCCW. Затем мы повторяем следующую последовательность шагов (где [?*]означает любое количество ?, не обязательно больше нуля):

  1. CZ:ZCОбратно -применить 587912508217580921743211 раз, чтобы получитьY[A*]BBB.......BBBCCC.......CCCZCCC.......CCCW
  2. Обратный - применить CB:BCмного раз, чтобы получитьY[A*]BCBCBC.......BCBCBCZCCC.......CCCW
  3. Обратно-применить AZ:Zи AB:BCAмного раз, чтобы получитьY[A*]ABBB.......BBBZCCC.......CCCW

Посредством индукции мы видим, что мы можем переместить BZкомбинацию до конца (кроме как до W), и тогда число As равно 1/587912508217580921743211 от числа Cs, оставляя нам 7890127658096618386747843 Aс. Теперь у нас есть YAAA.......AAABBB.......BBBZW. Преобразование ZWобратно в a U, затем обратное применение U:BUмного раз, чтобы оставить только 2 Bс, а затем преобразование в BBUa T, и теперь у вас есть YAAA.......AAAT. Затем вы можете применить обратное обращение T:AAAAATмного раз, чтобы получить, YAAATпотому что число As было 3 больше, чем кратное 5.

Спасибо за вызов!

HyperNeutrino
источник
Указано ли где-нибудь или по умолчанию разрешено обратное применение?
Вейцзюнь Чжоу
2
@WeijunZhou Я имею в виду, если применение A:Bк ABCдает BBC, очевидно , что применение обратной A:Bк BBCможет дать ABC. Специально не указано, что это разрешено, но я могу легко просто поменять свои шаги и найти «обычное» решение, просто проще вернуться назад в IMO.
HyperNeutrino
Я имею в виду, например, если есть только одно правило A:Bи не указано, что обратное применение разрешено, тогда я не думаю, что вы можете перейти BBCк ABC. Этот конкретный случай может отличаться, и есть какой-то путь в другом направлении. Я проверю это позже.
Вейцзюнь Чжоу
2
@HyperNeutrino ^^
Чжоу
1
Какую программу вы использовали для факторизации и сколько времени это заняло?
user202729
9

boboquack

Для данной строки возьмите все буквы (a = 0, b = 1, c = 2), сложите их и возьмите по модулю 3. Тогда ни одно из правил перезаписи не изменит это значение. Исходная строка имеет значение 1, а цель имеет значение 2. Поэтому никакая комбинация правил не преобразует исходную строку в целевую строку.

bb94
источник
9

feersum

Это загадка Сокобана. Начальная позиция:

          ___#
#___####_____#
#_#_#_##_#_!##
##______##_###
##__####_#_###
###__###__

Конечная позиция:

          ___#
#___####_____#
#_#_#_##_#_###
##____!__#_###
##__####_#_###
###__###__

Это можно решить, используя следующую последовательность клавиш:

←← → ↓↓ ← ↑ ←←←←←← ↓↓ → ↑ ← ↑↑↑ ←← ↓ → ↑ → ↓↓ →→→→→→ ↓ → ↑↑ ↓↓ ← ↓ ← ↑ → ↑ ←←← ← ↑ ←← ↓ →→→→→ ↓ →→ ↑↑ → ↑↑ ← ↓ ←← ↓↓ → ↑ ← ↑ →→ ↑ →→ ↓ ← ↓ ←← ↓↓ → ↑ ←←←←←←← ↑ ↑ ←← ↓ →→ ↓ → ↓↓ ← ↑ ← ↑ → ↑↑ ←← ↓ → ↑ → ↓↓ ← ↓ → ↑ →→→→→→ ↓↓ ← ↑ → ↑ ←←←←←← →→→ →→→ ↑↑ ← ↓ → ↓ ← ↑↑ →→ ↑ →→ ↓ ← ↓ ← → ↑↑ ← ↓ ← ↓ ↑ →→ ↓ ← ↑ ←← ↓↓↓ →→ ↑↑ ↓↓ ←← ↑↑ → ↓ ↑↑ → ↑ →→ ↓ ← ↓ ← ↓ ←← ↑↑ →→ ↑ → ↓ ← ↓↓ ←←←←← ↑ ←← ↓ →→→→→ ←←←←← ↑↑ ←← ↓ →→ ↓↓ ← ↑ →→→→

Вот программа bash, которая преобразует последовательность клавиш в команды sed и применяет их. Команды sed содержат только команды замены, использующие правила перезаписи, определенные в ответе полицейского, и команды маркировки и разветвления, которые не изменяют строку. Это подтверждает, что вы можете получить целевую строку, используя только правила перезаписи.

s="___##___####_____##_#_#_##_#_!####______##_#####__####_#_######__###__"
input=

while
    printf '\n%80s\n' "$s"|fold -w14
    read -n 1
    [ "$REPLY" = $'\e' ]
do
    read -n 2
    case "$REPLY" in
    [A)
        s="$(sed '
s:!:wLW_:
        :a
s:L:<<<<<<<<<<<<<:
s:#w<:w#:
s:_w<:w_:
s:_<:<_:
s:#<:<#:
s:#wW:wLX!:
s:_W:W_:
s:#W:W#:
s:_wW:!:
s:_X:X_:
s:#X:X#:
s:_wX:#:
        ta' <<<"$s")";;
    [B)
        s="$(sed '
s:!:_VRv:
        :a
s:R:>>>>>>>>>>>>>:
s:>v#:#v:
s:>v_:_v:
s:>_:_>:
s:>#:#>:
s:Vv#:!URv:
s:U_:_U:
s:U#:#U:
s:Uv_:#:
s:V_:_V:
s:V#:#V:
s:Vv_:!:
        ta' <<<"$s")";;
    [C)
        s="$(sed '
s:!#_:_!#:
        te
s:!_:_!:
        :e' <<<"$s")";;
    [D)
        s="$(sed '
s:_#!:#!_:
        te
s:_!:!_:
        :e' <<<"$s")";;
    esac
    input="$input${REPLY:1}"
done

echo "$input"

Попробуйте онлайн!

Попробуйте онлайн (с удаленным кодом выхода)!

Для вверх и вниз, !:wLW_или !:_VRvприменяется один раз соответственно, и соответствующие правила применяются неоднократно, пока не !появится снова. За право, один из !#_:_!#и !_:_!применяется. Для левого, один из _#!:#!_и _!:!_применяется.

Смотрите вывод в ссылках для позиции после каждого хода.

jimmy23013
источник
6

XNOR

Правило 1 x:xn Правило 2 no:oon Правило 3 nr:r Правило 4ooooooooooo:

Мы используем, [X,Y]чтобы указать пробег Y Xs

Начиная с xn[o,A]r,

  1. Применяя правило 2, как только мы это сделаем x[o,2]n[o,A-1]r.
  2. Применяя правило 2 еще раз, мы имеем x[o,4]n[o,A-2]r
  3. Применяя до тех пор, пока oмежду nи не rстанет 0, мы имеем x[o,2*A]nr.
  4. Применяя правило 3, как только мы это сделаем x[o,2*A]r.
  5. Применяя правило 1, как только мы это сделаем xn[o,2*A]r.

Итак, у нас есть алгоритм для генерации из xn[o,A]rв xn[o,2*A]r.

Начиная с xnor = xn[o,1]rповторения 10 раз алгоритма - за исключением 10-го цикла мы останавливаемся на шаге 4, имея x[o,1024]r.

Применяя правило 4, это очищает 1023 = 11 * 93 oс, оставляя xor.

Сиеру Асакото
источник
2

VortexYT

Нет способа убрать Fs без создания / использования других символов; Таким образом, мы должны использовать I:Fв качестве последнего шага, чтобы добраться до цели. Ни одно правило не дает сингл Iбез других нежелательных символов, поэтому вы не можете добраться до целевой строки.

Эквивалентно, если вы попытаетесь отобразить в обратном направлении от источника, вы можете получить только от Fдо, Iкогда у вас больше нет вариантов.

HyperNeutrino
источник
Ох, это больно. Хотя есть и другое решение ...
VortexYT
@VortexYT о, правда, есть? хм, не знал. но да, цель не может нанести на карту более одного шага, что, вероятно, сделало это на тонну легче, чем вы предполагали: P
HyperNeutrino
В 2 раза проще быть точным
VortexYT