^(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