[PYTHON] Programmierverbesserungskurs 4: Pixellogik

Dies ist der 4. Programmierverbesserungskurs.

Verwendung der Pixellogik als Thema Betrachten Sie ein Programm.

Klicken Sie hier für das Kommentarvideo

Es tut mir leid, wenn es nicht angezeigt wird

Was ist Pixellogik?

Es ist ein Spiel, das es schon lange gibt Ich denke, es gibt viele Leute, die es getan haben.

Die vorläufige Regel lautet Ein Spiel, bei dem die Quadrate durch die Anzahl der vertikalen und horizontalen Zahlen schwarz gestrichen werden.

Es wird fortlaufend durch die Nummer gemalt Wo die Zahlen geteilt sind Es gibt mindestens ein weißes Quadrat.

Wenn Sie alle Quadrate richtig malen können Das Bild ist fertig.

Zum Beispiel in einem 5 x 5-Quadrat-Problem die Zahlen in einer Zeile Wenn es 2 2 ist, ist es wie ■■ □ ■■.

Wenn Sie die Quadrate nach den Zahlen malen Das ist gut.

Anfänger: Erstellen Sie eine Prüffunktion für gefüllte Zellen

Zählen Sie, wie viele Quadrate in einer Zeile ausgefüllt sind Erstellen wir eine Funktion check_row, die einen numerischen Wert ausgibt.

Teilen Sie den numerischen Wert, wenn das weiße Quadrat dazwischen liegt, wie in der Abbildung dargestellt.

Die Ausgabe ist eine Liste von Zahlen

check_row(Zeilendaten):
return Liste der Nummern

Beispiel:

check_row('□■□■□■□')

1 1 1

Mittlere:

Stellen Sie sich ein Programm vor, das aus einem Bild ein Problem mit der Illustrationslogik erstellt.

Die Eingabedaten des Bildes sind ein Listentyp mit schwarzen und weißen Zellen als Zeichenfolgenelemente. Die Eingabedaten sind ein Quadrat aus N Quadraten x N Quadraten.

Im Fall der folgenden Bilddaten

data = [
'□□■■■■□□',
'□■■□□■■□',
'■■□□□□■■',
'■■■■■■■■',
'■■□□□□□□',
'■■□□□□■■',
'□■■□□■■□',
'□□■■■■□□']

N = 8

Ausgabebeispiel ist

pix.png

Antworten

Anfängerantwort

Zählen Sie von Anfang an die Anzahl der schwarzen Quadrate nacheinander.

+1, wenn die schwarzen Quadrate fortgesetzt werden Wenn das weiße Quadrat kommt und die Vorderseite das schwarze Quadrat ist, notieren Sie den numerischen Wert Wenn das letzte Quadrat ein schwarzes Quadrat ist, notieren Sie den Wert.

□■■■■□□□ 4 □■■■■□□■ 4 1

#Überprüfen Sie, wie viele schwarze Quadrate es gibt
def check_row(row):
    res,checked,count = [],0,0
    while True:
        if row[checked]=='■':
            count+=1
        elif count!=0:
            res.append(count)
            count=0
        checked+=1
        if checked==len(row):
            if count!=0:
                res.append(count)
            break
    return res
​
check_row('□□□■□■■■□□■■■■■■■□□□')

[1, 3, 7]

Zwischenantwort

Das Ergebnis der Zählung der schwarzen Quadrate wird getrennt für die Zeilenrichtung und die Spaltenrichtung angegeben.

Wenn Sie darüber nachdenken, was ausgegeben werden soll Schreiben Sie die Zahlen zuerst in Spaltenrichtung und später in Zeilenrichtung.

Geben Sie die verkettete als Zeichenfolge aus (durch Tabulatoren getrennt).

data = [
'□□■■■■□□',
'□■■□□■■□',
'■■□□□□■■',
'■■■■■■■■',
'■■□□□□□□',
'■■□□□□■■',
'□■■□□■■□',
'□□■■■■□□']

N = len(data)

#Überprüfen Sie, wie viele schwarze Quadrate es gibt
def check_row(row):
    res,checked,count = [],0,0
    while True:
        if row[checked]=='■':
            count+=1
        elif count!=0:
            res.append(count)
            count=0
        checked+=1
        if checked==len(row):
            if count!=0:
                res.append(count)
            break
    return res

#Speichern Sie das Ergebnis der Matrix
result1,result2 = [],[]

#Zeilenrichtung
for row in data:
    tmp = check_row(row)
    result1.append(tmp)

#Spaltenrichtung
for x in range(N):
    col = []
    for y in range(N):
        col.append(data[y][x])
    tmp = check_row(col)
    result2.append(tmp)

#Erstellen Sie eine Funktion für die Ausgabe
def make_num_data(res1,res2,num):
    row_len = max([len(r) for r in res1])
    col_len = max([len(c) for c in res2])
    row_num = row_len + num
    res_data = []
    
    #Erstellen Sie zuerst Ausgabedaten in Spaltenrichtung
    for c in range(col_len):
        tmp = [' '] * row_len
        for x in range(num):
            if len(res2[x])-1>=c:
                tmp+=[str(res2[x][c])]
            else:
                tmp+= [' '] 
        res_data.append(tmp)

    #Verbinden Sie Daten in Zeilenrichtung
    for n in range(num):
        tmp = []
        for r in range(row_num):
            if len(res1[n])-1>=r:
                tmp+=[str(res1[n][r])]
            else:
                tmp+= [' ']
        res_data.append(tmp)
    return res_data

#Erstellen Sie Daten für die Ausgabe
d = make_num_data(result1,result2,N)

#Ausgabe
for y in d:
    print('\t'.join(y))
pix.png               ## Erweiterte Ausgabe

Erstellen Sie ein Programm, das die Illustrationslogik löst.

Ich habe keine Zeit, deshalb entschuldige ich mich für die Unannehmlichkeiten.

Wenn Sie frei sind, versuchen Sie es bitte.

Zusammenfassung

Illustrierte Logik schafft Probleme Das Problem zu lösen ist der wahre Nervenkitzel von beiden.

Sie müssen ein effizientes Suchprogramm schreiben, um das Problem zu lösen Weil es unmöglich wird zu lösen, wenn die Quadrate größer werden Ich dachte, die Implementierung würde einige Zeit dauern.

Ich möchte herausfordern, wenn ich Zeit habe.

Na dann.

Informationen zum Autor

HP von Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

Programmierverbesserungskurs 4: Pixellogik
Programmierverbesserungskurs 1
Programmierverbesserungskurs 2