Digital sum, DR, Digit root is the iterative process of summing digits of a number until you end up with a single digit root number: e.g. digit root of 12345 is 6 since 1 + 2 + 3 + 4 + 5 = 15 = 1+5. Also look at Digit root challenge.
Input:
Given integers m
and n
which are the modular and multiplier for sequence.
Output:
Return all cyclic sequences of length greater than one for Digit roots of n
* i
in base m
+ 1.
- \$1\$ ≤ \$i\$ ≤ \$m\$
- \$1\$ ≤ \$DR(n*i) \$ ≤ \$m\$
- \$DR(i) = i \$
- \$DR(-m) = 0 \$
- \$|DR(-x)| \equiv DR(x) \equiv -DR(x)\$ (mod \$ m) \$
- \$DR(a+b) = DR(DR(a)+DR(b))\$
- \$DR(a-b) \cong (DR(a)-DR(b))\$ (mod \$ m) \$
Example Input:
9 4
Example Output:
1 4 7
2 5 8
More details:
m=9, n=4
DR(4*1) -> 4
DR(4*4) -> 7
DR(4*7) -> 1 = first i
A cycle happens when going through numbers 1 trough m
taking digit root of n
* i
and then digit root of n
* result of previous call and so on until returns to the first i
.
Note that if there is no cycle taking digit root of n
* i
would simply result to i
.
So we store this sequence in something like a hash set for all the i
's and then return all the sequences.
Challenge
All the normal code-golf rules are applied excepts the answer with smaller sum of digit roots of each individual byte wins.
Example program of how to calculate the Σ digit sumsums of your code:
from sys import stdin
score=lambda s:sum((ord(c)-1)%9+1for c in s if ord(c)>0)
bytes=lambda s:"".join(str([ord(c)for c in s]).replace(',','').replace(']','').replace('[',''))
dr_bytes=lambda s:"".join(str([(ord(c)-1)%9+1for c in s]).replace(',',' +').replace(']',' =').replace('[',''))
code="\n".join(stdin.readlines())
print(bytes(code))
print(dr_bytes(code), end=' ')
print(score(code))