I think the regex version is even shorter and just as effective:
on $@*:text:/([A-Z])/gS:#:{ $iif($len($1-) > 16 && $calc(($len($1-) - $len($regml(0)))/$len($1-)*100) > 40,ban -ku60 # $nick 1 huh..) }