Palindromic gapful numbers

Inspired from the C++ and Raku entries.

class PalindromeGenerator (digit, base=10) {
 
    has power = base
    has after = (digit*power - 1)
    has even  = false
 
    method next {
 
        if (++after == power*(digit+1)) {
            power *= base if even
            after = digit*power
            even.not!
        }
 
        even ? (after*power*base + reverse(after, base))
             : (after*power + reverse(after/base, base))
    }
}
 
var task = [
    "(Required) First 20 gapful palindromes:",       { .first(20) }, 7,
    ,"\n(Required) 86th through 100th:",             { .first(1e2).last(15) }, 8,
    ,"\n(Optional) 991st through 1,000th:",          { .first(1e3).last(10) }, 10,
    ,"\n(Extra stretchy) 9,995th through 10,000th:", { .first(1e4).last(6) }, 12,
]
 
task.each_slice(3, {|title, f, w|
    say title
    for d in (1..9) {
        var k    = 11*d
        var iter = PalindromeGenerator(d)
        var arr  = f(^Inf->lazy.map { iter.next }.grep {|n| k `divides` n })
        say ("#{d}: ", arr.map{ "%*s" % (w, _) }.join(' '))
    }
})

Output:

(Required) First 20 gapful palindromes:
1:     121    1001    1111    1221    1331    1441    1551    1661    1771    1881    1991   10901   11011   12221   13431   14641   15851   17171   18381   19591
2:     242    2002    2112    2222    2332    2442    2552    2662    2772    2882    2992   20702   21912   22022   23232   24442   25652   26862   28182   29392
3:     363    3003    3333    3663    3993   31713   33033   36663  300003  303303  306603  309903  312213  315513  318813  321123  324423  327723  330033  333333
4:     484    4004    4224    4444    4664    4884   40304   42724   44044   46464   48884  400004  401104  402204  403304  404404  405504  406604  407704  408804
5:    5005    5115    5225    5335    5445    5555    5665    5775    5885    5995   50105   51315   52525   53735   54945   55055   56265   57475   58685   59895
6:    6006    6336    6666    6996   61116   64746   66066   69696  600006  603306  606606  609906  612216  615516  618816  621126  624426  627726  630036  633336
7:    7007    7777   77077  700007  707707  710017  717717  720027  727727  730037  737737  740047  747747  750057  757757  760067  767767  770077  777777  780087
8:    8008    8448    8888   80608   86768   88088  800008  802208  804408  806608  808808  821128  823328  825528  827728  829928  840048  842248  844448  846648
9:    9009    9999   94149   99099  900009  909909  918819  927729  936639  945549  954459  963369  972279  981189  990099  999999 9459549 9508059 9557559 9606069

(Required) 86th through 100th:
1:   165561   166661   167761   168861   169961   170071   171171   172271   173371   174471   175571   176671   177771   178871   179971
2:   265562   266662   267762   268862   269962   270072   271172   272272   273372   274472   275572   276672   277772   278872   279972
3: 30366303 30399303 30422403 30455403 30488403 30511503 30544503 30577503 30600603 30633603 30666603 30699603 30722703 30755703 30788703
4:  4473744  4485844  4497944  4607064  4619164  4620264  4632364  4644464  4656564  4668664  4681864  4693964  4803084  4815184  4827284
5:   565565   566665   567765   568865   569965   570075   571175   572275   573375   574475   575575   576675   577775   578875   579975
6: 60399306 60422406 60455406 60488406 60511506 60544506 60577506 60600606 60633606 60666606 60699606 60722706 60755706 60788706 60811806
7: 72299227 72322327 72399327 72422427 72499427 72522527 72599527 72622627 72699627 72722727 72799727 72822827 72899827 72922927 72999927
8: 80611608 80622608 80633608 80644608 80655608 80666608 80677608 80688608 80699608 80800808 80811808 80822808 80833808 80844808 80855808
9: 95311359 95400459 95499459 95588559 95677659 95766759 95855859 95944959 96033069 96122169 96211269 96300369 96399369 96488469 96577569

(Optional) 991st through 1,000th:
1:   17799771   17800871   17811871   17822871   17833871   17844871   17855871   17866871   17877871   17888871
2:   27799772   27800872   27811872   27822872   27833872   27844872   27855872   27866872   27877872   27888872
3: 3084004803 3084334803 3084664803 3084994803 3085225803 3085555803 3085885803 3086116803 3086446803 3086776803
4:  482282284  482414284  482535284  482656284  482777284  482898284  482909284  483020384  483141384  483262384
5:   57800875   57811875   57822875   57833875   57844875   57855875   57866875   57877875   57888875   57899875
6: 6084004806 6084334806 6084664806 6084994806 6085225806 6085555806 6085885806 6086116806 6086446806 6086776806
7: 7452992547 7453223547 7453993547 7454224547 7454994547 7455225547 7455995547 7456226547 7456996547 7457227547
8: 8085995808 8086006808 8086116808 8086226808 8086336808 8086446808 8086556808 8086666808 8086776808 8086886808
9: 9675005769 9675995769 9676886769 9677777769 9678668769 9679559769 9680440869 9681331869 9682222869 9683113869

(Extra stretchy) 9,995th through 10,000th:
1:   1787447871   1787557871   1787667871   1787777871   1787887871   1787997871
2:   2787447872   2787557872   2787667872   2787777872   2787887872   2787997872
3: 308757757803 308760067803 308763367803 308766667803 308769967803 308772277803
4:  48326662384  48327872384  48329192384  48330303384  48331513384  48332723384
5:   5787447875   5787557875   5787667875   5787777875   5787887875   5787997875
6: 608760067806 608763367806 608766667806 608769967806 608772277806 608775577806
7: 746951159647 746958859647 746961169647 746968869647 746971179647 746978879647
8: 808690096808 808691196808 808692296808 808693396808 808694496808 808695596808
9: 968688886869 968697796869 968706607869 968715517869 968724427869 968733337869

Last updated