^(A)?(B)?C?(D|())(E|())(F)?(G)?
$.($.5*$.8*$(6*$7$2$2)$#6*$.3*$($.2*$(___$7)5*$7)$#4*$(6*$1_3*$8
Попробуйте онлайн! Возможно, это не лучший способ, но это интересный способ программирования в Retina. Объяснение:
^(A)?(B)?C?(D|())(E|())(F)?(G)?
Пытается запечатлеть интересные случаи. Положительные снимки просто фиксируют письмо, если оно присутствует. Следовательно, длина захвата равна 1, если он присутствует, и 0, если он отсутствует. Частными случаями являются снимки 4 и 6, которые существуют, только если D или E отсутствуют соответственно. Они могут быть выражены только в десятичной системе счисления , как $#4и , $#6но это все , что нам нужно здесь. Захваты затем строятся в строку, длина которой является желаемым числом. Например, если мы напишем, 6*$1то эта строка имеет длину 6, если A присутствует, и 0, если она отсутствует. Чтобы выбрать между различными выражениями, мы используем $.(для положительных значений) или $#(для отрицательных значений) значения, равные 0 или 1, и это можно затем умножить на строку.
$.5*$.8*$(6*$7$2$2)
Fповторяется 6 раз и Bдважды (путем конкатенации, так как это гольфер). Тем не менее, результат игнорируется, если оба Eи Gприсутствуют. Это обрабатывает случаи 2, 6и 8.
$#6*$.3*$($.2*$(___$7)5*$7)
Fповторяется 5 раз, и, если Bприсутствует, добавляется шестой раз плюс дополнительные 3 (представленные константной строкой длины 3). Тем не менее, результат игнорируется, если Dон присутствует и Eотсутствует. Это обрабатывает случаи 3, 5и 9.
$#4*$(6*$1_3*$8
Aповторяется 6 раз, Gповторяется 3 раза и 1добавляется дополнительный (представленный постоянным символом между ними, потому что он гольфист). Однако результат игнорируется, если Dотсутствует. Это обрабатывает случаи 1, 4и 7.
$.(
Вышеуказанные строки затем объединяются и длина берется. если ничего из вышеперечисленного не применимо, строка не генерируется, и поэтому ее длина равна 0.
Результирующие строки (до определения длины) выглядят следующим образом:
1 _
2 BB
3 ___
4 _GGG
5 FFFFF
6 FFFFFF
7 AAAAAA_
8 FFFFFFBB
9 ___FFFFFF