Biorąc pod uwagę wyrażenie pasujące do wyrażenia regularnego /^[-~]*x$/
, oceń je pod względem x
i wypisz ciąg pasujący do wyrażenia regularnego /^-?x[+-]\d+$/
.
Na przykład ciąg -~x
ocenia na x+1
, podczas gdy ciąg -~-x
ocenia na -x+1
, a ciąg -~-~--x
ocenia na x+2
.
Zaczynamy od x
i oceniamy ciąg znaków od prawej do lewej. -
neguje termin, a ~
konwertuje y
na -y-1
.
Przypadki testowe:
x x+0
~x -x-1
-~x x+1
~-~x -x-2
-~-~x x+2
--~~x x+0
~-x x-1
-~-x -x+1
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa.
Format wejścia / wyjścia jest ścisły. Jest "x"
to obowiązkowe.
x+010
zamiastx+10
za-~-~-~-~-~-~-~-~-~-~x
? Pasuje do drugiego wyrażenia regularnego.~
tym, jak nie zostało zdefiniowaneOdpowiedzi:
Python 2 ,
424139 bajtówWypróbuj online!
źródło
Retina ,
4744 bajtówWypróbuj online! Edycja: Zapisano 3 bajty dzięki @MartinEnder. Wyjaśnienie:
Usuń pary sąsiadujących duplikatów.
Policz liczbę
~
s, która daje nam wielkość tego terminu.Jeśli pierwszym znakiem jest a,
~
to termin powinien być ujemny.Jeżeli liczba
~
s i-
s jest nieparzysta, tox
powinna być ujemna.źródło
JavaScript, 59 bajtów
Wypróbuj online!
źródło
-
działa w przypadku przypadków testowych zawierających wiele z rzędu. (tj.--~-~x
)Perl 5 , 75 + 1 (-n) = 76 bajtów
Wypróbuj online!
źródło
C (gcc) , 69 bajtów
Wypróbuj online!
-1 bajt dzięki @ThePirateBay
źródło
Java 8, 186 bajtów
Zdecydowanie miejsce na ulepszenia ..
Wyjaśnienie:
Wypróbuj tutaj.
źródło