11def kaprekar_routine (number : int ) -> int :
22 """
3- Find steps to Kaprekar constant (6174) bro .
4- Link: https://wikipedia.org
3+ Calculates the number of steps required to reach Kaprekar's constant (6174).
4+ Link: https://en. wikipedia.org/wiki/6174
55
66 >>> kaprekar_routine(3524)
77 3
88 >>> kaprekar_routine(6174)
99 0
1010 """
1111
12- # Checking if the number is 4 digits, throwing an error if not bro
12+ # Ensure the input is a 4-digit positive integer
1313 if not (1000 <= number <= 9999 ):
14- raise ValueError ("The number must be 4 digits bro! " )
14+ raise ValueError ("The number must be a 4-digit integer. " )
1515
16- # If someone enters all same digits like 1111, loop breaks. Blocking it here
16+ # Prevent repdigits (e.g., 1111) which result in zero and cause infinite loops
1717 if len (set (str (number ))) < 2 :
18- raise ValueError (
19- "Digits cannot be all the same bro, make at least two different!"
20- )
18+ raise ValueError ("The number must contain at least two distinct digits." )
2119
2220 kaprekar_target = 6174
2321 steps = 0
2422
25- # We are here until the number becomes 6174 bro, loop keeps spinning
23+ # Iterate until the number reaches Kaprekar's constant
2624 while number != kaprekar_target :
27- # Padding the number to 4 digits and making it a string bro
25+ # Zero-pad the number to ensure a 4-digit string representation
2826 digits = f"{ number :04d} "
2927
30- # Sorting digits from biggest to smallest and joining them
28+ # Sort digits in descending and ascending order
3129 descending = int ("" .join (sorted (digits , reverse = True )))
32-
33- # Sorting digits from smallest to biggest and joining them
3430 ascending = int ("" .join (sorted (digits )))
3531
36- # Subtracting smallest from biggest, finding new number and increasing steps bro
32+ # Subtract smaller number from larger number to get the next iteration
3733 number = descending - ascending
3834 steps += 1
3935
40- # Infinite loop protection just in case we break something, spins 7 times max
36+ # Safety check: Kaprekar's routine always reaches 6174 in at most 7 steps
4137 if steps > 7 :
4238 break
4339
@@ -47,8 +43,8 @@ def kaprekar_routine(number: int) -> int:
4743if __name__ == "__main__" :
4844 import doctest
4945
50- # Running the test engine that the bots are checking
46+ # Execute automated doctests
5147 doctest .testmod ()
5248
53- # Just a small example here to test it for myself
54- print (f"Our number locked in exactly { kaprekar_routine (3524 )} steps bro! " )
49+ # Sample execution
50+ print (f"Iterations required: { kaprekar_routine (3524 )} " )
0 commit comments