Sadly Uiua doesn't handle the large numbers here well, so here's a Dart solution instead.
import 'dart:math';
import 'package:more/more.dart';
typedef P = Point;
void main(List<String> args) {
P add(P a, P b) => P(a.x + b.x, a.y + b.y);
P mul(P a, P b) => P(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
P div(P a, P b) => P(a.x ~/ b.x, a.y ~/ b.y);
P part1(P a) {
P r = P(0, 0);
for (var _ in 0.to(3)) {
r = add(div(mul(r, r), P(10, 10)), a);
}
return r;
}
bool test2(P a) {
P r = P(0, 0);
for (var _ in 0.to(100)) {
r = add(div(mul(r, r), P(100000, 100000)), a);
if (r.x.abs() > 1000000 || r.y.abs() > 1000000) return false;
}
return true;
}
part2(P a, {step = 1}) => [
for (var x in 0.to(1001, step: step))
for (var y in 0.to(1001, step: step)) test2(P(a.x + x, a.y + y))
].count((e) => e);
print(part1(P(25, 9)));
print(part2(P(35300, -64910), step: 10));
print(part2(P(35300, -64910)));
}