51 lines
962 B
Text
51 lines
962 B
Text
F next_step(=x)
|
|
V result = 0
|
|
L x > 0
|
|
result += (x % 10) ^ 2
|
|
x I/= 10
|
|
R result
|
|
|
|
F check(number)
|
|
V candidate = 0
|
|
L(n) number
|
|
candidate = candidate * 10 + n
|
|
|
|
L candidate != 89 & candidate != 1
|
|
candidate = next_step(candidate)
|
|
|
|
I candidate == 89
|
|
V digits_count = [0] * 10
|
|
L(d) number
|
|
digits_count[d]++
|
|
|
|
V result = factorial(number.len)
|
|
L(c) digits_count
|
|
result I/= factorial(c)
|
|
R result
|
|
|
|
R 0
|
|
|
|
V limit = 100000000
|
|
V cache_size = Int(ceil(log10(limit)))
|
|
assert(10 ^ cache_size == limit)
|
|
|
|
V number = [0] * cache_size
|
|
V result = 0
|
|
V i = cache_size - 1
|
|
|
|
L
|
|
I i == 0 & number[i] == 9
|
|
L.break
|
|
I i == cache_size - 1 & number[i] < 9
|
|
number[i]++
|
|
result += check(number)
|
|
E I number[i] == 9
|
|
i--
|
|
E
|
|
number[i]++
|
|
L(j) i + 1 .< cache_size
|
|
number[j] = number[i]
|
|
i = cache_size - 1
|
|
result += check(number)
|
|
|
|
print(result)
|