Dies ist der 4. Programmierverbesserungskurs.
Verwendung der Pixellogik als Thema Betrachten Sie ein Programm.
Klicken Sie hier für das Kommentarvideo
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.
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
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
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]
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))
## 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.
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.
HP von Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython