Informatika2-2016/Gyakorlat11

A MathWikiből
(Változatok közti eltérés)
(Feladatok)
(Zárt terület kifestése)
 
(2 szerkesztő 5 közbeeső változata nincs mutatva)
1. sor: 1. sor:
 
=Feladatok=
 
=Feladatok=
 +
===Pascal-háromszög===
 +
Írjunk egy függvényt! Bemenete egy egész szám, '''n''', kimenete pedig a Pascal-háromszög n-edik sora (lista).
 +
 +
===Huszárok===
 +
Áll a sakktáblán egy huszár. Számoljuk ki a sakktábla minden mezőjére, hogy legkevesebb hány lépéssel tudunk eljutni oda az előbbi huszárral! A feladat megoldásához írjunk egy függvényt, '''knight(x,y)''', amelynek két bemenete a huszár táblán elfoglalt helyének koordinátái. A visszatérési érték legyen egy nyolcszor nyolcas lista! Hsználjunk dinamikus programozást!
 +
 +
===Zárt terület kifestése===
 +
Olvassuk be az alábbi "szöveget" listák listájába (minden karakter egy elem): mentsük le egy fájlba kézzel, majd nyissuk meg a fájlt Pythonnal! Írjunk egy fill(x,y) függvényt, ami ugyanazt csinálja, mint a Paint kitöltő funkciója! Az (x,y) pontból kiindulva a . helyére # jelet tesz, amíg a # jel által jelölt falba nem ütközik! A módszer rekurzív: kifestjük az (x,y) pontot, majd a szomszédait, ha azok nem # jelek. Hívjuk meg a szomszédokra (akik nem # jelek) a függvényt rekurzívan. Ha nincs kit kiszínezni, akkor álljunk meg!
 +
.....................................
 +
...#######################...........
 +
...#.....................#...........
 +
...#.....................#...........
 +
...#.....................#...........
 +
...#.....................#...........
 +
...#.....................#...........
 +
...#.....................#######.....
 +
...###.................##......#.....
 +
...#..##.............##........#.....
 +
...#....##.........##..........#.....
 +
...#......##.....##............#.....
 +
...#........#####..............#.....
 +
...#........#..................#.....
 +
...#.......##..................#.....
 +
...#.....##....................#.....
 +
...#...##......................#.....
 +
...#############################.....
 +
.....................................
 +
.....................................
 +
.....................................
 +
.....................................
  
 
=== Állapotgép ===
 
=== Állapotgép ===
34. sor: 64. sor:
 
* Ha megérkezett egy várt gomb felengedése akkor mentsük a lenyomás idõtartalmát, majd töröljük a szótárból.
 
* Ha megérkezett egy várt gomb felengedése akkor mentsük a lenyomás idõtartalmát, majd töröljük a szótárból.
  
'''Bónusz:''' rekonstruáljuk a beírt szöveget.
+
'''Bónusz:''' rekonstruáljuk a beírt szöveget. Vigyázat, ez a file tartalmazza a backspace, SHIFT, stb. billentyûk lenyomását is.
  
 
==Előadás==
 
==Előadás==

A lap jelenlegi, 2016. április 28., 07:12-kori változata

Tartalomjegyzék

Feladatok

Pascal-háromszög

Írjunk egy függvényt! Bemenete egy egész szám, n, kimenete pedig a Pascal-háromszög n-edik sora (lista).

Huszárok

Áll a sakktáblán egy huszár. Számoljuk ki a sakktábla minden mezőjére, hogy legkevesebb hány lépéssel tudunk eljutni oda az előbbi huszárral! A feladat megoldásához írjunk egy függvényt, knight(x,y), amelynek két bemenete a huszár táblán elfoglalt helyének koordinátái. A visszatérési érték legyen egy nyolcszor nyolcas lista! Hsználjunk dinamikus programozást!

Zárt terület kifestése

Olvassuk be az alábbi "szöveget" listák listájába (minden karakter egy elem): mentsük le egy fájlba kézzel, majd nyissuk meg a fájlt Pythonnal! Írjunk egy fill(x,y) függvényt, ami ugyanazt csinálja, mint a Paint kitöltő funkciója! Az (x,y) pontból kiindulva a . helyére # jelet tesz, amíg a # jel által jelölt falba nem ütközik! A módszer rekurzív: kifestjük az (x,y) pontot, majd a szomszédait, ha azok nem # jelek. Hívjuk meg a szomszédokra (akik nem # jelek) a függvényt rekurzívan. Ha nincs kit kiszínezni, akkor álljunk meg!

.....................................
...#######################...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#######.....
...###.................##......#.....
...#..##.............##........#.....
...#....##.........##..........#.....
...#......##.....##............#.....
...#........#####..............#.....
...#........#..................#.....
...#.......##..................#.....
...#.....##....................#.....
...#...##......................#.....
...#############################.....
.....................................
.....................................
.....................................
.....................................

Állapotgép

Töltsük le az alábbi adatfile-t: raw_data.txt

A file tartalma egy rövid szöveg begépelése alatt történt billentyû lenyomásokat kódolja. Az érdekes rész az 5. sortól kezdõdik:

  • Az elsõ szó az esemény, a számunkra érdekesek a keydown és keyup események, ezek rendre a billentyû lenyomás és felengedés.
  • A következõ három szám a karakter kódja, innen a 2. (azaz a sorban 3. elem) a megbízható, használjuk ezt.
  • Az igaz-hamis érték a kis / nagy betûre vonatkozik, de mi ezzel most ne foglalkozzunk.
  • Az utolsó elem az érdekes még számunkra, ez az esemény idõpontja (pontosan az 1970 január 1. óta eltelt milliszekundumok).

A feladat az, hogy úgy dolgozzuk fel ezt az adathalmazt, hogy a billentyû lenyomások és felengedések közti idõt megkapjuk. Csak egy ilyen idõsor érdekel minket, a sorrend legyen a lenyomás pillanata szerint. Például az eleje így nézne ki:

145 80 74 ...

A 145-öt az alábbi két sorból kapjuk:

keydown 16 16 0 true 1444121075394
keyup 16 16 0 false 1444121075539

majd a 80-at:

keydown 84 84 0 true 1444121075462
keyup 84 84 0 false 1444121075542

a 74-et:

keydown 72 72 0 false 1444121075693
keyup 72 72 0 false 1444121075767

Az így kapott számsort írjuk egy kimenet.txt file-ba!

Segítség:

Rengeteg módon megoldható a feladat, ez csak egy ötlet:

  • Tároljuk a már lenyomott és felengedésre váró gombokat egy szótárban.
  • Ha megérkezett egy várt gomb felengedése akkor mentsük a lenyomás idõtartalmát, majd töröljük a szótárból.

Bónusz: rekonstruáljuk a beírt szöveget. Vigyázat, ez a file tartalmazza a backspace, SHIFT, stb. billentyûk lenyomását is.

Előadás

Személyes eszközök