Çözmeye çalıştığım soruda tüm inputları karşılayamıyorum yardım

Selamlar. Aşağıya soruyu yazacağım. Sorunum şu şekilde. Ben aşağıdaki 2 soruyu yaklaşık 3 gündür çözmeye çalışıyorum. Soru çok basit ama hackerearth sisteminde birden fazla girişle soruyu test ettiği için kısmi çözüldü veriyor. 405. sorudayım ve şu ana kadar hiç kısmi bırakmadım o yüzden bunu da öyle bırakmak istemiyorum. Chatgpt falan çözüm verecektir ama açıklamasını genelde düzgün yapmıyor. O yüzden benden bilgili olan arkadaşlarım sizden ricam neyi neden yaptığınızı anlatarak ve yine aşağıda verdiğim kodları düzelterek bana yardımcı olur musunuz? Biraz daha bu iki soruda uğraşırsam kafayı yiyeceğim çünkü :slight_smile:
Test sayfalarının Zaman aşımı hatası aldığım Kateli olan soru. Diğerinde zaman sınırı 5 saniye olduğu için almıyorum ama onda da sadece 1 testte doğru cevap alıyorum. Bu kodları ne kadar değiştirirsem değiştireyim Runtime Errordan başka değişiklik olmadı.




image

Şimdiden çok teşekkür ediyorum. İyi günler,İyi çalışmalar diliyorum

Sorular sizden ne istiyor ,resimde yazıyor ama ingilizce 0 image to text sitesine atıp gelen sonucu çevirmeye de üşeniyorum. Birde denediğiniz kodlarıda atabilir misiniz.

  1. Kate bir büyücüdür. Şimdi sınavı geçmelidir.

Sınav sırasında N kez sihirli odaya girmesi gerekmektedir. Başlangıçta odada X sihirli nesne bulunmaktadır. Her ziyaretinden önce, odadaki sihirli nesne sayısını azaltmak için sihir kullanabilir. Her bir nesne için 1 mana puanı harcar. Her ziyaretten sonra, sihirli nesne sayısı 2 kat artar. Odada L’den fazla sihirli nesne olduğunda içeri giremez. Kate’in sınavı geçmek için minimum kaç mana puana ihtiyacı vardır?

Birkaç test durumu için bu problemi çözmeniz gerekiyor.

Giriş:
Girişin ilk satırında tek bir tamsayı (1<=T <=10**5) bulunur - test durumu sayısı.

Ardından T satırı takip eder. Bu satırların her biri üç tamsayı içerir: Xi, Li, Ni (0<= Xi,Li,Ni,<= 10**18)

Çıktı:
T satırı yazdırın.

Onlardan her biri, i-th test durumunda sınavı geçmek için gereken minimum mana puanı içermelidir.

Örnek Giriş:
2
2 5 3
6 5 0
Örnek Giriş için Çıktı:
1
0

Benim Yazdığım ve en doğru kod: (Ekran görüntüsündekinden farklı bu kod. Yeniden düzenledim)

def calculate_mana_points(X, L, N):
    left = 0
    right = X

    while right - left > 1:
        mid = (left + right) // 2

        if calculate_cost(X, L, N, mid) < calculate_cost(X, L, N, mid + 1):
            right = mid
        else:
            left = mid + 1

    return calculate_cost(X, L, N, left)


def calculate_cost(current_X, L, N, destroyed_items):
    if current_X <= L:
        return 0

    if N == 0 or destroyed_items == 0:
        return float('inf')

    half_items = current_X // 2

    if half_items < L:
        return destroyed_items + calculate_cost(half_items, L, N - 1, destroyed_items * 2)

    cost1 = destroyed_items + calculate_cost(half_items, L, N - 1, destroyed_items * 2)
    cost2 = destroyed_items + calculate_cost(half_items + 1, L, N - 1, destroyed_items * 2)

    if cost1 == float('inf') and cost2 == float('inf'):
        return float('inf')
    elif cost1 == float('inf'):
        return cost2
    elif cost2 == float('inf'):
        return cost1
    else:
        return min(cost1, cost2)


# Read number of test cases
T = int(input())

test_cases = []

# Read test cases
for _ in range(T):
    X, L, N = map(int, input().split())
    test_cases.append((X, L, N))

