# project euler 58 p ← =1⧻°/× Sieve ← ▽⊸≡p+2⇡ Primes ← Sieve 37417 # is_prime(n) ? n # p ← ⨬(=|1)⊸=¯1⊸(⍣⊢¯1▽⤚(=0≡◿) Primes ¤) NewP ← ( # get the next three prime candidates (lower right is odd square) ⊃((+5+∩×₄⊃×₂ⁿ₂) | (+3+⊃×₆(×4ⁿ2)) | (+7+⊃×₁₀(×4ⁿ2)) ) ++∩₃p # count how many are prime (0-3) ) Sol ← ( # initial values are: # - 5: the amount of numbers so far; 1, 3, 5, 7, 9 (counter for diagonal) # - NewP.: = 3, since 3, 5, 7 are prime (counter for primes on diagonal) # - 0: current NewP generation. NewP 0 is 3 (see above) 5 NewP. 0 ⍢(+4 ⊙+ ⊙⊙(⊸NewP+1) # add 4 for new corners, generate NewP(n+1) | >0.1 ÷ # check prime ratio ) # discard number of primes and diagonal values, # scale generation up to side length # newp gen 0 -> 0*2 + 3 = side length 3 # newp gen 1 -> 1*2 + 3 = side length 5, ... ⋅⋅(+3×2) )