Şimdi Ara

Şu Algoritmanın Neresi Hatalı?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
31
Cevap
1
Favori
1.061
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • 1000 kişinin bir yuvarlak masada oturduğunu düşünün. 1. kişi yanındakini öldürüp bıçağı canlı kalan kişiye veriyor. O da aynı şeyi yapıyor. En sonunda masadaki kaçıncı kişi sağ kalır. Mesela, birinci kişi ikinciyi öldürüyor ve bıçağı üçüncü kişiye veriyor. Üçüncü kişi de dördüncüyü öldürüyor ve bıçağı beşinciye veriyor. Bunun çözümünü programlama ile çözmek istedim ve aşağıdaki mantığı kurdum ama anlamadığım bir nedenden ötürü hata veriyor.

    Kod:


    visitors = range(1, 1001)

    i = 1

    while(len(visitors) > 1):
    del visitors[i]
    i = i + 1

    print visitors





    Hata:



    Traceback (most recent call last):
    File "main.py", line 6, in <module>
    del visitors[i]
    IndexError: list assignment index out of range












  • Sorunu çözdüm galiba: 1000 tane elaman var kümemde. İlk başlarda "i = i + 1" çalışıyor çünkü sayılar küçük ama sayı büyüdükçe kümem küçülüyor. Sonra Index'e karşılık sayı gelmiyor. Misal i oldu 700 ama visitors[700] karşılık elaman yok.

     

    visitors = range(1, 1001)

    i = 1

    while(len(visitors) > 1):
    del visitors[i]
    i = (i + 1) % len(visitors)

    print visitors





    Bu şekilde çalıştı.
  • Bu algoritmayla neyi hedefliyorsun ? Nasıl bir liste oluşturmak istiyorsun ?
  • Cevabi buldugumu dusunuyorum konu disindaki konunuzuda attim cevap ama silinmesi ve sadece burayi takip edenlerde varsa diye burayada atiyorum

    Şu Algoritmanın Neresi Hatalı?



    < Bu mesaj bu kişi tarafından değiştirildi STR Priest -- 22 Temmuz 2018; 6:48:21 >
  • Eger herhangi bir anda, masada 2^n kadar insan varsa, o sirada bicagi elinde tutan kisi son kalan kimse olacaktir. Bu ipucu ile bakarsan algoritmaya loop yapmana gerek kalmaz, O(1) zamanda cozebilirsin.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • python 2 kullanıyorsun, onu kullanma artık bitti python 2. bu yazdığın şey python 3'te çalışmaz çünkü range nesnesi immutable oldu, del yapamazsın.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: seyfi84

    python 2 kullanıyorsun, onu kullanma artık bitti python 2. bu yazdığın şey python 3'te çalışmaz çünkü range nesnesi immutable oldu, del yapamazsın.
    Haklisiniz fakat yukarda yazdigim koda bakarsaniz ufak tricklerle onu atlatabilmek mumkun. Ama python3 candir
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • STR Priest kullanıcısına yanıt
    sana degil soru sorana cevap verdim, yoksa zaten ayni kisi misin?

    yaptigin seyin trick denecek bir tarafi yok, range nesnesini list yapiyorsun hepsi bu

    < Bu ileti mini sürüm kullanılarak atıldı >
  • masayı temsilen array[n] olsa. 1000 kişi varsa n = 999 olacak ; array 0 dan başlayacak. ilk turda tek sayı endeksler ikinci turda çift sayı böyle azalarak sonuçta en sondan bir önceki yani başlangıçta array[n-1] deki kişi kalır gibi yani döngü döndürmeye ve delete ile array elemanlarını silerek hesaplamaya gerek olmadan sonuç belli gibi.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Mephalay

    Eger herhangi bir anda, masada 2^n kadar insan varsa, o sirada bicagi elinde tutan kisi son kalan kimse olacaktir. Bu ipucu ile bakarsan algoritmaya loop yapmana gerek kalmaz, O(1) zamanda cozebilirsin.
    Mephalay hocamın dediği gibi boşu boşuna döngü kurmanın anlamı yok.
    İnternette araştırın, bu tür sorulara matematikçiler çok zekice çözümler üretmişler.
    Başlangıç içinhttps://www.geeksforgeeks.org/puzzle-100-people-in-a-circle-with-gun-puzzle/.




  • quote:

    Orijinalden alıntı: Guest-D639AD061

    Mephalay hocamın dediği gibi boşu boşuna döngü kurmanın anlamı yok.
    İnternette araştırın, bu tür sorulara matematikçiler çok zekice çözümler üretmişler.
    Başlangıç içinhttps://www.geeksforgeeks.org/puzzle-100-people-in-a-circle-with-gun-puzzle/.

    Alıntıları Göster
    Bu sonuca nasıl ulaştınız? Sıfırdan kendiniz mi düşündünüz? Çünkü bunu düşünmek kolay değil. GeekforGeek'te kanıtı yok. Direkt formül vermiş.




  • quote:

    Orijinalden alıntı: AI Engineer

    Bu sonuca nasıl ulaştınız? Sıfırdan kendiniz mi düşündünüz? Çünkü bunu düşünmek kolay değil. GeekforGeek'te kanıtı yok. Direkt formül vermiş.

    Alıntıları Göster
    Hayır ben bulmadım, araştırabilmeniz için linki vermiştim, sorunun orijinal adı Josephus problem.
    Şuradan okuyabilirsiniz, hızlıca göz gezdirdim, güzel anlatmış gibi göründü.
    Vazgeçtim o siteye bir daha baktım, ama Ali Nesin'in çözümü daha güzel.https://matematikkoyu.org/docs/sayma.pdf buradan josephus diye aratın bu daha iyi.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-D639AD061 -- 23 Temmuz 2018; 22:21:53 >




  • Verdiğin linkten sonra probleme şimdi yeniden baktım. Kod yazmadan sadece matematik formul ile de bulunabilir belki fakat kodla çözünce sonuç garanti. Nitekimhttps://rosettacode.org/wiki/Josephus_problem#Perl 'da bu problemin Perl ile çözümünü buldum, kodu biraz sadeleştirerek ve Türkçe yorum ekleyerek yazdım. 0 .. 999 arası endeksli 1000 kişi içinde endeksi 976 olan kişi hayatta kaldı.

    Şu Algoritmanın Neresi Hatalı?

    < Bu ileti mini sürüm kullanılarak atıldı >




  • Cevap 977. kişi olmalı ama.

    Edit: Endeks demişsin pardon.



    < Bu mesaj bu kişi tarafından değiştirildi AI Engineer -- 24 Temmuz 2018; 1:23:28 >
  • AI Engineer kullanıcısına yanıt
    Rosettacode.org 'a baktın mı? Python ile masadan gidenlerin tek tek listesini vererek çözmüş. endeks 0 dan başladığı için onda da 976. endeks kalıyor

    Şu Algoritmanın Neresi Hatalı?

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Hayır bin kişisiniz zaten, tükürseniz boğarsınız karşınızdakileri, niye birbirinizi öldürüyonuz demi
  • Problemin adı Josephus Circle matematik veya programlama ile çözülebilir.Adım adım çözen bir program yazmıştım ama java ile.İstersen koyayım.
  • Glitch G kullanıcısına yanıt
    Rosetta.org 'a baktın mı?http://rosettacode.org/wiki/Josephus_problem#Java 'da Java çözümünü de yazmışlar cunku her bir dilde çözümünü yazmışlar. (linki tıklayınca DH Forum kampanya linki eklediği için # etiketinden dolayı açmayabilir; DH linkini silerek açın)

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Ben ödev icabi circular linked list ile yazmistim.Bir de insan sayisini ve kac kisi araliklarla oldurcegini input aliyor.Ordakinden biraz farkli yani.Arkadas farkli bir algoritma ister belki diye yazdim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.