# Solve the problem for each test case
for test_case in test_cases:
    X, L, N = test_case
    min_mana_points = calculate_mana_points(X, L, N)
    print(int(min_mana_points))

Buradan aldığım hata da şu şekilde:

Error Loglar da tek çeşit ve şu şekilde:
“Exception Name: OverflowError
Exception Message: cannot convert float infinity to integer
Exception Line number: 55
53 X, L, N = test_case
54 min_mana_points = calculate_mana_points(X, L, N)
55 print(int(min_mana_points))”

Hiçbir şekilde çözemedim :frowning:

Linki atabilir misiniz bulamadım ben.

Bahsettiğim sorunun linkini söylüyorsanız:
The exam | Practice Problems (hackerearth.com)

Jack ile olan soruyu şu anlık kenara bıraktım linkini attığım soruda ilerleme kaydettiğimi düşünüyorum. Bunu çözüp diğerine geçeceğim.

Soru feci:

  1. Kate’in sinavi gecme kriteri nedir?
  2. “the number of magic items increases by 2 times” ne demek? X *= 3? X *= 2? X += 2?

Bu arada: Soru Sorarken Sıkça Düşülen Hatalar #4

Yani, ne anlatmaya çalışıyorsunuz?
Ekran görüntüsünde sorunun tamamı var. İngilizce seviyenize bağlı olarak yorumlayabilirsiniz. Az buçuk yazılım bilenlerin olduğu bu forumda dolayısıyla ingilizce seviyesi de yüksektir diye düşünüyorum.

  1. Gayet hoş bir şekilde soruda yazıyor kate ile alakalı olan 3. ekran görüntüsünü inceleyebilirsiniz. Sorunun direkt kendisini sorduğunuz için net cevap veremiyorum.
  2. “2 times” ifadesi türkçede 2 defa olarak çevrilir ve x*2 şeklinde yorumlanır. Bu da ufak ders niteliğinde olsun.

Üstüne bir de Soru Sorarken Sıkça Düşülen Hatalar diye “Soru sormamış olabilirsiniz” gibi saçma bir alt başlığı dahi olan kendi makalenizi paylaşmışsınız. Kendiniz linki paylaşmışken yan sekmeden açıp benim sorum ile karşılaştırabilirsiniz. Eksik listesi isterim ama.
Kalitenizi bu kadar düşürmeyin :slight_smile:

Tek tek yazayim:

Sorunun kotu yazilmis oldugunu.

“Kate sinavi gecmelidir” diye baslayan soruda sinavi gecmenin ne oldugunun yazmadigini.

Ifadenin acik olmadigini. “Iki kati kadar artar,” yani “uc katina cikar” anlamina geliyor olmasi muhtemel.

#4 numarali hataya dusuldugunu, yani “kodun veya baska yazilarin resim olarak paylasildigini” ve yazi olarak paylasilmalarinin gerektigini.

↑↑↑ Bunlari anlatmaya calisiyorum.


Evet, ama ekran goruntusu olarak. Yazi boyutunu buyutemiyorum, ekran cozunurlugume gore akmasini saglayamiyorum.

“increases by N” ifadesi “N kadar artar” olarak cevrilir ve X + N seklinde yorumlanir. Iki katina cikan bir sey icin Turkcede olmayan “doubles” ifadesi kullanilabilir. Bunlari da ekleyelim ufak derse.

Forumda biraz vakit gecirirseniz sadece koddan ibaret basliklara denk gelebilir, bu maddeyi neden ekledigimi anlayabilirsiniz.

Yukarida yazdim: #4
Gerisi varsa bile onemli degil.

Merhaba,

Sitenin sunduğu testleri geçebiliyor mu emin değilim ama aşağıdaki gibi bir algoritma düşündüm.

def minimum_mana(x: int, l: int, n: int, m=0):
    if n <= 0:  # Eğer n, 0'a eşit veya 0'dan küçükse
        return m  # m=0 döner
    x_copy = x  # x'in kopyasını alalım.
    for i in range(n):  # Kate'in n kere ziyaret etmesi gerekiyor.
        x -= m  # Kate ziyaretini gerçekleştirmeden önce m kadar item'i yok eder.
        x *= 2  # Kalan itemler 2 katına çıkar.
    if x > l:  # Eğer x, l'den büyükse,
        return minimum_mana(x_copy, l, n, m + 1)  # m'in değeri 1 artırılarak minimum_mana fonksiyonu tekrar çağrılır.
    else:  # Eğer x, l'den küçükse,
        return m  # m'in değeri geri döndürülür.


