$brackets_pattern = qr{ # recursive pattern to search brackets like [mmm[ hh[f]]ll] \[ (?: (?>[^\[\]]+ ) # non-brackets | (??{$brackets_pattern}) #new pattern for inside brackets )* \] }x; my $pat = qr/(?-xism:(?-xism:[ab?x][DLSRX?]Glc(?:[pfa?]|-ol|)N\(1\-4\))(?x-ism:\[(?:(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*(?x-ism:\[(?:(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*\[(?x-ism:(?:(?>[^\[\]]+?)|(??{$brackets_pattern}))*)(?:t\)|(?[^\[\]]+)|(??{$brackets_pattern}))*\])*(?-xism:[ab?x][DLSRX?]Glcp\(1\-6\))\](?x-ism:\[(?:(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*(?-xism:[ab?x][DLSRX?]GalpN(?=\(|$)))/; #### -6)[xR3HOBut(1-3)]aDGlcpN(1-4)[aDGlcp(1-6),Ac(1-2)]aDGalpN(1-3)[Ac(1-2)]bDGalpN(1-2)aDGlcp(1-P- #### ([^e]|e([^s]|s([^\.]|\.([^c]|c([^o]|o([^m]|m([^p]|p([^\.]|\.([^o]|o([^s]|s([^\.]|\.([^l]|l([^i]|i([^n]|n([^u]|u[^x]))))))))))))))) #### #!/usr/bin/perl -l "AB~ACFI~ADGJ~AE~BCDE~BFHJ~BI~EGHI~EJ~IJ" =~ /([^~])[^~]*([^~]).*~[^~]*([^~])[^~]*([^~])(?{local$z=$1 and local$y=$2 and local$x=$1 eq$3?$4:$1 eq$4?$3:($z=$2)&&($y=$1)&&$2 eq$3?$4:$2 eq$4?$3:0}).*~[^~]*((??{$y})[^~]*(??{$x})|(??{$x})[^~]*(??{$y}))(?{$x{join" - ",sort$x,$y,$z}++})(?!)/; print for sort(keys %x), keys(%x) . " triangles found"; #### m< (?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\. )*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+) ){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F \d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(? :%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a- fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|- )*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(? :\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+! *'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?: (?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])+@(?:(?:( ?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[ a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z]( ?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[ a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d ])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z \d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a -zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d] )?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?: (?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?: (?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+ ))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[ a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA -Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$ \-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?: (?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: [a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? )/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA -Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|( ?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d] {2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:% [a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d] |-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?: (?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|( ?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z \d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-) *[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(? :[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a- zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[ a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d $\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?: (?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: [a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? ))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]) )|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2 0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F \d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(? :(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID |oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa]) ?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:( ?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:( ?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?( ?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?: %0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%( ?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?: \.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a -zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2 0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'( ),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(? :(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(? :[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+)) ?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?: [a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_ .+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(), ]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA -F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*) ?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&= ])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@ &=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=] )*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z \d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\ .(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a -fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a -fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d ]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:( ?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[ Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2 }))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ &=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]) ?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?: \d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?: %[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]| [Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2})) |[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ &=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1- 9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~ :@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d* )))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn ]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?)) )?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA- Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?: \.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*' (),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(), ])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d \$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\ -_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA- Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d \$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))) >x; #### sub valid { my $spot = substr($grid_h, $_[0]*$size+$_[1], 1); return 1 if $spot eq $_[2]; return if $spot ne '_'; return if index(substr($grid_h, $_[0] * $size, $size), $_[2]) >= 0; return if index(substr($grid_v, $_[1] * $size, $size), $_[2]) >= 0; return 1; } $re = qr/ (?: (?(?{ !valid(0, 0, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '1'); }) | (?(?{ !valid(0, 0, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '2'); }) | (?(?{ !valid(0, 0, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '3'); }) | (?(?{ !valid(0, 0, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '4'); }) | (?(?{ !valid(0, 0, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '5'); }) | (?(?{ !valid(0, 0, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '6'); }) | (?(?{ !valid(0, 0, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '7'); }) | (?(?{ !valid(0, 0, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '8'); }) | (?(?{ !valid(0, 0, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 0, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '9'); }) ) (?: (?(?{ !valid(0, 1, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '1'); }) | (?(?{ !valid(0, 1, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '2'); }) | (?(?{ !valid(0, 1, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '3'); }) | (?(?{ !valid(0, 1, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '4'); }) | (?(?{ !valid(0, 1, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '5'); }) | (?(?{ !valid(0, 1, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '6'); }) | (?(?{ !valid(0, 1, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '7'); }) | (?(?{ !valid(0, 1, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '8'); }) | (?(?{ !valid(0, 1, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 1, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '9'); }) ) (?: (?(?{ !valid(0, 2, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '1'); }) | (?(?{ !valid(0, 2, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '2'); }) | (?(?{ !valid(0, 2, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '3'); }) | (?(?{ !valid(0, 2, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '4'); }) | (?(?{ !valid(0, 2, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '5'); }) | (?(?{ !valid(0, 2, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '6'); }) | (?(?{ !valid(0, 2, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '7'); }) | (?(?{ !valid(0, 2, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '8'); }) | (?(?{ !valid(0, 2, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 2, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '9'); }) ) . . . (?: (?(?{ !valid(8, 6, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '1'); }) | (?(?{ !valid(8, 6, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '2'); }) | (?(?{ !valid(8, 6, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '3'); }) | (?(?{ !valid(8, 6, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '4'); }) | (?(?{ !valid(8, 6, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '5'); }) | (?(?{ !valid(8, 6, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '6'); }) | (?(?{ !valid(8, 6, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '7'); }) | (?(?{ !valid(8, 6, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '8'); }) | (?(?{ !valid(8, 6, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 78, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '9'); }) ) (?: (?(?{ !valid(8, 7, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '1'); }) | (?(?{ !valid(8, 7, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '2'); }) | (?(?{ !valid(8, 7, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '3'); }) | (?(?{ !valid(8, 7, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '4'); }) | (?(?{ !valid(8, 7, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '5'); }) | (?(?{ !valid(8, 7, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '6'); }) | (?(?{ !valid(8, 7, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '7'); }) | (?(?{ !valid(8, 7, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '8'); }) | (?(?{ !valid(8, 7, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 79, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '9'); }) ) (?: (?(?{ !valid(8, 8, '1') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '1'); }) | (?(?{ !valid(8, 8, '2') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '2'); }) | (?(?{ !valid(8, 8, '3') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '3'); }) | (?(?{ !valid(8, 8, '4') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '4'); }) | (?(?{ !valid(8, 8, '5') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '5'); }) | (?(?{ !valid(8, 8, '6') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '6'); }) | (?(?{ !valid(8, 8, '7') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '7'); }) | (?(?{ !valid(8, 8, '8') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '8'); }) | (?(?{ !valid(8, 8, '9') })x)(?{ local $grid_h = $grid_h; substr($grid_h, 80, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '9'); }) ) (?{ $match_grid = $grid_h }) /x;