Cours d'amélioration de la programmation 4: Pixel Logic

Il s'agit du 4ème cours d'amélioration de la programmation.

Utiliser la logique des pixels comme sujet Pensez à un programme.

Cliquez ici pour la vidéo de commentaire

Je suis désolé si cela n'apparaît pas

Qu'est-ce que la logique des pixels?

Connaissez-vous la logique des pixels?

C'est un jeu qui existe depuis longtemps Je pense qu'il y a beaucoup de gens qui l'ont fait.

La règle provisoire est Un jeu dans lequel les carrés sont peints en noir par le nombre de nombres verticaux et horizontaux.

Il est peint en continu par le nombre Où les nombres sont divisés Il y a au moins un carré blanc.

Si vous pouvez peindre correctement tous les carrés L'image est terminée.

Par exemple, dans un problème carré 5 x 5, les nombres sur une ligne Si c'est 2 2, ce sera comme ■■ □ ■■.

Si vous peignez les carrés selon les nombres C'est bon.

Débutant: créer une fonction de vérification pour les cellules remplies

Comptez combien de carrés sont remplis sur une ligne Créons une fonction check_row qui génère une valeur numérique.

Divisez la valeur numérique lorsque le carré blanc se situe entre les deux, comme dans la logique de l'illustration.

La sortie est une liste de nombres

check_row(Données de ligne):
retour Liste des numéros

Exemple:

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

1 1 1

Intermédiaire:

Considérez un programme qui crée un problème de logique d'illustration à partir d'une image.

Les données d'entrée de l'image sont de type liste avec des cellules noires et blanches comme éléments de chaîne de caractères. Les données d'entrée sont un carré de N carrés x N carrés.

Dans le cas des données d'image suivantes

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

N = 8

L'exemple de sortie est

pix.png

Répondre

Réponse du débutant

Comptez le nombre de carrés noirs un par un depuis le début.

+1 si les carrés noirs continuent Lorsque le carré blanc arrive, si le devant est le carré noir, enregistrez la valeur numérique Si le dernier carré est un carré noir, enregistrez la valeur.

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

#Vérifiez combien il y a de carrés noirs
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]

Réponse intermédiaire

Le résultat du comptage des carrés noirs est donné séparément pour la direction de ligne et la direction de colonne.

Lorsque vous réfléchissez à ce qu'il faut sortir Écrivez d'abord les nombres dans le sens de la colonne, puis écrivez les nombres dans le sens des lignes plus tard.

Sortie de la concaténée sous forme de chaîne de caractères (délimitée par des tabulations)

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

N = len(data)

#Vérifiez combien il y a de carrés noirs
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

#Stocker le résultat de la matrice
result1,result2 = [],[]

#direction de ligne
for row in data:
    tmp = check_row(row)
    result1.append(tmp)

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

#Créer une fonction pour la sortie
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 = []
    
    #Créez d'abord les données de sortie dans le sens de la colonne
    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)

    #Connectez les données dans le sens des lignes
    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

#Créer des données pour la sortie
d = make_num_data(result1,result2,N)

#production
for y in d:
    print('\t'.join(y))
pix.png               ## Édition avancée

Créez un programme qui résout la logique de l'illustration.

Je n'ai pas le temps, je suis donc désolé pour la gêne occasionnée.

Si vous êtes libre, essayez-le.

Résumé

La logique illustrée crée des problèmes Résoudre le problème est le véritable frisson des deux.

Vous devez écrire un programme de recherche efficace pour résoudre le problème Parce qu'il devient impossible de résoudre lorsque le carré devient grand J'ai pensé que la mise en œuvre prendrait un certain temps.

Je veux contester quand j'ai le temps.

Eh bien.

Informations sur l'auteur

HP d'Otsu py: http://www.otupy.net/

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

Twitter: https://twitter.com/otupython

Recommended Posts

Cours d'amélioration de la programmation 4: Pixel Logic
Cours d'amélioration de la programmation 1
Cours d'amélioration de la programmation 2