33
\$\begingroup\$

Task:

Given an integer number in decimal number system, reduce it to a single decimal digit as follows:

  1. Convert the number to a list of decimal digits.
  2. Find the largest digit, D
  3. Remove D from the list. If there is more than one occurrence of D, choose the first from the left (at the most significant position), all others should remain intact.
  4. Convert the resulting list to a decimal number and multiply it by D.
  5. If the number is bigger than 9 (has more than 1 decimal digit), repeat the whole procedure, feeding the result into it. Stop when you get a single-digit result.
  6. Display the result.

Example:

26364 -> 
1. 2 6 3 6 4 
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
    at position 1 and get the list 2 3 6 4 
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
   2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.

We continue by repeating the procedure for 14184 and so on and we go through the following intermediate results, finally reaching 8:

11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8

So the result for 26364 is 8.

Input: An integer / a string representing an integer

Output: A single digit, the result of the reduction applied to the number.

Test cases:

9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6

This is , so the shortest answers in bytes in each language win.

\$\endgroup\$
  • 3
    \$\begingroup\$ Which is it If the number is bigger than 10 or has more than 1 decimal digit. The number 10 has more than 1 decimal digit, but it isn't bigger than ten. \$\endgroup\$ – Adám Nov 18 '17 at 22:00
  • \$\begingroup\$ @Adám By coding logics, should then 10 -> 10? \$\endgroup\$ – Ian H. Nov 19 '17 at 0:16
  • 1
    \$\begingroup\$ @Adám You are right, I should have written "bigger than 9". I'm going to edit the description. Thanks! \$\endgroup\$ – Galen Ivanov Nov 19 '17 at 7:37
  • \$\begingroup\$ Has someone examined the histogram of this function for sufficiently large regions? It seems to have a lot of zeroes; I also got many 8s while composing the test cases. \$\endgroup\$ – Galen Ivanov Nov 19 '17 at 9:54
  • 2
    \$\begingroup\$ Also, a random number divisible by 4 has 3/5 probability of the product of the last two digits being divisible by 8. \$\endgroup\$ – Ørjan Johansen Nov 21 '17 at 18:36

32 Answers 32

1
\$\begingroup\$

APL NARS 42 40 36 chars

{⍵≤9:⍵⋄∇h⌷v×10⊥v[(⍳⍴v)∼h←1⌷⍒v←⍎¨⍕⍵]}

some test, I copied the trick ⍎¨⍕ from Adam solution

g←{⍵≤9:⍵⋄∇h⌷v×10⊥v[(⍳⍴v)∼h←1⌷⍒v←⍎¨⍕⍵]}

  g¨9 27 757 1234 26364 432969 1234584 91273716
9 4 5 8 8 0 8 6

{⍵≤9:⍵   if ⍵≤9 return ⍵
 ∇h⌷v×10⊥v[(⍳⍴v)∼h←1⌷⍒v←⍎¨⍕⍵]
                      v←⍎¨⍕⍵] convert ⍵ in the list of integer digits (not chars) in v
                 h←1⌷⍒v       puts in h the index of the first element max that appear in v
           v[(⍳⍴v)∼h           gets from v only the indices for digits different from h
        10⊥                   convert that modify v[]sub array to a number in base 10
 ∇h⌷v×            multiply it with v[h], and recall the same function for this number
}
\$\endgroup\$
1
\$\begingroup\$

Kotlin, 109 bytes

fun f(n:Int):Int{return if(n>9){val m=(""+n).max()!!;f((""+n).replaceFirst(""+m,"").toInt()*(m-'0'))}else n}
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.