Informatika2-2016/Gyakorlat11Megold

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „=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). <python> def…”)
 
 
24. sor: 24. sor:
 
Á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!
 
Á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!
  
 +
<python>
 +
board = [[-1]* 8 for i in range(8)]
 +
 +
def fill(x,y):
 +
    ret = [[x+dx,y+dy] for dx in [2,-2] for dy in [1,-1]]
 +
    ret += [[x+dx,y+dy] for dx in [1,-1] for dy in [2,-2]]
 +
    ret = [r for r in ret if r[0] >= 0 and r[1] >= 0 and r[0] < 8 and r[1] < 8]
 +
    return ret
 +
 +
print fill(1,4)
 +
 +
found = True
 +
n = 0
 +
board[0][0] = 0
 +
 +
while found:
 +
    found = False
 +
    for y in range(len(board)):
 +
        for x in range(len(board[y])):
 +
            if board[y][x] == -1:
 +
                found = True
 +
            if board[y][x] == n:
 +
                for [yf,xf] in fill(y,x):
 +
                    if board[yf][xf] == -1:
 +
                        board[yf][xf] = n + 1
 +
    n += 1                   
 +
for i in range(7,-1,-1):
 +
    print board[i]
 +
</python>
 
===Zárt terület kifestése===
 
===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!
 
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!
48. sor: 77. sor:
 
  .....................................
 
  .....................................
 
  .....................................
 
  .....................................
 +
 +
<python>
 +
picture = []
 +
with open('abra.txt') as f:
 +
    for l in f:
 +
        L = []
 +
        for c in l:
 +
            L.append(c)
 +
        picture.append(L)
 +
 +
def color(x,y,picture):
 +
    if y < len(picture):
 +
        if x < len(picture[y]):
 +
            if picture[y][x] == ".":
 +
                picture[y][x] = "#"
 +
                color(x+1,y,picture)
 +
                color(x-1,y,picture)
 +
                color(x,y+1,picture)
 +
                color(x,y-1,picture)
 +
color(2,2,picture)
 +
for p in picture:
 +
    print "".join(p),
 +
</python>

A lap jelenlegi, 2016. május 16., 13:02-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).

def pascal(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1,1]
    else:
        previous = [1,1]
        for i in range(2,n):
            actual = [1]
            for i in range(1,len(previous)):
                actual.append(previous[i]+previous[i-1])
            actual.append(1)    
            previous = actual
    return previous
print pascal(14)

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!

board = [[-1]* 8 for i in range(8)]
 
def fill(x,y):
    ret = [[x+dx,y+dy] for dx in [2,-2] for dy in [1,-1]]
    ret += [[x+dx,y+dy] for dx in [1,-1] for dy in [2,-2]]
    ret = [r for r in ret if r[0] >= 0 and r[1] >= 0 and r[0] < 8 and r[1] < 8]
    return ret
 
print fill(1,4)
 
found = True
n = 0
board[0][0] = 0
 
while found:
    found = False
    for y in range(len(board)):
        for x in range(len(board[y])):
            if board[y][x] == -1:
                found = True
            if board[y][x] == n:
                for [yf,xf] in fill(y,x):
                    if board[yf][xf] == -1:
                        board[yf][xf] = n + 1
    n += 1                    
for i in range(7,-1,-1):
    print board[i]

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!

.....................................
...#######################...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#######.....
...###.................##......#.....
...#..##.............##........#.....
...#....##.........##..........#.....
...#......##.....##............#.....
...#........#####..............#.....
...#........#..................#.....
...#.......##..................#.....
...#.....##....................#.....
...#...##......................#.....
...#############################.....
.....................................
.....................................
.....................................
.....................................
picture = []
with open('abra.txt') as f:
    for l in f:
        L = []
        for c in l:
            L.append(c)
        picture.append(L)
 
def color(x,y,picture):
    if y < len(picture):
        if x < len(picture[y]):
            if picture[y][x] == ".":
                picture[y][x] = "#"
                color(x+1,y,picture)
                color(x-1,y,picture)
                color(x,y+1,picture)
                color(x,y-1,picture)
color(2,2,picture)
for p in picture:
    print "".join(p),
Személyes eszközök