Seminární skupiny 03, 04, 05 a 06 - cvičící J. Plhák
RNDr. Jaromír Plhák, Ph.D.
Seminární skupiny 03, 04, 05 a 06 - cvičící J. Plhák
Info
Term
Autumn 2016
Chapter contains:
1
Study text
Teacher recommends to study from 19/9/2016 to 25/9/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 26/9/2016 to 2/10/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 3/10/2016 to 9/10/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 10/10/2016 to 16/10/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 17/10/2016 to 23/10/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 24/10/2016 to 30/10/2016.
Teacher recommends to study from 31/10/2016 to 6/11/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 7/11/2016 to 13/11/2016.
Teacher recommends to study from 14/11/2016 to 20/11/2016.
Teacher recommends to study from 21/11/2016 to 27/11/2016.
Chapter contains:
1
Study text
Teacher recommends to study from 28/11/2016 to 4/12/2016.
Teacher recommends to study from 5/12/2016 to 11/12/2016.
Chapter contains:
2
Image
1
Study Materials
1
Study text
Teacher recommends to study from 12/12/2016 to 18/12/2016.

Týden 1 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/01-zelvi_grafika.html
  • Příklady:
    • 1.1.1 Trojúhelník + Domeček
    • 1.1.2 Čtverec
    • 1.1.3. Obecný čtverec
    • 1.1.4. Obecný pětiúhelník
    • 1.1.5. N-nožka
    • 1.2.1. Mnohoúhelníky
    • 1.2.2. Hvězdy
    • 1.2.4. Spirála

Týden 2 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/02-zakladni_struktury.html
  • Příklady
    • 2.1.1. Sudá čísla
    • 2.1.3. Dělitelé
    • 2.3.1. Vyplněný čtverec
    • 2.3.2. Prázdný čtverec
    • 2.3.4. Šachovnice
    • 2.3.7. Diamant
  • K domácímu dodělání:
    • 2.2.1. Násobilka
  • Pep8 - Style Guide for Python Code
    • https://www.python.org/dev/peps/pep-0008
Domácí úkol - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící J. Plhák)
Naprogramujte 5 funkcí:
    • Výpis všech lichých dělitelů čísla N.
    • Výpis všech čísel "tribonacciho" posloupnosti
      • = součet tří předchozích čísel v řadě
      • začínáme 0, 1, 1
      • http://mathworld.wolfram.com/TribonacciNumber.html
    • Výpis tabulky zbytek po dělení
      • Příklad 2.2.5 ve sbírce
    • Prázdný pyramida
      • Pyramida, která má obrysy vytvořeny ze znaku ''#' a vnitřní část je vykreslena pomocí znaku '.'
    • Kytky
      • Příklad 1.2.6 ve sbírce
  • Odevzdejte
    • Jeden soubor
    • Do odevzdávárny v ISu
    • Do 6. 10. 2016 23:59

Týden 3 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/03-jednoduche_vypocty.html
  • Příklady:
    • 3.1.1 / 3.1.2 Faktoriál
    • 3.2.2. Počet dělitelů
    • 3.2.3. Je prvočíslo
    • 3.2.5. k-té prvočíslo
    • 3.2.6. Prvních k prvočísel
    • Bonus:
      • 3.2.7. Prvních k prvočíselných dvojčat
      • 3.2.8. Rozklad na prvočísla
      • 3.4.1. Převod z desítkové soustavy do dvojkové
      • 3.4.2. Převod z dvojkové soustavy do desítkové

Týden 4 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/04-nahodna_cisla.html
  • Příklady:
    • 4.1.1. Šestiboká kostka
    • 4.1.2. Dokud padá sudé číslo
    • 4.1.3. Statistiky
    • 4.2.1. Opilec na cestě domů
    • 4.2.2. Analýza opilce
    • Bonus:
      • 4.2.3. Hledač pokladů - 4.2.8. Náhodné pexeso
Domácí úkol - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící Jaromír Plhák)
EDIT: 17. 10. 2016 - 9:55

Člověče nezlob se​
  • Úkol 1: Vytvořte simulátor zjednodušené hry "Člověče nezlob se"
  • Úkol 2: Vytvořte funkci, který analyzuje jaká je průměrná délka (vrátí typ float) hry pro zadaný počet polí a počet her.
  • Úkol 3: Pomocí funkce z úkolu 2 zjistěte průměrné délky her pro plány o velikostech 1-50 (do řešení přiložte/zkopírujte výpis zjištěné délky vypisujte jednu po druhé pro zadanou velikost).
Pravidla
  • Hraje se na hracím plánu o n polích.
  • Figurka začíná na jedné straně hracího plánu na pozici 1.
  • Háže se kostkou (1-6)
  • Když padne 6, hází se znovu (i opakovaně)
  • Pokud padne 5, hází hráč ještě jednou (ale již nelze vícekrát, i kdyby padlo 5 nebo 6).
  • Figurka se posunuje o součet hodnot z kostek, zůstává stát ocitla-li by se za cílem.
  • Hra končí když figurka dorazí na poslední pole.

Poznámky:

  • Při délce hracího plánu < 1 skončete funkci a vypište nějakou smysluplnou hlášku.
  • Figurka se posunuje buď o celkový součet hodů na kostkách, nebo vůbec (v situacích, kdy by přešla domeček).
Kostra:
from random import randint, random

def game(length, output=True):
    pass

def game_analysis(length, count):
    pass

def game_average_length(count):
    pass

Ukázkový výpis programu:
>>> game(35)
1. round: 3 -> New position: 4
2. round: 4 -> New position: 8
3. round: 6 6 1 -> New position: 21
4. round: 5 6 -> New position: 32
5. round: 4 -> New position: 32
6.
round: 3 -> New position: 35
Game ended in 6. round.
>>> game_average_length(20):
Plan with length: 1  ->  0.0
Plan with length: 2  ->  6.35
Plan with length: 3  ->  3.3
Plan with length: 4  ->  7.45
Plan with length: 5  ->  6.05
Plan with length: 6  ->  8.3
Plan with length: 7  ->  7.95
Plan with length: 8  ->  6.15
Plan with length: 9  ->  6.95
Plan with length: 10  ->  6.1
Plan with length: 11  ->  5.95
Plan with length: 12  ->  8.7
Plan with length: 13  ->  8.3
...


Odevzdávání:
  • Nezapomeňte zkontrolovat kód pomocí pep8
  • Odevzdejte
    • Jeden .py soubor
    • Do odevzdávárny v ISu - zvolte svouji skupinu a využijte složku "Úloha 2"
    • Do 20. 10. 2016 23:59

Týden 5 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/05-retezce_a_seznamy.html
  • Příklady:
    • 5.1.1 Součet, maximum a hledání
    • 5.1.2 Součin nenulových čísel
    • 5.1.3 Modifikace vs. vytváření nového seznamu
    • 5.1.4 Zploštění
    • 5.2.1 Prokládání textu textem
    • 5.2.3 Pozpátku
    • 5.2.5 Počet A
    • 5.2.6 Znaky na stejných pozicích
    • 5.2.8 Palindrom

Týden 6 - Seminární skupiny 03, 04, 05 a 06

  • http://www.fi.muni.cz/IB111/sbirka/06-binarni_vyhledavani.html
  • Příklady:
    • 6.1.1 Hádání čísla člověkem 
    • 6.1.2 Hádání čísla počítačem
    • 6.2.1 Binární vyhledávání
