Mis hijos tienen una estera con el alfabeto para jugar, algo como esto:
Después de meses con los mosaicos de la alfombra colocados al azar, me cansé y coloqué todos los mosaicos de la alfombra agrupados por secciones de acuerdo con sus colores de fondo. Entonces, si las letras representan el color de fondo, tengo un tapete como este:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Por lo tanto, para los colores A, B, C, D y E, siempre hay una manera de conectar todos los mosaicos con el mismo color de fondo, ya sea horizontal o verticalmente en el tapete. Eso es lo que yo llamo una alfombra debidamente agrupada por colores . Puede ver los grupos para el ejemplo anterior en las siguientes tablas:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Además, solo hay un grupo para cada color, por lo que esto no sería válido:
ABA
ABA
Porque los mosaicos de color A no se agrupan en un solo grupo. Esto tampoco sería válido porque los mosaicos no se conectan ni horizontal ni verticalmente:
AB
BA
El reto
Dado un conjunto de caracteres bidimensionales en el rango ASCII imprimible (no es necesario que sea cuadrado siempre que el tamaño de ambas dimensiones sea igual o mayor que 1), verifique si el conjunto representa una estera correctamente agrupada por colores (cada carácter diferente en la matriz representa un color diferente). La entrada puede estar en cualquier formato razonable siempre que represente una matriz de caracteres bidimensional (matriz de caracteres 2D, matriz de cadenas de la misma longitud, etc.), y la salida debe ser un par de valores de verdad y falsey (0 / 1, 't' / 'f', verdadero / falso, lo que sea siempre que se devuelva algo y los valores de retorno sean consistentes en todas las entradas).
Este es el código de golf, ¡así que puede ganar el programa / función / método / lambda más corto para cada idioma!
Ejemplos
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Mi esterilla correctamente agrupada por colores.
(Todavía tengo que arreglar esas fronteras ...)
Respuestas:
MATL ,
1615 bytesLa entrada es una matriz de caracteres 2D (con filas separadas por
;
). La salida es0
si la entrada califica, o de1
otra manera.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
El código verifica esencialmente si cada carácter en la entrada tiene solo un componente conectado, considerando la conectividad 4 (es decir, sin diagonales).
Los caracteres repetidos se procesan repetidamente (lo que es más elegante que la deduplicación).
fuente
Befunge-93, 317 bytes
Editar: corregido para el recuento de bytes adecuado. También se podría jugar más al golf
Imprime 1 como la verdad, 0 como la falsey
Pruébalo en línea
Aquí hay una visualización del camino que toma el puntero
Nota: esto es para una versión anterior
Cómo funciona
Aquí hay un pseudocódigo rápido y sucio
Básicamente, después de almacenar la entrada, pasa por todo, verificando cada espacio. Cuando encuentra un espacio con un carácter, agrega las coordenadas a la pila. Luego verifica los espacios a su alrededor para el mismo personaje de forma recursiva, configurando cada espacio en 0. Cuando ha agotado la sección de ese personaje, verifica si ese personaje ya ha tenido una sección. Si es así, devuelva 0. Si no, agréguelo a la matriz de caracteres. Una vez que ha pasado por toda la cuadrícula sin duplicados, devuelve 1.
Para las personas familiarizadas con Befunge, aquí hay una versión separada del código
fuente
J, 66 bytes
c
define un verbo que indica si una matriz de unos y ceros se c onnected. Trata los singleton como un caso especial de verdad. De lo contrario, se necesita un recuento ortogonal vecino de cada celda, luego el signo de ese recuento, luego se multiplica con la matriz original: si ese producto es igual a la matriz original, entonces está conectado.El recuento de vecinos se logra cambiando en las 4 direcciones y luego sumando. El cambio de 4 direcciones se logra utilizando la función "
x
-arg can by a table" de rotar / cambiar|.
Finalmente, la respuesta en sí se logra creando una matriz de unos / ceros para cada elemento único
~.
de la entrada, y luego asegurando que todas esas matrices estén conectadas. Este es el verbo en la segunda línea.Pruébalo en línea!
fuente
JavaScript (ES6), 114 bytes
Toma la entrada como una matriz de cadenas. Devoluciones
0
o1
.Casos de prueba
Mostrar fragmento de código
Formateado y comentado
fuente
Wolfram Language (Mathematica) , 96 bytes
Pruébalo en línea!
Toma la entrada como una lista 2D de caracteres: por ejemplo,
{{"A","B"},{"C","D"}}
,.El
personaje es\[Transpose]
.Cómo funciona
Para cada carácter
c
en la entrada, toma laSubgraph
de laGridGraph
de la mismaDimensions
como la entrada que corresponde a cadaPosition
en el quec
se produce, y comprueba si se trata de unaConnectedGraphQ
.fuente
Python 2 , 247 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 181 bytes
Siempre que encuentre un nuevo mosaico de color, llene los conectados con cadenas vacías. Si el tapete está correctamente agrupado por colores, todos los mosaicos deben llenarse con cadenas vacías.
Código de prueba
Mostrar fragmento de código
fuente