Funciton/Digital root calculator
Jump to navigation
Jump to search
This is a Funciton program that outputs the digital root of an input number. The input is expected to be an integer (not followed by a newline or any other whitespace).
I wrote this before I realised there is the efficient formula 1+(n-1)%9
. The program could be a lot smaller if that formula were used. Nevertheless, this demonstrates recursion in Funciton as well as some library functions such as ÷%
(division and modulo).
╓───╖ ║ ‰ ║ ╙─┬─╜ ┌──────────┴────────┐ ┌────────┴────────┐ ┌─────┴────┐ │ │ ┌─┴─╖ │ ╔════════════════════════════════╗ │ │ │ − ║ │ ║ digital root ║ │ │ ╘═╤═╝ │ ╟────────────────────────────────╢ │ ╔════╗ ┌───╖ │ ┌─┴─╖ │ ║ If ↓ < 0, negate ║ │ ║ 10 ╟──┤ < ╟──┘ │ ‰ ║ │ ║ If ↓ < 10, answer is ↓ ║ │ ╚════╝ ╘═╤═╝ ╘═╤═╝ ┌───┴───┐ ║ Else call ‰p and then repeat ║ │ ┌─┴─╖ ┌─┴─╖ ┌─┴─╖ │ ╚════════════════════════════════╝ └──────────┤ ? ╟─────┤ ? ╟──┤ > ║ │ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ │ ┌─┴─╖ │ ╔═╧═╗ │ │ ‰ ║ ║ 0 ║ │ ╔═══╗ ╘═╤═╝ ╚═══╝ │ ║ ║ ╔═══╗ ┌─┴──╖ │ ╚═╤═╝ ║ 0 ╟──┤ ‰p ╟─────────────────────┘ ┌─┴─╖ ╚═══╝ ╘════╝ │ 《 ║ ╘═╤═╝ ┌───────────────────────────┐ ┌─┴─╖ │ ╓┬───╖ │ │ ‰ ║ ├─────╫┘‰p ╟──┐ │ ╘═╤═╝ │ ╙────╜ │ │ ┌─┴─╖ │ ╔════╗ │ │ │ 》 ║ │ ║ 10 ║ │ │ ╘═╤═╝ │ ╚═╤══╝ │ │ │ │ ┌─┴──╖ │ │ │ ┌──┤ ÷% ╟──┴────────┐ │ │ │ ╘═╤══╝ │ │ ╔═════════════════════════════╗ │ │ └───────┐ │ │ ║ digital root (helper) ║ │ │ ┌────╖ ┌─┴─╖ │ │ ╟─────────────────────────────╢ │ └──┤ ‰p ╟──┤ + ║ │ │ ║ → is an accumulator ║ │ ╘═╤══╝ ╘═╤═╝ ┌─┴─╖ │ ║ If → = 0, result is ← ║ │ │ └────┤ · ╟──┘ ║ Else, add last digit of → ║ │ ┌─┴─╖ ╘═╤═╝ ║ to ← and recurse ║ └─────┤ ? ╟────────────┘ ╚═════════════════════════════╝ ╘═╤═╝ │