Domácí úkol 3 - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící Jaromír Plhák)
EDIT: 26. 10. 10:47

 
  • Třetí domácí úloha se řeší skrze systém HackerRank: https://www.hackerrank.com
  • V tomto systému řešíte úlohy přímo v prohlížeči, systém obsahuje automatické testování (ihned kontroluje, zda máte úlohu vyřešenu správně).
  • Bodování: Za každou vyřešenou úlohu 1 bod, max. 15 bodů, počítají se pouze úlohy z "Domain Python", nepočítají se úlohy ze "Subdomain Introduction"
  • Doporučení: Soustřeďte se především na úlohy z části Strings.
  • Kontrola proběhne tak, že na příštím cvičení ukážete seznam svých řešení (login vpravo nahoře -> subsmissions) a já s vámi projdu řešení vybraných úloh.
  • Řešte samostatně! V případě, že namátková kontrola ukáže, že nerozumíte zadání některé "vyřešené" úlohy nebo detailům "svého" řešení (systém je ukládá a umožňuje je zpětně zobrazit), bude to interpretováno jako opisování.
  • Úloha vyžaduje zorientovat se v netriviálním systému, porozumět anglicky psaným zadáním, občas i doučit se příkazy nad rámec toho, co bylo na přednášce a cvičení. Tyto aspekty jsou běžnou součástí "programátorského života" a jsou chápány jako záměrná součást domácí úlohy.
Odevzdání:
  • Do odevzdávárny odevzdejte textový soubor se seznamem vyřešených úloh ve formátu <Subdomain> - <Challenge> (tj. například String -  sWAP cASE).
  • Deadline 31. 10. v 7:30 ráno.
  • Poznámka: Je nutné odevzdat do deadlinu i pokud nebudete přítomni na pondělním semináři (kontrolu provedu v následujícím semináři - v hackerrank se ukládá čas odevzdání řešení).
Odevzdávárny:
  • Skupina 3 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131781/65131798
  • Skupina 4 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131783/65131812
  • Skupina 5 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131786/65131827
  • Skupina 6 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131787/65131848
Bonus:
- V případě, že odevzdáte 3 úkoly obtížnosti hard a alespoň 7 úkolů obtížnosti medium, můžete získat až 5 bonusových bodů
- Bonusové body mohou být kráceny v případě neefektivního či nepřehledného kódu
- Do textového soubory prosím viditelně označte, že splňujete podmínky bonusového zadání a úkoly obtížnosti hard/medium nějak poznačte (například hvězdičkou)
- Upozorňuji, že úkoly s nárokem na bonus budu kontrolovat detailněji

Týden 7

Týden 8

Domácí úkol 4 - Padající piškvorky - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící Jaromír Plhák)

Popis: Vytvořte program hrající hru "Padající piškvorky" proti uživateli (na plánu zadané velikosti). Tato variace piškvorek se hraje na dvourozměrném hracím plánu. Hra je podobná klasickým piškvorkám s tím rozdílem, že pokud jste na tahu, nevolíte konkrétní čtvereček, do kterého byste umístili svůj symbol, ale sloupec. Symbol v daném sloupci spadne dolů (nejvíce, co to jde). Vyhrává ten, kdo poskládá 4 své symboly v řadě, sloupci nebo diagonále.

Zadání:
Vaším úkolem je implementovat:
- Funkci show_state(state), která vypíše daný plán na standardní výstup. Plán je reprezentován seznamem seznamů stejné délky, které obsahují znaky X (křížek), O (kolečko) nebo mezera pro neobsazené pole.
>>> state = [[' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', 'O'], [' ', ' ', ' ', ' ', 'X'], [' ', 'O', ' ', ' ', 'X']]
>>> show_state(state)
   
        O
        X
  O     X
- - - - -
0 1 2 3 4
- Funkci strategy(state, symbol), která pro daný plán a symbol vrátí pozici (sloupec) tahu počítače. Není nutné aby byla nějak sofistikovaná, může vracet náhodný sloupec v daném rozsahu.
>>> state = [[' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', 'X', ' ']]
>>> strategy(state, 'O')
2

