Project Euler – Soru 4: “En Büyük Çarpım Palindrom”

Project Euler – Soru 4: “En Büyük Çarpım Palindrom”

Palindromik bir sayı, sağdan ve soldan aynı okunan sayıdır. İki basamaklı iki sayının çarpımıyla elde edilebilecek en büyük sayı palindromik sayı 9009’dur.

Üç basamaklı iki sayıdan elde edilebilecek en büyük palindrom sayı kaçtır?

Algoritma:

Öncelikle palindromik sayıları bulduracak bir algoritma oluşturmalıyız. Bunu şu şekilde yaparız:

  1. Öncelikle elimizdeki sayının uzunluğunu hesaplayalım.
  2. Bu uzunluğu ikiye bölüp, yalnızca bölüm kısmını tutalım.
  3. Elde ettiğimiz sayıya kadar sağdan ve soldan eşitlik kontrolü yapalım.
  4. Eğer karşılıklı rakamların tümü eşit ise, bu rakamlar palindrom demektir.

Palindrom ile ilgili algoritmayı oluşturduktan sonra yapmamız gereken şey, üç basamaklı sayılar arasında dönecek, bu sayıları çarpacak ve oluşacak sayıların palindrom olup olmadıklarını kontrol edecek bir döngü oluşturmak.

İki döngü içerisinde 100’den 999’a kadar olacak sayıları birbirleri ile çarptıralım. Eğer ürünler palindromik ise bunları bir listeye ekleyelim. Döngü sonlandığında listenin en büyük elemanını yazdıralım.

Akış Şeması:

Kod Dökümü:

def polindrom_test(sayi):  # polindrom olup olmadığını kontrol eder.
    # True ya da False.
    uzunluk = len(str(sayi))
    for i in range((uzunluk) // 2):
        if str(sayi)[i] == str(sayi)[-i - 1]:
            continue
        else:
            return False
    return True


def two_three_digits():  # 3 basamaklı iki sayının çarpımı olarak bulmak
    palindrome_list = []
    for a in range(100, 1000):
        for b in range(100, 1000):
            canditate = a * b
            if polindrom_test(canditate):
                palindrome_list.append(a * b)
            else:
                continue
    palindrome_list.sort()
    return palindrome_list[-1]


print(two_three_digits())