Pingpong: rozwiązanie zagadki

https://xpil.eu/y5p

Drugą grę przegrał Adam.

Wszystkich gier było (10+15+17)/2=21

Zauważmy, że nie da się przegrać dwóch gier pod rząd; nie da się też zagrać mniej niż 10 razy. Jedyny sposób, żeby zagrać 10 razy to zagrać w drugiej grze i ją przegrać, potem w czwartej, szóstej, ósmej, dziesiątej i tak dalej aż do 20.

1Pierwszy zagadkę rozwiązał Cichy:

Gier było 21, a z reguł wynika, że każdy musiał grać przynajmniej w co drugiej - skoro zatem Adam zagrał tylko 10 razy, to musiał grać tylko w parzystych meczach, wszystkie przegrywając.

2Zaraz potem poprawną odpowiedź nadesłał Canthar:

Łącznie meczy było 21. Z tego wynika, że Adam grając tylko 10 meczy zagrał najmniejszą możliwą ilość, czyli przegrał wszystkie mecze o parzystych numerach. Przegrał więc drugą grę.

3Potem przyszło rozwiązanie Waldka. Od dupy strony, ale jak najbardziej poprawne:

Było 21 gier. Adam pauzował 11 razy w nieparzystych grach, więc pauzował też w trzeciej grze. Czyli przegrał w drugiej.

4Jako czwarty poprawne rozwiązanie nadesłał Tywan, który nawet napisał sobie kawałek kodu w Ruby (zapraszam do podzielenia się kodem w komentarzu):

Wszystkich gier musiało być (10+15+17)/2=21. A zatem Adam musiał wszystkie przegrać, a w dodatku nie uczestniczyć w pierwszej grze (musiałby wtedy grać w ostatniej a więc jedenasty raz). Wynika z tego, że zagrał w drugiej grze (oraz wszystkich parzystych) i ją przegrał.
Potwierdza to krótka symulacja w Ruby, jest 420 możliwych wyników gier prowadzących do podanego rozstrzygnięcia, Adam zawsze przegrywa w drugiej grze.

5Bardziej w temat wgryzł się piąty rozwiązujący (Rozie), który nie tylko odpowiedział na postawione w zagadce pytanie, ale dodatkowo policzył ile partii rozegrali między sobą gracze w poszczególnych parach (tj. A-B, A-C, B-C):

42 wchodzących zawodników, czyli 21 gier. C grał 17 razy, więc 4 gry musiały być bez niego, czyli grali AB. Pozostaje 17 gier. Wiemy, że A grał 10 razy, czyli brakuje mu 6 gier i musiały być z C. Czyli AB - 4, AC - 6, BC - 11. Zwycięzca zostaje, więc jedyny sposób na ułożenie takiego ciągu to rozpoczęcie od BC i zakończenie na takiej parze, naprzemiennie wypełniając AC lub AB.
Wiemy więc, że 1 i 3 gra to było BC. Pomiędzy było AC lub AB, ale nie ma znaczenia, które. A musiał przegrać tę grę. Podobnie jak wszystkie inne swoje gry.

https://xpil.eu/y5p

1 Comment

  1. Prosta szybka wersja rekurencyjna. Kod w Ruby

    A, B, C = 10, 15, 17
    
    ALL = [:A, :B, :C]
    $result = []
    
    # a, b, c - ilosc gier dotad
    # play - para graczy, pierwszy to zwyciezca
    # stk - dotchczasowe gry
    def graj(a, b, c, play, stk)
        stk.push(play)
        a += 1 if play.include?(:A)
        b += 1 if play.include?(:B)
        c += 1 if play.include?(:C)
        if a==A and b==B and c==C
            # mamy wynik
            $result << stk.map{|x,y| "#{x}#{y} "}.join(" ")
        elsif a<=A and b<=B and c<=C
            # dwie gry z obecnym zwyciezca
            play = [play.first] + (ALL-play)
            graj(a,b,c,play,stk)
            graj(a,b,c,play.reverse,stk)
        else
            # nie spelnia warunkow
        end
        stk.pop
    end
    
    ALL.permutation(2).each do |play|
        graj(0,0,0,play,[])
    end
    
    puts $result
    puts $result.size
    

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.