Funkci tictactoe(rows, cols, human_starts=True), která umožňuje hrát hru padajících piškvorek na plánu o daném počtu řádků a sloupců. Můžete předpokládat, že zadaná velikost plánu je rozumná (alespoň 3 a méně než 25 sloupců a řádků). Parametr human_starts určuje, zda začíná hráč nebo počítač. Výpis průběhu hry by měl vypadat stejně, jako v následujících příkladech. Funkce kontroluje, zda jsou tahy zadané hráčem a počítačem platné a pokud nejsou, vyzve ho k novému zadání. Pro hru počítače volejte výše uvedené funkce show_state(state) a strategy(state, symbol).

Příklady hry
Příklad, v němž začíná hráč:
 
Na tahu je hrac
Do jakeho sloupce chces hrat? (do 0 do 9)? 5









          X
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je pocitac
Pocitac hraje do sloupce cislo 9









          X       O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je hrac
Do jakeho sloupce chces hrat? (do 0 do 9)? 6









          X X     O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je pocitac
Pocitac hraje do sloupce cislo 5








          O
          X X     O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je hrac
Do jakeho sloupce chces hrat? (do 0 do 9)? 4








          O
        X X X     O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je pocitac
Pocitac hraje do sloupce cislo 7








          O
        X X X O   O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9

Na tahu je hrac
Do jakeho sloupce chces hrat? (do 0 do 9)? 3








          O
      X X X X O   O
- - - - - - - - - -
0 1 2 3 4 5 6 7 8 9
Vyhral jsi!

Bodování:
- Funkce tictactoe(rows, cols, human_starts=True) musí korektně provádět hru hráče a počítače, kontrolovat zadané tahy hráče a určit výhru. Výpis se musí shodovat s výše uvedenými ukázkami.
- Základní variantou strategy je funkce, která dodržuje pravidla, ale jinak hraje náhodně. Pokud váš program bude hrát "inteligentně" (například ukončí hru, pokud bude mít možnost), získáte bonusové body. Čím inteligentněji, tím více bodů. V každém případě napište do komentáře stručné vysvětlení, jak moc inteligentně program hraje. Kvalita tohoto popisu je také důležitá.

Několik tipů:
- Než začnete psát kód, rozmyslete si (nejlépe si i nakreslete) dekompozici problému na jednodušší funkce. Jinak se v tom ztratíte. Problém lze rozložit různě, příklady užitečných funkcí: is_won(state) nebo valid_move(move, state), ale v průběhu řešení by vás pak měly napadnout ještě další. Kdykoliv zjistíte, že máte v programu duplicitní kód, zbavte se ho (např. právě pomocí nové pomocné funkce). A všechny funkce by měly zůstat dostatečně krátké a přehledné.
- Začněte variantou s náhodnými tahy, rozumné chování přidejte až potom. Při dobré dekompozici by rozšiřování neměl být problém.
- Zkuste si tuto hru párkrát zahrát (s někým nebo i sami se sebou), pomůže vám to lépe pochopit, jak by měl počítač optimálně hrát.

Důležité poznámky:

- Nepoužívejte diakritiku (ani v komentářích).
- Může dojít i k remíze (při naplnění všech dostupných hracích polí). Doporučuji toto detekovat, jinak pravděpodobně dojde k zacyklení programu.
- Pro jistotu ještě jednou: dodržte kostru programu i výpis průběhu hry tak, jak je uvedené v zadání.

Odevzdání:
  • Deadline 17. 11. v 23:59.
  • Odevzdejte jediný soubor uloha04.py, s definicemi funkcí show_state(state), strategy(state, symbol) a tictactoe(rows, cols, human_starts=True) (a dalšími pomocnými funkcemi dle vaší dekompozice). Dodržte tyto názvy funkcí a parametrů (kvůli částečně automatickému opravování úlohy).
  • Odevzdávárny:
    • Skupina 3 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131781/65131799
    • Skupina 4 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131783/65131813
    • Skupina 5 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131786/65131828
    • Skupina 6 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131787/65131849

