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