Quand j'ai regardé l'article de haskell, j'ai trouvé quelque chose comme ça. http://qiita.com/tanakh/items/c2e157f0a48667370b0e
Le problème est là. http://okajima.air-nifty.com/b/2011/01/2011-ffac.html
Je ne comprends pas du tout parce que je n'ai toujours pas assez de puissance de haskell. Pour le moment, haskell est laissé pour compte J'ai décidé de l'écrire en python car c'était un gros problème.
Quelque chose
Cela a pris beaucoup de temps de manière inattendue, mais c'était à peu près 2 heures ... Non, je pense que je l'ai un peu dépassé. Et bien non.
J'aurais dû l'écrire en c ++
.
L'inconvénient de ne pas pouvoir utiliser la boucle de format for (int i = 0; i <10; ++ i)
.
La largeur / hauteur de la boîte Puyo n'est pas solide, donc je pense qu'elle se déplacera telle quelle même si elle se propage verticalement et horizontalement. Eh bien, je ne sais pas si cela peut se propager verticalement et horizontalement.
J'ai déplacé python 2.7.6
.
puyo.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
puyo_array = [
" GYRR",
"RYYGYG",
"GYGYRR",
"RYGYRG",
"YGYRYG",
"GYRYRG",
"YGYRYR",
"YGYRYR",
"YRRGRG",
"RYGYGG",
"GRYGYR",
"GRYGYR",
"GRYGYR",
]
#Étant donné que la chaîne de caractères python ne peut pas être réécrite en spécifiant l'index, elle est convertie en bytearray.
puyo = [ bytearray(line) for line in puyo_array ]
def show():
print "-" * 8
for x in puyo:
print "|{}|".format(x)
print "-" * 8
print
def erase():
u'''Effacer 4 ou plus connectés'''
class Way:
u'''Lequel avez-vous recherché?'''
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
def mark(dx, dy, p, dst = None):
u'''Suivez la même couleur adjacents les uns aux autres'''
if dx < 0 or dy < 0:
return
try:
if puyo[dy][dx] == p:
points.append((dx, dy))
#Si vous recherchez dans le sens de l'entrée, elle se répétera indéfiniment.
if dst != Way.RIGHT:
mark(dx+1, dy, p, Way.LEFT)
if dst != Way.UP:
mark(dx, dy+1, p, Way.DOWN)
if dst != Way.LEFT:
mark(dx-1, dy, p, Way.RIGHT)
if dst != Way.DOWN:
mark(dx, dy-1, p, Way.UP)
except IndexError as e:
pass
for y, line in enumerate(puyo):
for x, p in enumerate(line):
if chr(p) != " ":
points = []
mark(x, y, puyo[y][x])
if len(points) >= 4: #4 connexions ou plus
for x, y in points:
puyo[y][x] = " " #Effacer
def drop():
u'''Lâchez le flottant'''
height = len(puyo)
assert(height > 0)
width = len(puyo[0])
is_zenkeshi = True
for x in range(width):
for y in range(0, height)[::-1]: #Se moquer d'en bas
if chr(puyo[y][x]) == " ":
for y2 in range(0, y+1)[::-1]:
if chr(puyo[y2][x]) != " ":
puyo[y][x] = puyo[y2][x]
puyo[y2][x] = " "
break
else:
is_zenkeshi = False
#Vrai si tout disparaît
return is_zenkeshi
if __name__ == '__main__':
import itertools
for i in itertools.count():
print i
show()
erase()
if drop():
break
print "finish!!"
show()
Recommended Posts