from random import randint
class Tarti:
def __init__(self):
self.sozluk = {}
self.tartma_sayisi = 0
def generate(self):
agirliklar = []
top_numarasi = 1
for n in range(15):
while True:
agirlik = randint(1, 100)
if agirlik not in agirliklar:
agirliklar.append(agirlik)
break
self.sozluk.update({top_numarasi: agirlik})
top_numarasi += 1
return self.sozluk
def tart(self, x, y, z):
if x != y != z:
self.tartma_sayisi += 1
return sum((self.sozluk[numara] for numara in (x, y, z)))
else:
raise ValueError("Sadece 3 'farklı' top tartılabilir!")
# top numaralarının daima 1'den 15'e kadar olduğunu düşünelim.
def cozum(self):
yerel_sozluk = {1: 0}
ilk_top_agirligi1 = self.tart(1, 2, 3)
ilk_top_agirligi2 = self.tart(1, 4, 5)
for numara in range(4, 16):
yerel_sozluk.update({numara: self.tart(numara, 2, 3) - ilk_top_agirligi1})
for numara in range(2, 4):
yerel_sozluk.update({numara: self.tart(numara, 4, 5) - ilk_top_agirligi2})
_ = {k: v for k, v in sorted(yerel_sozluk.items(), key=lambda item: item[1])}.keys()
return _
generate()
fonksiyonu ile self.sozluk içerisinde {numara: agirlik}
olacak şekilde 15 tane top oluşturuyoruz.
tart()
fonksiyonu parametre olarak 3 ‘farklı’ top kabul ediyor. Sonrasında self.sozluk’teki verilere göre bu 3 topun ağırlığını return ediyor.
-
cozum()
fonksiyonu içerisinde her bir topun, 1 numaralı toptan ne kadar ağır veya ne kadar hafif olduğunu hesaplayarak yerel bir sözlüğe atıyoruz.
-
Bunu yaparken de tart() fonksiyonuna parametre olarak gönderdiğimiz 3 topun 2’sini aynı tutuyoruz. Mesela tart(5, 2, 3) - tart(1, 2, 3)
bize 5’in 1’e göre ağırlığı hakkında bilgi veriyor.
-
2 ve 3’ü de başka bir döngü içerisinde hesaplıyoruz. Bir önceki mantık ile hareket edip tart(2, 4, 5) - tart(1, 4, 5)
yaparak onların da 1’e göre ağırlıklarını hesaplıyoruz.
-
En sonda ise sözlüğü, değerlerine göre ‘sort
’ ederek, 'key
'lerini return ediyoruz.
*Not: yerel_sozluk = {1: 0} olma nedeni, diğer tüm topların ağırlığını 1’e göre bulmuş olmamızdır. Yani ‘merkez kabul etmiş olduğumuz için’ de diyebiliriz.
T = Tarti()
print(f"Sözlük: {T.generate()}")
print(f"Çözüm: {T.cozum()}")
print(f"Toplam tartma sayısı: {T.tartma_sayisi}")
Sözlük: {1: 3, 2: 26, 3: 82, 4: 17, 5: 16, 6: 53, 7: 13, 8: 93, 9: 40, 10: 20, 11: 91, 12: 77, 13: 71, 14: 58, 15: 43}
Çözüm: dict_keys([1, 7, 5, 4, 10, 2, 9, 15, 6, 14, 13, 12, 3, 11, 8])
Toplam tartma sayısı: 16
Sözlük: {1: 37, 2: 69, 3: 70, 4: 84, 5: 35, 6: 38, 7: 96, 8: 27, 9: 41, 10: 47, 11: 63, 12: 97, 13: 4, 14: 100, 15: 46}
Çözüm: dict_keys([13, 8, 5, 1, 6, 9, 15, 10, 11, 2, 3, 4, 7, 12, 14])
Toplam tartma sayısı: 16
Sözlük: {1: 89, 2: 29, 3: 55, 4: 71, 5: 33, 6: 18, 7: 10, 8: 62, 9: 52, 10: 79, 11: 75, 12: 99, 13: 38, 14: 85, 15: 56}
Çözüm: dict_keys([7, 6, 2, 5, 13, 9, 3, 15, 8, 4, 11, 10, 14, 1, 12])
Toplam tartma sayısı: 16
Edit: Çözüm yolu yanlış.