^(A)?(B)?C?(D|())(E|())(F)?(G)?
$.($.5*$.8*$(6*$7$2$2)$#6*$.3*$($.2*$(___$7)5*$7)$#4*$(6*$1_3*$8
Wypróbuj online! Może nie jest to najlepszy sposób, ale jest to interesujący sposób programowania w Retina. Wyjaśnienie:
^(A)?(B)?C?(D|())(E|())(F)?(G)?
Próbuje uchwycić interesujące przypadki. Pozytywne przechwytywania po prostu przechwytują literę, jeśli jest obecna. Długość przechwytywania wynosi zatem 1, jeśli jest obecny, i 0, jeśli go nie ma. Przypadkami szczególnymi są zrzuty 4 i 6, które istnieją tylko wtedy, gdy odpowiednio D lub E są nieobecne. Te mogą być wyrażone tylko w postaci dziesiętnej, jak $#4i $#6, ale to wszystko musimy tutaj. Przechwyty są następnie budowane w ciąg, którego długość jest pożądaną liczbą. Na przykład, jeśli piszemy, 6*$1to ten łańcuch ma długość 6, jeśli A jest obecny, i 0, jeśli jest nieobecny. Aby wybierać między różnymi wyrażeniami, używamy $.(dla przechwytywania dodatniego) lub $#(dla przechwytywania ujemnego), które oceniają na 0 lub 1, a do tej pory można to pomnożyć przez ciąg.
$.5*$.8*$(6*$7$2$2)
Fpowtarza się 6 razy i Bdwa razy (przez konkatenację, ponieważ jest golfistą). Jednak wynik jest ignorowany, chyba że jedno i drugieE i Gsą obecne. Obsługuje to przypadki 2, 6i 8.
$#6*$.3*$($.2*$(___$7)5*$7)
Fpowtarza się 5 razy, a jeśli Bjest obecny, dodaje się go po raz szósty plus dodatkowe 3 (reprezentowane przez stały ciąg długości 3). Jednak wynik jest ignorowany, chyba że Djest obecny iE nieobecny. Obsługuje to przypadki 3, 5i 9.
$#4*$(6*$1_3*$8
Apowtarza się 6 razy i Gpowtarza się 3 razy, a dodatkowo 1dodawany (reprezentowany przez stały znak między nimi, ponieważ jest bardziej golfowy). Jednak wynik jest ignorowany, chyba żeD jest nieobecny. Obsługuje to przypadki 1, 4i 7.
$.(
Powyższe ciągi są następnie łączone i brana jest długość. jeśli żadna z powyższych nie ma zastosowania, łańcuch nie jest generowany, a zatem jego długość wynosi 0.
Wynikowe ciągi (przed pobraniem długości) są następujące:
1 _
2 BB
3 ___
4 _GGG
5 FFFFF
6 FFFFFF
7 AAAAAA_
8 FFFFFFBB
9 ___FFFFFF