В APL вы можете писать неявные функции, называемые поездами . Как они работают, не имеет значения для этой проблемы. Вот различные способы их группировки, используя ⍴
в качестве функции:
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴⍴))
...
Порядок остается прежним. Процедура заключается в том, что до тех пор, пока существует строго более 3 функций, последние 3 функции сгруппированы в одну функцию. Если мы встречаем вложенный поезд, мы сначала ставим его в скобки, прежде чем продолжить. Вот процедура, применяемая к ⍴⍴⍴⍴⍴⍴
:
Step 0: ⍴⍴⍴⍴⍴⍴
There are strictly more than 3 functions, repeat.
Step 1: ⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
Step 2: ⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
Вот та же самая процедура, примененная к ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
:
Step 0: ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴
There are 3 or less functions, we're done.
Step 1: ⍴⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
Step 1: ⍴⍴⍴(⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴
There are 3 or less functions, we're done.
Step 2: ⍴⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴))
There are strictly more than 3 functions, repeat.
Step 3: ⍴(⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)))
There are 3 functions or less, we're done.
вход
Для этой задачи ввод будет упрощен. Это означает, что вы можете выбрать 2 разных символа для открывающих и закрывающих скобок и 1 символ для функций, отличных от выбранных для скобок. Символы, которые вы выбираете, должны быть последовательными. Входные данные не будут пустыми и не будут содержать скобок без содержимого (то есть ()
).
Выход
Опять же, вы можете выбрать 3 разных символа, 2 для скобок и 1 для функций. Обратите внимание, что они не должны совпадать с выбранными для ввода, но они должны быть согласованными.
правила
- Если есть скобки, которые заключают в себя только одну функцию во входных данных, вы должны удалить их в выходных данных. Ваш вывод может не содержать ненужных скобок (т.е. содержать только одну функцию или весь вывод).
- Вам не нужно реализовывать алгоритм, используемый здесь, если ваше решение действительно для этой задачи.
- Вход и выход - это строки в формате, описанном в разделах «Вход и выход». На входе будет хотя бы один символ.
- Использование стандартных лазеек строго запрещено.
- Это код-гольф , поэтому выигрывает самый короткий ответ. Однако, не будет принятого ответа, так как это соревнование для каждого языка, и поощрять ответы на языках, на которых эта задача приведет к более длинному коду по сравнению с кодом, написанным на других языках.
Контрольные примеры
Символы, используемые здесь ()⍴
, вы должны заменить их на выбранные вами символы.
⍴ -> ⍴
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴⍴))))))
⍴⍴⍴⍴⍴(⍴⍴⍴)⍴⍴(⍴(⍴⍴⍴)⍴⍴⍴)⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴((⍴⍴⍴)⍴(⍴(⍴(⍴⍴⍴)(⍴⍴⍴))(⍴⍴⍴)))))
(⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴) -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
(⍴⍴⍴)(⍴⍴⍴)⍴⍴⍴ -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
⍴⍴(⍴)⍴⍴ -> ⍴⍴(⍴⍴⍴)
((⍴⍴)) -> ⍴⍴
⍴⍴((⍴⍴))⍴⍴ -> ⍴⍴((⍴⍴)⍴⍴)
Этот вызов был размещен в Песочнице. Если у вас есть необходимые привилегии, вы можете просмотреть пост песочницы здесь .