Пришла мысль, что подобного класса задачки можно решать и в декларативном стиле - с помощью pattern matching. Наподобие как regexp для строк:
a = [1, 2, 3, 4]
result =
case a
in [*, x1, 2, x2, *]
[x1, 2, x2]
in [2, x2, *]
[2, x2]
in [x1, 2, *]
[x1, 2]
in [2]
[2]
else
nil
end
p result
Код запускал на
repl-е с поддержкой pattern matching.
Что думаете?
Можно как-то упростить?
Сложность в том, что количество случаев, которые нужно прописывать сильно растёт, если допускается больше чем один "граничный" элемент вокруг "корневого".