(([][()]){[{}({}[({})])]{{}()(<()>)}{}([][()])}<>)
Wypróbuj online!
Ponieważ wszyscy publikują swoje 50-bajtowe rozwiązania tutaj są moje (mam 48-bajtowe, ale była to prosta modyfikacja DjMcMayhem, więc czułem, że warto opublikować)
Wyjaśnienie
Ta odpowiedź w szerokim zakresie wykorzystuje anulowanie wartości.
Wygląda na to, że nie grał w golfa
([][()])({<{}({}[({})])>{<{}>()(<()>)}{}<([][()])>}<>)
Tutaj obliczamy deltę, aż na stosie pozostanie jeden element, za każdym razem, gdy gromadzimy jedną wartość z wewnętrznej pętli, jeśli delta nie jest równa zero.
Jest to dość prosty sposób na zrobienie tego.
Aby uczynić tego golfa, zaczynamy anulować wartość. Pierwszym i tym, który powinien być oczywisty dla każdego zahartowanego golfisty, jest wysokość stosu. Jest to dobrze znany fakt
([])({<{}>...<([])>}{})
jest taki sam jak
(([]){[{}]...([])}{})
Gdy wartości są modyfikowane o jeden, to samo obowiązuje. To nam daje
(([][()]){[{}]<({}[({})])>{<{}>()(<()>)}{}([][()])}<>)
Możesz zauważyć, że to nawet nie uratowało nam bajtów, ale nie przejmuj się, że stanie się to bardziej przydatne w miarę upływu czasu.
Możemy wykonać kolejną redukcję, jeśli zobaczysz oświadczenie
<(...)>{<{}> ...
możesz to zredukować do
[(...)]{{} ...
Działa to, ponieważ jeśli wejdziemy w pętlę [(...)]i {}anulujemy, a jeśli nie, wartość [(...)]już była zero na pierwszym miejscu i nie trzeba jej anulować. Ponieważ w kodzie mamy ten wzorzec, możemy go zmniejszyć.
(([][()]){[{}][({}[({})])]{{}()(<()>)}{}([][()])}<>)
To zaoszczędziło nam 2 bajty, ale także umieściło obok siebie dwa neg. Można je połączyć, aby uratować nam kolejne 2.
(([][()]){[{}({}[({})])]{{}()(<()>)}{}([][()])}<>)
I to jest nasz kod.
Falsezamiast tego jest drukowany?