If anyone wants to explore the probabilities of fully covering a character, here’s a few Python functions I wrote that calculate it via brute force:
def check(a, b, c, r): if r == 0: return min(a,5) + min(b,5) + min(c,5) >= 13 return check(a+1,b,c, r-1) + check(a,b+1,c, r-1) + check(a,b,c+1, r-1) def fully_covered(pulls): return float(check(0,0,0, pulls)) / 3**pulls
There are quicker ways to calculate this, but it was good enough for my needs. This gave me the 30% probability to fully cover a character with 13 covers. For 14 covers, it rises to 50%, and then 65% and 76% for 15 and 16 covers. I needed to go to pick 21 covers to get above 95% probability of fully covering the character.
95% might seem like pretty good odds, but it means that if you have 20 characters it wouldn’t be unusual for one of them to require more than 21 covers to complete. If you’ve got most of the 4* characters, you might expect this to happen to a few of them.
So I think this is just a case of bad luck rather than the results being rigged.