Jeśli kiedykolwiek próbowałeś pisać kod palindromiczny, będziesz wiedział, ile nawiasów przeszkadza. ()()
nie jest palindrom, choć to trochę wygląda jak powinno być, podczas gdy ())(
i ()(
to zarówno palindromiczna i oba bardzo głupi patrząc. Czy nie byłoby wygodnie, gdyby było na odwrót?
Łańcuch jest dogodnie palindromiczny, jeśli jest równy łańcuchowi pochodnemu, gdy jego odwrotność ma obrócone wszystkie nawiasy ( ()
), nawiasy ( []
) i nawiasy klamrowe ( {}
). Żadne inne postacie nie są wyjątkowe i wymagają przewracania. ( <>
czasami są sparowane, ale często nie, więc są pomijane).
Twoim zadaniem jest napisanie w Twoim języku programu (przyjmującego dane wejściowe na STDIN) lub funkcji (przyjmującego pojedynczy argument łańcuchowy), który (a) daje spójną prawdziwą wartość *, gdy jej argument jest dogodnie palindromiczny i inny, spójny fałszywy wartość inaczej, i (b) to samo dogodnie palindromową.
Na przykład następujące dane wejściowe są dogodnie palindromiczne:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
A następujące nie są:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Nie możesz polegać na żadnym stanie zewnętrznym (konkretna nazwa pliku, struktura katalogów, inne dane wejściowe użytkownika, dostęp do Internetu itp.), Z wyjątkiem flag interpretera / kompilatora.
Nie możesz również używać „sztuczki komentowania”, gdy komentujesz lub renderujesz nieużywany fragment kodu, korzystając z możliwości komentowania w swoim języku. Na przykład wszystkie poniższe elementy są niedozwolone, ponieważ zawierają niefunkcjonalne części, które można bezpiecznie usunąć lub zniszczyć (kosztem utraty dogodnej palindromii):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Oczywiście może to nie dotyczyć każdego takiego przypadku, ale duchem wyzwania nie jest tutaj stosowanie komentarzy i nieparsowanego ** kodu w celu osiągnięcia palindromii, zamiast korzystania z poprawionych części i nawiasów. Patrzę na ciebie, LISP, Brainfuck.
To jest golfowy kod , więc wygrywa najkrótszy kod, ale mile widziane są wszystkie długości kodu.
* Przez spójne wartości prawda i fałsz rozumiem, że możesz zwrócić jedną z dwóch wartości, na przykład 1
prawda i 0
fałsz lub False
prawda i "no"
fałsz, o ile wartości te różnią się od siebie i nie zmień z uruchomienia na uruchomienie programu. Użyj tego, co ocali ci postacie.
** Nie należy mylić z niewykonanym : kod, który jest prawidłowy i może robić dziwne rzeczy, ale nigdy nie wywoływany jest w porządku.
(eslaf)fi
, możesz użyć if(false)
.
()()
ustalenie , dlaczego nie jest palindromem
if(false){some code}
zmiennymi lub nieużywanymi zmiennymi? Czy są dozwolone?