I find that much harder to read than a for loop. You are making a helper function to only use it once, which is kind of confusing when it is totally unnecessary. Also, distinguishing between two groups only inside the setter line is weird. Applying the modification to one group, then the other, is more obvious. Considering the alternative isn't really longer, and only using basic loop syntax, I would just use the loop. If you really want to add the "set dots visibility" explanation into it, just use a comment, that's what they're for.
I literally just now misunderstood your code and had to change my comment to correct for it.
Every thing you code is binary. You may write '15', but the code your computer runs will use '00001111'. The base-10 source code is only like that for human readability. All mathematical operations are done in binary, and all numbers are stored in binary. The only time they are not is the exact moment they are converted to text to display to the user.