The Squaring Sequence
JavaScript (ES7), 44 43 36 bytes
f=n=>--n?(f(n)**2+f).slice(0,4):1111
This is a great example of abusing type coercion: **
converts both its arguments to numbers, and +
converts both its arguments to strings unless they're both numbers. This means that f(n)**2+f
first converts f(n)
to a number and squares it, then concatenates the result with the string representation of f
. We can then use .slice
to retrieve the first 4 chars of the string.
Here are a few alternate approaches that don't use strings:
f=(n,x=1111)=>x<1e4?--n?f(n,x*x):x:f(n,x/10|0)
f=n=>--n?(x=f(n))*x/(x>3162?1e4:1e3)|0:1111
Test snippet
let f=n=>--n?(Math.pow(f(n),2)+f).slice(0,4):1111
<input id=I type="number" step="1" min="1" value="1"><button onclick="console.log(f(I.value))">Run</button>
Note: this uses Math.pow
because **
isn't supported in all browsers.
05AB1E, 8 7 bytes
Code:
$Fn4×4£
Explanation:
$ # Push 1 and the input
F # Input times do...
n # Square the number
4× # Repeat that string 4 times
4£ # Take the first four characters
# Output the last computed number
Uses the CP-1252 encoding. Try it online!
Python 2, 51 46 44 Bytes
Wrong again! The recursive function returns. This is one-indexed.I'd like to get rid of the clunky Turns out for the moment that if
if possible, but I think an exec
could be shorter..exec
is shorter.
f=lambda n:1111*(n<2)or int(`f(n-1)**2`[:4])
An aleternative 46-byte solution with exec
:
s=1111;exec's=int(`s*s`[:4]);'*input();print s
An alternative 49-byte recursive solution:
f=lambda n,s=1111:s*0**n or f(n-1,int(`s*2`[:4]))
Thanks to Flp.Tkc for saving a byte by reminding me that squaring doesn't need exponentiation :)