¿Existen buenos (o al menos interesantes pero defectuosos) análogos para las expresiones regulares en dos dimensiones?¿Hay algún análogo bueno/interesante a las expresiones regulares en 2d?
En una dimensión que puedo escribir algo como /aaac?(bc)*b?aaa/
para tirar rápidamente una región de alternar b
s y s c
con un borde de al menos tres a
s. Quizás lo más importante es que puedo volver un mes después y ver de un vistazo lo que está buscando.
Me encuentro escribiendo código personalizado para problemas análogos en 2d (algunos mucho más complicados/restringidos) y sería bueno tener una notación más concisa y estandarizada, incluso si tengo que escribir el motor detrás de él mismo .
Un segundo ejemplo podría llamarse "encontrar el +". El objetivo es ubicar una columna de 3 o más a
s, una b
entre corchetes por 3 o más a
s con tres o más a
s más abajo. Debe coincidir:
..7...hkj.k f
7...a h o j
----a--------
j .a,g- 8 9
.aaabaaaaa7 j
k .a,,g- h j
hh a----? j
a hjg
y podría ser escrito como [b^(a {3}) v (a {3})> ({3} un) < (a {3})] o ..
Sugerencias?
¿Puede darnos un ejemplo? – Gumbo
expresiones regulares terminan siendo máquinas de estado, hacer una máquina de estado en un espacio 2d suena excepcionalmente complejo (y una solución general sin mucha inteligencia sería muy lenta. Solo detectar las regiones conectadas es bastante complejo, de lo que dependería ... – ShuggyCoUk
Sugeriría construir una biblioteca para enumerar regiones (donde existen muchas implementaciones, por ejemplo variedades, patrones internos) y luego hacer que las regiones tengan varias operaciones útiles bien definidas en ellas, como atravesar los bordes y en cada punto verificar los valores a su alrededor, etc. – ShuggyCoUk