Babylonian spiral: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Raku}}: rephrase logic, less bracketing) |
|||
Line 486: | Line 486: | ||
<syntaxhighlight lang="raku" line>sub babylonianSpiral (\nsteps) { |
<syntaxhighlight lang="raku" line>sub babylonianSpiral (\nsteps) { |
||
my @squareCache = (0..nsteps).hyper.map: *²; |
my @squareCache = (0..nsteps).hyper.map: *²; |
||
my @dxys = |
my @dxys = [0, 0], [0, 1]; |
||
my $dsq = 1; |
my $dsq = 1; |
||
Line 495: | Line 495: | ||
until @candidates.elems { |
until @candidates.elems { |
||
$dsq++; |
$dsq++; |
||
for @squareCache.kv -> \i, \a { |
|||
last if a > $dsq/2; |
|||
for reverse 0 .. $dsq.sqrt.ceiling -> \j { |
|||
last if |
last if $dsq > (a + my \b = @squareCache[j]); |
||
if |
next if $dsq != a + b; |
||
@candidates.append: [i, j], [-i, j], [i, -j], [-i, -j], |
|||
[j, i], [-j, i], [j, -i], [-j, -i] |
|||
} |
|||
} |
} |
||
} |
} |