• 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

VPS Starter Arubacloud
0 głosów
162 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 (349,240 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ź 565 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez NiCKo Początkujący (490 p.)
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 7 stycznia 2019 w C i C++ przez Moti Użytkownik (650 p.)
0 głosów
0 odpowiedzi 425 wizyt
pytanie zadane 24 września 2019 w C i C++ przez jjanickij Użytkownik (510 p.)

92,967 zapytań

141,931 odpowiedzi

321,163 komentarzy

62,299 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...