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