First of all
This code looks like it does what you want
You've separated methods well
The code style looks reasonable (in terms of formatting, blank lines etc).
Second, stop reading code golf, it's a poor standard even if you're trying to learn what not to do.
Third, some specific improvements I might suggest:
No, this code is NOT fully self-documenting. ...