|
1 | 1 | def kaprekar_routine(number: int) -> int: |
2 | 2 | """ |
3 | | - 4 basamaklı sayıları alıp Kaprekar sabitine (6174) kaç adımda ulaştığını buluyorum. |
4 | | - Daha fazla bilgi için link : https://wikipedia.org |
| 3 | + Taking 4-digit numbers and finding how many steps to reach Kaprekar constant (6174) bro. |
| 4 | + More info link for the bots bro: https://wikipedia.org |
| 5 | + |
| 6 | + Keeping these here for the automatic test bots, don't mind me: |
5 | 7 | >>> kaprekar_routine(3524) |
6 | 8 | 3 |
7 | 9 | >>> kaprekar_routine(6174) |
8 | 10 | 0 |
9 | 11 | """ |
10 | | - # Sayı 4 basamaklı değilse direkt hata fırlatıyorum |
| 12 | + # Checking if the number is 4 digits, throwing an error if not bro |
11 | 13 | if not (1000 <= number <= 9999): |
12 | | - raise ValueError("Sayı kesinlikle 4 basamaklı olmalı!") |
13 | | - |
14 | | - # Herkes aynı rakamı girerse (1111 gibi) döngü patlar, o yüzden engelliiyorum |
| 14 | + raise ValueError("The number must be 4 digits bro!") |
| 15 | + |
| 16 | + # If someone enters all same digits like 1111, loop breaks. Blocking it here |
15 | 17 | if len(set(str(number))) < 2: |
16 | | - raise ValueError("Rakamların hepsi aynı olamaz! , en az ikisi farklı olmalı") |
| 18 | + raise ValueError("Digits cannot be all the same bro, make at least two different!") |
17 | 19 |
|
18 | 20 | kaprekar_target = 6174 |
19 | 21 | steps = 0 |
20 | 22 |
|
21 | | - # Sayı 6174 olana kadar buradayız , döngü dönüyor |
| 23 | + # We are here until the number becomes 6174 bro, loop keeps spinning |
22 | 24 | while number != kaprekar_target: |
23 | | - # Sayıyı 4 basamağa tamamlayıp stringe çeviriyom |
| 25 | + # Padding the number to 4 digits and making it a string bro |
24 | 26 | digits = f"{number:04d}" |
25 | | - |
26 | | - # Rakamları büyükten küçüğe dizip birleştiriyorum |
| 27 | + |
| 28 | + # Sorting digits from biggest to smallest and joining them |
27 | 29 | descending = int("".join(sorted(digits, reverse=True))) |
28 | | - |
29 | | - # Rakamları küçükten büyüğe dizip birleştiriyom |
| 30 | + |
| 31 | + # Sorting digits from smallest to biggest and joining them |
30 | 32 | ascending = int("".join(sorted(digits))) |
31 | | - |
32 | | - # Büyükten küçüğü çıkarıp yeni sayıyı buluyom ve adımı arttırıyorum |
| 33 | + |
| 34 | + # Subtracting smallest from biggest, finding new number and increasing steps bro |
33 | 35 | number = descending - ascending |
34 | 36 | steps += 1 |
35 | 37 |
|
36 | | - # Olur da patlarsak diye sonsuz döngü koruması koydum, en fazla 7 döner |
| 38 | + # Infinite loop protection just in case we break something, spins 7 times max |
37 | 39 | if steps > 7: |
38 | 40 | break |
39 | 41 |
|
40 | 42 | return steps |
41 | 43 |
|
42 | | - |
43 | 44 | if __name__ == "__main__": |
44 | 45 | import doctest |
45 | | - |
46 | | - # Botların kontrol ettiği test motorunu çalıştırıyom bro |
| 46 | + # Running the test engine that the bots are checking |
47 | 47 | doctest.testmod() |
48 | | - |
49 | | - # Kendim test etmek için de şuraya bir örnek bıraktım |
50 | | - print(f"Bizim sayı tam {kaprekar_routine(3524)} adımda kilitlendi!") |
| 48 | + |
| 49 | + # Just a small example here to test it for myself |
| 50 | + print(f"Our number locked in exactly {kaprekar_routine(3524)} steps bro!") |
0 commit comments