Autorské riešenie
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: 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.
;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. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |