• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Optymalne uzupełnianie tablicy w Tetrisie

Object Storage Arubacloud
0 głosów
156 wizyt
pytanie zadane 1 stycznia 2018 w Python przez Ciartek Nowicjusz (210 p.)

[ PROGRAM W PYTHON 2 ]

Witam ,ma takie samo zadanie jak kolega ,który wstawiał post kilka tygodni temu :

Post kolegi

Starałem się zastosować do wskazówek ,zrobiłem program lecz nie działa on poprawnie ,próbowałem już kilku zmian i obecnie jestem w kropce , być może ktoś będzie w stanie mi pomóc:


#-------------------WYKORZYSTANE FUNKCJE:

def plansza_tworz():
    tet=[]
    bufor=[]
    poziom=str()
    for i in range(0,20):
        poziom=raw_input()
        bufor=list(poziom)
        tet.append(bufor)
    return tet


def klocki_podaj():
    k=str()
    k=raw_input()
    return k

def usun_rzad(plansza,r):
    k=0
    nowy=[]
    for i in range(10):
        nowy.append('.')
    
    for i in range(0,r):
        for j in range(0,9,2):
            if plansza[i][j]=='#'== plansza[i][j+1]:
                k+=1
        if k==5:
            del plansza[i]
            plansza.insert(0,nowy)
            return 1+usun_rzad(plansza,r)
        k=0
    return 0


def dopasowanie(plansza,i,j,a1,b1,a2,b2,a3,b3,war1,war2):
    if plansza[a1][b1] == '.' == plansza[a2][b2] == plansza[a3][b3]:
        for x in range(i-1,-1,-1):
            for y in range(war1,war2):
                if plansza[x][y]=='#':return 0
        plansza[i][j] = '#'
        plansza[a1][b1] = '#'
        plansza[a2][b2] = '#'
        plansza[a3][b3] = '#'
        return 1
    return 0

def kolejny_klocek(plansza,klocki,us_g):
    if len(klocki)>=1:
        if klocki[0]=='Z': return z(plansza,us_g,klocki[1:])
        elif klocki[0]=='S':return s(plansza,us_g,klocki[1:])
        elif klocki[0]=='O':return o(plansza,us_g,klocki[1:])
        elif klocki[0]=='I':return i(plansza,us_g,klocki[1:])
        elif klocki[0]=='J':return j(plansza,us_g,klocki[1:])
        elif klocki[0]=='L':return l(plansza,us_g,klocki[1:])
        elif klocki[0]=='T':return t(plansza,us_g,klocki[1:])
    else :
        return 0

#____________PRZYKLADOWA FUNKCJA DLA DANEGO KLOCKA:

def z(plansza,us_global,n_litery):
    pom=list(plansza)
    us_pom=0
    ug=us_global
    for i in range(19,-1,-1):
        for j in range(10):
            if pom[i][j]=='.':
                if (i>=1) and (1<=j<9):
                    if dopasowanie(pom,i,j, i, j+1, i-1, j, i-1, j-1,j,j+2): #sposob2
                        us_pom = usun_rzad(pom,20)
                        print us_pom
                        if ug<= us_pom+us_global:
                            ug+=us_pom
                        ug += kolejny_klocek(pom,n_litery,ug)
                        us_pom=0
                        pom=list(plansza)
                        ug=us_global
    pom=list(plansza)
    for i in range(19,-1,-1):
        for j in range(10):
            if pom[i][j]=='.':
                if(j<9) and (i>=2):
                    if dopasowanie(pom,i,j, i-1, j, i-1, j+1, i-2, j+1, j, j+2): #sposob1
                        us_pom += usun_rzad(pom,20)
                        print us_pom
                        if ug<= us_pom+us_global:
                            ug+=us_pom
                        ug += kolejny_klocek(pom,n_litery,ug)
                        us_pom=0
                        pom=list(plansza)
                        ug=us_global
    return ug-us_global


#---------------------------------------URUCHAMIANIE FUNKCJI:
globalna=0

tet = plansza_tworz()

klocki=klocki_podaj()

print kolejny_klocek(list(tet),klocki,globalna)
for x in tet:print x



Wykonałem kilka testów przy pomocy wstawionych printów oraz wypisaniu każdej linii tabeli podanej na początku ,powinny być one puste ponieważ jej oryginał nie miał być wykorzystywany ale niestety nie działa to poprawnie (użycie pom=plansza[:] nie zmienia wyników - nadal zmieniany jest oryginał),myślę że to jest problemem ale nie mam pojęcia jak to rozwiązać ,może ktoś będzie w stanie mi pomóc :(

ps: nie wstawiłem wszystkich funkcji bo program ma łącznie ok 370 linijek a zasada tworzenia klocka jest taka sama

1
komentarz 2 stycznia 2018 przez adrian17 Ekspert (344,860 p.)

użycie pom=plansza[:] nie zmienia wyników - nadal zmieniany jest oryginał

Bo to tylko kopiuje tablicę, ale jej elementy (kolejne tablice) nie są kopiowane.

Spróbuj copy.deepcopy.

program ma łącznie ok 370 linijek a zasada tworzenia klocka jest taka sama

(jeśli każdy klocek ma praktycznie taką samą funkcję, to to powinna być jedna funkcja.)

komentarz 2 stycznia 2018 przez Ciartek Nowicjusz (210 p.)
Wielkie dzięki za radę ! :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 380 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez NiCKo Początkujący (490 p.)
0 głosów
1 odpowiedź 317 wizyt
pytanie zadane 7 stycznia 2019 w C i C++ przez Moti Użytkownik (650 p.)
0 głosów
0 odpowiedzi 334 wizyt
pytanie zadane 24 września 2019 w C i C++ przez jjanickij Użytkownik (510 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...