Týden 9

Týden 10 - Písemka

Týden 11

Domácí úkol 5 - Objekty - Zápas příšer - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící Jaromír Plhák)

Zadání je dostupné na adrese: http://www.fi.muni.cz/~xplhak/IB111/05-objekty.html

Odevzdání:
  • Deadline 8. 12. v 23:59.
  • Odevzdejte jediný soubor uloha05.py
  • Odevzdávárny:
    • Skupina 3 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131781/65131800
    • Skupina 4 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131783/65131814
    • Skupina 5 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131786/65131829
    • Skupina 6 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131787/65131850

Týden 12

Týden 13

Domácí úkol 6 - Zpracování textu a obrázků  - toto zadání platí pouze pro seminární skupiny 03, 04, 05 a 06 (cvičící Jaromír Plhák) 

1 Zpracování textu

Stáhněte si soubor jmena.csv (odkaz níže) a vytvořte funkce, které vypíší následující statistiky (v závorkách jsou uvedeny parametry, které funkce musí mít - může jich však obsahovat více):
  • a) Nalezněte a vypište n nejpopulárnějších jmen pro daný rok (n, year)
  • b) Nalezněte a vypište rok, kdy bylo dané jméno nejpopulárnější (name)
  • c) Nalezněte a vypište mezi kterými lety došlo pro dané jméno k největšímu vzrůstu popularity (name)
  • d) Nalezněte a vypište mezi kterými lety došlo pro libovolné jméno k největšímu procentnímu poklesu popularity. Uvažujte jen zavedená jména, která byla dávána alespoň m-krát (min_occurence)
  • e) Nalezněte a vypište pro každý rok, které jméno zažilo největší nárust popularity dle počtu výskytů.
  • f) Libovolnou statistiku odlišnou od předchozích. Detailně ji popiště pomocí komentářů u dané funkce.
  • g) Libovolnou statistiku odlišnou od předchozích. Detailně ji popiště pomocí komentářů u dané funkce.

2 Zpracování obrázků
  • a) Napište funkci, která vykreslí následující obrázek bitmapova_grafika_waves_square.png (odkaz níže). Parametrem je velikost obrázku, počet vln a strana čtverce, jehož střed je ve středu obrázku. Viz sbírka - úkol 12.1.10
  • b) Vezměte obrázek bitmap.jpg (odkaz níže) a proveďte jeho rozmlžení. Úroveň rozmazání je na vás, nicméně mělo by jít stále poznat, co je na obrázku zobrazeno.

Poznámky:
  • Je možné si vytvářet pomocné funkce (na načítání dat apod.)
  • Pracujte se souborem efektivně, tj. načtěte si z něj data do vhodné datové struktury (pokud bude každá funkce znovu načítat data ze souboru, budete za to náležitě "odměněni").
  • Názvy funkcí (a jejich parametrů) by měly odpovídat tomu, co dělají
  • Ošetřujte vstupní parametry funkcí - pokud bude chtít uživatel data například pro rok 2020, tak to jistě nebude možné.
  • Zavolejte každou funkci právě jednou, a to v pořadí dle zadání (tj. nejdříve zavoláte funkci, která řeší úlohu 1a), pak 1b) atd. Volání všech funkcí proveďte až na konci kódu.
  • Není nutné načítat vstupy od uživatele, parametry funkcí můžete při volaní zvolit dle libosti.
  • Bonusové body lze získat za zpracování velmi zajímavých (a komplexních) statistik v rámci úkolů 1f) a 1g)
Odevzdání:
  • Deadline 27. 12. v 23:59.
  • Odevzdejte jediný soubor homework06.py
  • Odevzdávárny:
    • Skupina 3 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131781/65131801/
    • Skupina 4 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131783/65131815/
    • Skupina 5 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131786/65131830/
    • Skupina 6 - https://is.muni.cz/auth/el/1433/podzim2016/IB111/ode/ode_65131787/65131851/