print(minimum_mana(2, 5, 3))  # 1
print(minimum_mana(6, 5, 0))  # 0

1 Beğeni

Siz de yapabilirsiniz;

Sıradışı Durum Adı: Taşma hatası.

Sıradışı durum mesajı: infinity float integer’a çevrilemez.

Sıradışı durum Satır numarası 55.

Yan float(‘inf’) tanımlarınızı değiştirin.

Yada 55. Satırdaki int() çevrimizi kaldırın.

Sonsuz ondalıklı sayı tanımızı integer a çevirirken kırpma hatalarından dolayı sizi uyarıyor.

Infinity (inf) in Python | note.nkmk.me

Algoritmanıza bakmadım, kendi aranızda çözersiniz.

Çevirmenlik amme hizmetiniz için teşekkürler. Çevirebilecek seviyede ingilizcem var. Kendim yapmaya çalıştığımı belirttim. Hala daha diğer arkadaşla beraber kalitesizliğinizi belirtme ihtiyacı neden duyuyorsunuz? İngilizce çevirmenlik yapınca bir yerleriniz mi kalkıyor? Bir de çeviriden bakarak olmaz o iş. Yanlış adamla uğraşıyorsunuz. Hoş olmayacak.

Teşekkürler hocam. Özellikle düzgün cevap verdiğiniz için.
Girişi sitenin kendi yapması isteniyor. Mantıklı geldi algoritma. Biraz üzerinde oynayıp haber vereceğim.

Tamam yeteri kadar boşunuzu yaptınız. Başka başlıklarla uğraşmaya gidebilirsiniz. Ha sorumla alakalı hala daha cevap bekliyorum boş muhabbet yapacağınıza bir şeyden anlıyorsanız hala daha yardımınızı beklerim.

Ne demek? Ne zaman lazım olursa çekinme gel.

Çevirebilseydin. Hata koduna göre düzeltirdin kodunu.

Kalite kontrol uzmanı mısın? Kaliten olsa adam gibi sorar adam gibi cevap verir adam gibi cevaplarını alırdın. Adamına göre muamele var burada kendine neden bu muamele yapılıyor diye düşünebilecek kaliteye ulaşınca topla gel.

Senden alıntı yaptığımdan anlasaydın bununla uğraşmaz millete ingilizce lafı sokuşturmasan hiç de işim olmazdı.

O zaman bir de linktekinin ingilzcesini bırakayım.

Convert to other types
Normally, float can be converted to int with int(), but inf cannot be converted to int.

# print(int(f_inf))
# OverflowError: cannot convert float infinity to integer

Sen kendini ne kadar önemsedin öyle?! Çok ta fifi. Basit bir inf float, int çevriminin ne olduğunu bilmeyen bilmediğine utanmayan, verilen linki okumayan biri olarak özgüvenine hayran oldum.

Ağzın dışında arada kafan çalışsın.

Tabi, Tabii.

Kardeşim anlama konusunda sıkıntın mı var. YAPAMADIM diyorum. Anlatamıyor muyum? Bu forum neden var? Yapamadığımı attım düzgünce yardım istemek için.

Adam gibi sorduk sizden adam gibi cevap gelseydi az da adam olsaydınız ona göre ben de muamele yapardım zaten. Sizin gibi tipler belli ediyor kendini. Kalite kontrol uzmanı olmaya gerek yok. Sorduğum sorudan bir bok anlamamışsın gelmişsin kendini tatmin etmek için ingilizce çevirmenlik yapıyorsun. Senin işin yok kardeşim böyle yerlerde hayde sokağına.

Chatgpt mi yazdı çeviri mi :smiley:

Hatanın ne olduğunu biliyorum. Velev ki bilmiyorum ki zaten yeni öğreniyorum bilmediğime de gram utanmıyorum. Utanması gereken kişi daha çok kendisini belli ediyor.
Madem YAPAMADIM kelimesini anlamıyorsunuz, ingilizce konusunda şov yapmak istiyorsunuz ve çeviriyi de malum aktif kullanıyorsunuz o zaman şöyle fransızcasından anlatayım:
Je suis quelqu’un qui etudie le genie logiciel par curiosite et souhaite redefinir ma carriere dans cette voie. Lorsque j’ai des problemes lors de la phase d’apprentissage, n’ayant pas de soutien pour poser ma question, j’ecris sur un forum. J’attendais une reponse adequate. Si vous ne savez pas, occupez vous de vos affaires et ne vous embêtez pas avec moi.

Benim kafam da çalışıyor sen dert etme :slight_smile:

@semtex
Buyur adam gibi soru sormamı istemişsin. 2 gün önce adam gibi link isteyen arkadaşa hem çevirisini hem yazdığım kodları hem de hataları attım. Hataların detayı istenirse atabilirim. Ha adam gibi isteme konusunun tekrar üstüne basalım senin gibileri çok kolay anlamıyor.

Kardeşin değilim, sen paçalı donla gezerken bu işleri yapıyorduk biz. Yapamadım dediğin, engelli misin, sana güzelce anlattık, aldığın hata çevirmemen gereken bir int çevirimi. Ona buna laf sokacağına oturup derdini anlatsan yardım alırdın düzgünce.

Sana neden yapamıyorsun neden soruyorsun diyen yok.

Yazmışsın adama. Ben de bunu diyen delikanlının kendi ingilizcesi yok mu neden hata mesajını okuyamadın kendin diye sordum.

Hatanın ne olduğunu bilip yapamamak bilmemek değildir. Anlamamaktır. Anlamaya çaba sarfetsen. Çözülür. Ne kadlı bir kodu düzeltip yazmadığımız kalmış böyle öğrenirim sanıyorsan aynen bu kafayla devam et.

İstediğin dilde yaz, sorunu olan ve çözüme ihtiyacı olan sensin ben değil.

Kafan çalışsa çoktan yapamadığını, burada sorarak yapar hale gelmiştin. Geçmiş olsun.

Sen anlama güçlüğü falan mı çekiyorsun.

Hatanın çözümünü söyledik.

  1. satırda print ile yazdırırken int çevrimi yapma hepsi bu.

Bak burada tek satırda anlatmışım.

Aldığın hatayı sebebini çözümünü yazmışız hala millete bıdı bıdı ediyorsun. Çözümün çözüm olduğunu anlayamaz durumdayken uğraştığımızda değecek kalite de olduğuna ikna oldum emin ol.

Allah allah daha ingilizceyi dün öğrenmiş adamsın paçalı don mu bilirdin :smiley:
Derdim en baştan belliydi boka konan sinek gibi laf yetiştiricem diye atmayıp düzgünce şurası şurası yanlış olmuş düzgünce anlatır mısın deseydiniz zaten şuan vakit öldürmeye bile gerek kalmayacaktı da. Ne fayda anlatamayız.

Sen bana direkt bunu yazsaydın canımı ye. Düzgünce söylemişsin iste. Bu kadar uğraşmadan bunu daha az alaycı şekilde yazsaydın en başta ben sana zaten “Hata mesajını anladım, hataya göre de düzenlememi anladığım kadarıyla yaptım birkaç kez denememe rağmen hala aynı hatayı alıyorum. O gün itibariyla 4 bugün itibariyle yaklaşık 6 gündür aynı soruyla uğraştığım için daha fazla uğraşamıyorum artık. Desteğe ihtiyacım var.” derdim konu kapanırdı. Ama benim tepkim sizin ve diğer arkadaşın alaycı ve bir şey anlamadan atlama tavrınız.

hatanın ne olduğunu bilmek ingilizce, hatanın ne olduğunu bilip yapamamak python. 2 farklı dil sanki? Boş konuşmaya başladınız. Ben bu arada kimseden direkt kodu istemedim. İsteseydim kendi kodumu atmazdım.

Hahahhah emin misin. Benim sorum çözülür de sizin sorununuz zor be :smiley:

Daha uğraşmadım sizinle eğlenerek vakit kaybediyordum :slight_smile: