Учитывая выражение, соответствующее регулярному выражению /^[-~]*x$/
, оцените его с точки зрения x
и выведите строку, соответствующую регулярному выражению /^-?x[+-]\d+$/
.
Например, строка -~x
оценивается как x+1
, а строка -~-x
- как -x+1
, а строка -~-~--x
- как x+2
.
Мы начинаем с x
и оцениваем строку справа налево. -
отрицает термин, в то время как ~
преобразует y
в -y-1
.
Testcases:
x x+0
~x -x-1
-~x x+1
~-~x -x-2
-~-~x x+2
--~~x x+0
~-x x-1
-~-x -x+1
Это код-гольф . Кратчайший ответ в байтах побеждает.
Формат ввода / вывода строгий. Это "x"
обязательно.
x+010
вместоx+10
для-~-~-~-~-~-~-~-~-~-~x
? Это соответствует второму регулярному выражению.~
пока оно не определеноОтветы:
Python 2 ,
424139 байтПопробуйте онлайн!
источник
Сетчатка ,
4744 байтаПопробуйте онлайн! Редактировать: 3 байта сохранены благодаря @MartinEnder. Expanation:
Удалить пары соседних дубликатов.
Подсчитать количество
~
s, которое дает нам величину термина.Если первый символ
~
тогда, термин должен быть отрицательным.Если число
~
s и-
s нечетно, тоx
должно быть отрицательным.источник
JavaScript, 59 байт
Попробуйте онлайн!
источник
-
строк подряд. (то есть--~-~x
)Perl 5 , 75 + 1 (-n) = 76 байт
Попробуйте онлайн!
источник
C (gcc) , 69 байтов
Попробуйте онлайн!
-1 байт благодаря @ThePirateBay
источник
Java 8, 186 байт
Определенно место для улучшений ..
Объяснение:
Попробуй это здесь.
источник