Ok, spróbujmy nie orać twojego rozwiązania tylko je naprawić (to podejście nie jest delikatnie mówiąc najwydajniejsze, bo wykonujesz zawsze max - min
iteracji niezależnie od wielkości kroku).
Zacznijmy od tego, że warunek:
(i + 2) % step === 0
jest bez sensu - skąd ta dwójka?
Pomijając to, trop, że
i % step === 0
jest krokiem w dobrym kierunku jest słuszny. Działa on dla wszystkich zakresów, jeśli wartość początkowa jest równa 0
. Problem zaczyna się, gdy wartość początkowa > 0 - wszystko się przesuwa. O ile się przesuwa? Ano o wartość początkową. A jakby tak zniwelować to przesunięcie w warunku? Trzeba by pewnie coś odjąć od bieżącej wartości zanim sprawdzimy resztę z dzielenia...
Można też do tego podejść w inny sposób (może nawet bardziej intuicyjny) - potraktujmy całą iterację jakby zaczynała się od zera. Jeśli pierwsza wartość w petli będzie równa 0
, to ostatnia wartość nie będzie max
, ale taką wartością by długość zakresu była taka sama jak od min
do max
. Teraz możemy sobie bezpiecznie użyć warunku i % step === 0
. Pozostaje tylko jedna kwestia - trzebaby coś dodać teraz do każdej wartości pushowanej do tablicy.
Spoiler: CodePen
PS
Optymalne rozwiązanie masz post wyżej.