Digital root/Multiplicative digital root: Difference between revisions

Content added Content deleted
(Convert to task, tidy up presentation of task description)
(Added zkl)
Line 374: Line 374:
8: (8, 18, 24, 29, 36)
8: (8, 18, 24, 29, 36)
9: (9, 19, 33, 91, 119)
9: (9, 19, 33, 91, 119)
</pre>

=={{header|zkl}}==
{{trans|Python}}
<lang zkl>fcn mdroot(n){ // Multiplicative digital root
mdr := List(n);
while (mdr[-1] > 9){
mdr.append(mdr[-1].toString().apply("toInt").reduce('*,1));
}
return(mdr.len() - 1, mdr[-1]);
}</lang>
<lang zkl>fcn mdroot(n){
count:=0; mdr:=n;
while(mdr > 9){
m:=mdr; digitsMul:=1;
while(m){
reg md;
m,md=m.divr(10);
digitsMul *= md;
}
mdr = digitsMul;
count += 1;
}
return(count, mdr);
}</lang>
<lang zkl>println("Number: (MP, MDR)\n======= =========");
foreach n in (T(123321, 7739, 893, 899998))
{ println("%7,d: %s".fmt(n, mdroot(n))) }
table:=D([0..9].zip(fcn{List()}).walk()); // dictionary(0:List, 1:List, ...)
n :=0;
while(table.values.filter(fcn(r){r.len()<5})){ // until each entry has >=5 values
mpersistence, mdr := mdroot(n);
table[mdr].append(n);
n += 1;
}
println("\nMP: [n0..n4]\n== ========");
foreach mp in (table.keys.sort()){
println("%2d: %s".fmt(mp, table[mp][0,5])); //print first five values
}</lang>
{{out}}
<pre>
Number: (MP, MDR)
======= =========
123,321: L(3,8)
7,739: L(3,8)
893: L(3,2)
899,998: L(2,0)

MP: [n0..n4]
== ========
0: L(0,10,20,25,30)
1: L(1,11,111,1111,11111)
2: L(2,12,21,26,34)
3: L(3,13,31,113,131)
4: L(4,14,22,27,39)
5: L(5,15,35,51,53)
6: L(6,16,23,28,32)
7: L(7,17,71,117,171)
8: L(8,18,24,29,36)
9: L(9,19,33,91,119)
</pre>
</pre>