| Bytes | Lang | Time | Link |
|---|---|---|---|
| 020 | TIBASIC TI84 Plus CE Python | 250916T151805Z | madeforl |
| 014 | APL Dyalog Extended | 200824T081305Z | Razetime |
| 013 | MATL | 160202T230043Z | Luis Men |
| 020 | Brachylog | 160203T145442Z | Fatalize |
| 026 | ES7 | 160202T235523Z | Neil |
| 021 | Pyth | 160202T202529Z | Denker |
| 010 | Jelly | 160202T201927Z | lirtosia |
| 016 | Japt | 160202T200232Z | ETHprodu |
| 014 | CJam | 160202T200839Z | lynn |
| 028 | Julia | 160202T203315Z | Alex A. |
TI-BASIC (TI-84 Plus CE Python), 20 bytes
Input L
int(√(Ans-1
2Ans(Ans+1)-L+2
APL (Dyalog Extended), 25 19 14 bytes
{2⊥⍨3⍴⌊√⍵-1}-⊢
-6 bytes from Adám.
-5 bytes from Bubbler.
A direct implementation of the last function mentioned on the OEIS page:
\$a(n)=2×\Big(\big\lfloor\sqrt{n-1}\big\rfloor+1\Big)×\big\lfloor\sqrt{n-1}\big\rfloor-n+2\$
Explanation:
{(2-⍵)+2×(1+⌊√⍵-1)×⌊√⍵-1} ⍵ → n
⌊√⍵-1 floor of root of n-1
(1+⌊√⍵-1)× times 1 + floor of root of n-1
2× times 2
(2-⍵) plus 2-n
MATL, 16 13 bytes
qX^Y[tQ*Q2*G-
Based on Lynn's CJam answer.
Try it online! (Y[ has been replaced by k according to changes in the language)
q % input n. Subtract 1
X^ % square root
Y[ % floor
tQ % duplicate and add 1
* % multiply
Q % add 1
2* % multiply by 2
G- % subtract n
This uses a different approach than other answers (16 bytes):
6Y3iQG2\+YLt!G=)
It explicitly generates the two spiral matrices (actually, vertically flipped versions of them, but that doesn't affect the output). The first one is
17 16 15 14 13
18 5 4 3 12
19 6 1 2 11
20 7 8 9 10
21 22 23 24 25
and the second one traces the modified path:
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
To find the n-th number of the sequence it suffices to find n in the second matrix and pick the corresponding number in the first. The matrices need to be big enough so that n appears, and should have odd size so that the origin (number 1) is in the same position in both.
Try it online too! (6Y3 has been moved according to changes in the language)
6Y3 % 'spiral' string
i % input n
QG2\+ % round up to an odd number large enough
YL % generate spiral matrix of that size: first matrix
t! % duplicate and transpose: second matrix
G= % logical index that locates n in the second matrix
) % use that index into first matrix
Brachylog, 20 bytes
-1$r$[I*I+I+1=*2-?=.
This uses the same technique as pretty much all other answers.
Explanation
-1 § Build the expression Input - 1
$r § Square root of Input - 1
$[I § Unify I with the floor of this square root
*I+I+1 § Build the expression I * I + I + 1
=*2-? § Evaluate the previous expression (say, M) and build the expression
§ M * 2 - Input
=. § Unify the output with the evaluation of M * 2 - Input
A midly interesting fact about this answer is that it is easier and shorter to use = rather than parentheses.
ES7, 31 28 26 bytes
n=>(m=--n**.5|0)*++m*2-~-n
I had independently discovered Alex's formula but I can't prove it because I wasn't near a computer at the time.
Edit: Saved 3 bytes partly thanks to @ETHproductions. Saved a further 2 bytes.
Pyth, 21 bytes
K2-h+^.E@QKK^t.E@QKKQ
Nothing fancy going on. Same method as in the JAPT answer.
Jelly, 11 10 bytes
’ƽð²+ḷ‘Ḥ_
Another Jelly answer on my phone.
’ƽð²+ḷ‘Ḥ_ A monadic hook:
’ƽ Helper link. Input: n
’ n-1
ƽ Atop integer square root. Call this m.
ð Start a new dyadic link. Inputs: m, n
²+ḷ‘Ḥ_ Main link:
²+ḷ Square m, add it to itself,
‘ and add one.
Ḥ Double the result
_ and subtract n.
Try it here.
Japt, 20 19 16 bytes
V=U¬c)²-V *2-U+2
Based on the observation that
F(N) = ceil(N^.5) * (ceil(N^.5)-1) - N + 2
Or, rather, that
F(N) = the first square greater than or equal to N, minus its square root, minus N, plus 2.
I don't know if this explanation is on the OEIS page, as I haven't looked at it yet.
CJam, 14 bytes
qi_(mQ7Ybb2*\-
Using Alex's approach: 2*(m^2+m+1)-n where m = isqrt(n-1).
Julia, 28 bytes
n->2((m=isqrt(n-1))^2+m+1)-n
This is a lambda function that accepts an integer and returns an integer. To call it, assign it to a variable.
We define m to be the largest integer such that m2 ≤ n-1, i.e. the integer square root of n-1 (isqrt). We can then simplify the OEIS expression 2 (m + 1) m - n + 2 down to simply 2 (m2 + m + 1) - n.