^(A)?(B)?C?(D|())(E|())(F)?(G)?
$.($.5*$.8*$(6*$7$2$2)$#6*$.3*$($.2*$(___$7)5*$7)$#4*$(6*$1_3*$8
Experimente online! Pode não ser o melhor caminho, mas é uma maneira interessante de programar no Retina. Explicação:
^(A)?(B)?C?(D|())(E|())(F)?(G)?
Tenta capturar os casos interessantes. As capturas positivas simplesmente capturam a letra, se estiver presente. O comprimento da captura é, portanto, 1 se estiver presente e 0 se estiver ausente. Os casos especiais são capturas 4 e 6, que existem apenas se D ou E estão ausentes, respectivamente. Eles só podem ser expressos em decimal como $#4e $#6mas é tudo o que precisamos aqui. As capturas são então construídas em uma sequência cujo comprimento é o número desejado. Por exemplo, se escrevermos 6*$1, essa sequência terá comprimento 6 se A estiver presente e 0 se estiver ausente. Para escolher entre diferentes expressões, usamos $.(para as capturas positivas) ou $#(para as capturas negativas) que são avaliadas como 0 ou 1 e isso pode ser multiplicado pela cadeia até agora.
$.5*$.8*$(6*$7$2$2)
Fé repetido 6 vezes e Bduas vezes (por concatenação, pois é mais golfista). No entanto, o resultado é ignorado, a menos que ambos Ee Gestejam presentes. Isso lida com os casos de 2, 6e 8.
$#6*$.3*$($.2*$(___$7)5*$7)
Fé repetido 5 vezes e, se Bestiver presente, é adicionado uma sexta vez mais um 3 extra (representado por uma sequência constante de comprimento 3). No entanto, o resultado é ignorado, a menos que Desteja presente e Eausente. Isso lida com os casos de 3, 5e 9.
$#4*$(6*$1_3*$8
Aé repetido 6 vezes, e Grepetido 3 vezes, e um acréscimo 1adicional (representado por um caractere constante entre os dois porque é mais golfista). No entanto, o resultado é ignorado, a menos que Desteja ausente. Isso lida com os casos de 1, 4e 7.
$.(
As strings acima são então concatenadas e o comprimento obtido. se nenhuma das opções acima se aplicar, nenhuma sequência será gerada e seu comprimento será, portanto 0.
As seqüências resultantes (antes que o comprimento seja obtido) são as seguintes:
1 _
2 BB
3 ___
4 _GGG
5 FFFFF
6 FFFFFF
7 AAAAAA_
8 FFFFFFBB
9 ___FFFFFF