Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 1 / 2 = 50%

  • Úspešnosť riešenia: 6 / 6 = 100%

Pri riešení využijeme pomocné procedúry generujKolo a preusporiadajTimy. GenerujKolo vygeneruje kolo podľa aktuálneho zoznamu tímov (prvý v zozname s posledným v zozname, druhý v zozname s predposledným v zozname atď.). PreusporiadajTimy urobí to, že tím s posledného miesta zoznamu sa presunie na druhé miest, čím sa ostatné tímy posunú o jedno miesto v zozname ďalej.

Ak počet tímov v turnaji je n, tak celkový počet zápasov, ktoré sa majú odohrať určíme takto:
1. Každý tím musí odohrať zápas s každým ostatným súperom, teda každý tím odohrá n-1 zápasov.
2. Ak by sme zobrali počet zápasov n.(n-1) (počet tímov krát počet zápasov, ktoré každý tím odohrá), dostali by sme každú dvojicu tímov 2-krát
3. Počet zápasov turnaja teda bude n.(n-1)/2

S nepárnym počtom týmov sa generovanie kola bude robiť komplikovane. Použijeme teda takýto spôsob: Do zoznamu tímov si pridáme tím "voľno". Takto dostaneme párny počet tímov a môžme použiť procedúru generujKolo bez problémov.
Počet kôl bude (v prípade nepárneho počtu tímov až po pridaní tímu "voľno") n-1, lebo každý tím odohrá práve n-1 zápasov, v prípade nepárneho počtu tímov bude mať v jednom kole voľno.

;Imagine logo
viem generujKolo :timy :zapasy
  urobtu "i 1
  opakuj (počet :timy)/2 [
    urobtu "zapas []
    urobtu "zapas vložPo (prvok :i :timy) :zapas
    urobtu "zapas vložPo (prvok ((počet :timy)-:i+1) :timy) :zapas
    urobtu "zapasy vložPo :zapas :zapasy
    urobtu "i :i+1
    ]
  výsledok :zapasy
koniec

viem preusporiadajTimy :timy
  urobtu "prvy prvý :timy
  urobtu "timy bezPr :timy
  urobtu "posledny posledný :timy
  urobtu "timy bezPo :timy
  urobtu "timy vložPr :posledny :timy
  urobtu "timy vložPr :prvy :timy
  výsledok :timy
koniec

viem generujTurnaj :timy
  urobtu "zapasy []
  urobtu "i 1
  urobtu "pocetZapasov (počet :timy)*((počet :timy)-1)/2
  píš (slovo [počet zápasov: ] :pocetZapasov)
  ak zvyšok (počet :timy) 2<>0[urobtu "timy vložPo (slovo "voľno) :timy]
  opakuj ((počet :timy)-1)[
    urobtu "zapasy vložPo (slovo :i ". "kolo) :zapasy
    urobtu "zapasy generujKolo :timy :zapasy
    urobtu "timy preusporiadajTimy :timy
    urobtu "i :i+1
    ]
  píš :zapasy
koniec

 

Python
def generujKolo(timy):
    """
    vygenerujeme kolo podľa aktuálneho zoznamu tímov

    :param timy: zoznam tímov v turnaji
    :type timy: List
    """

    kolo = []
    for i in range(len(timy) // 2):
        kolo.append([timy[i], timy[len(timy) - i - 1]])
    return kolo

def preusporiadajTimy(timy):
    """
    presunieme tím s posledného miesta na druhé, čím sa tímy za ním posunú o miesto ďalej

    :param timy: zoznam tímov v turnaji
    :type timy: List
    """

    return [timy[0], timy[len(timy)-1]] + timy[1:len(timy)-1]

def generujTurnaj(timy):
    """
    vygeneruje turnaj na základe zoznamu timy

    :param timy: zoznam tímov v turnaji
    :type timy: List
    """

    #vytvoríme si prázdny zoznam, do ktorého budeme vkladať zápasy
    zapasy = []
    #overíme si paritu počtu tímov
    if (len(timy)%2!=0):
        timy.append('voľno')
    for i in range (len(timy) - 1):
        #pridáme oddeľovač kola aj s poradévým číslom, následne vygenerujeme kolo a preusporiadame tímy
        zapasy.append(str(i+1)+'. kolo')
        zapasy.append(generujKolo(timy))
        timy = preusporiadajTimy(timy)
    return(zapasy)

if __name__ == "__main__":
    timy = input("Zadaj nazvy timov oddelene ciarkou: ")
    timy = timy.split(",")
    print(generujTurnaj(timy))

Vaše zaujímavé riešenia a najčastejšie chyby

Bolo odovzdané len jediné riešenie. V ňom bol pekne odôvodnený počet zápasov pre každý tím. Riešenie bolo realizované iným spôsobom, keď bol vytvorený zoznam s číslami a pracovalo sa s týmto zoznamom. Výpis kôl a zápasov bol prehľadný, kde každé kolo bolo v inom riadku.