Conecta las letras

10

Inspirado en este pequeño juego .

Desafío

Dada como entrada la posición inicial de una cuadrícula (siempre 5x5), así:

-ABCD
-A---
---C-
---BD
--E-E

Necesita conectar las letras (las mismas letras juntas), eliminando todos los -espacios vacíos . Las letras serán siempre A,B,C,D and E.

Cada par de letras debe estar conectado por una sola línea no ramificada que puede doblarse en ángulo recto (usando la misma letra para representar la línea).

Se garantiza que la entrada tendrá cada letra inicial exactamente 2 veces y siempre tendrá todas las letras iniciales AE.

La entrada se puede leer desde stdin, o una sola cadena como arg para alguna función, o incluso una matriz / matriz / lista de caracteres, la forma más conveniente de su lenguaje de codificación.

¡Dado que este es el más corto, el código en bytes gana!


Ejemplo

No solo hay una solución para cada problema, sino que las reglas se aplican a todos (sin espacios vacíos ni letras separadas). Y se garantiza que la entrada tenga al menos una salida correcta.

Comencemos conectando las letras A:

AABCD
AA---
AA-C-
AA-BD
AAE-E

Ahora, conectando las letras B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Ahora, conectando las letras C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Ahora, conectando las letras D:

AABCD
AABCD
AABCD
AABBD
AAE-E

Y, finalmente, las letras E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Otras muestras

input:
E--E-
BB-C-
AD---
---C-
AD---

output:
EEEEE
BBECE
ADECE
ADECE
ADEEE

input:
A----
---B-
-C-C-
-D-D-
BE-EA

output:
AAAAA
BBBBA
BCCCA
BDDDA
BEEEA
remoto
fuente
@ Sp3000 no es un dup, ya que este desafío tiene la garantía de una entrada correcta.
Nathan Merrill
¿Se garantiza que la entrada tenga cada letra inicial exactamente 2 veces? ¿Siempre tendrá todas las letras iniciales A-E?
Ton Hospel
1
@NathanMerrill que parece una diferencia bastante menor. No puedo imaginar que la verificación de la solvencia ocupará la mayoría del código.
Martin Ender
1
@ MartinBüttner en mi desafío, la verificación de la capacidad de solución es el desafío, no es necesario conectarse. Si bien los dos desafíos tendrán similitudes, en mi mente se sienten drásticamente diferentes.
Nathan Merrill
44
Una técnica mía favorita para algunas preguntas como esta es usar números aleatorios para llenar posiciones para evitar retroceder y detenerme si encuentro una solución. Eso solo funciona si se garantiza una solución, de lo contrario, el programa puede ejecutarse para siempre (si se garantiza una solución, a menudo puede escribir el código para que los tiempos de ejecución largos sean exponencialmente más improbables para tiempos más largos). Para esta técnica, las preguntas son muy diferentes
Ton Hospel

Respuestas:

4

Perl, 130 128 127 bytes

Incluye +4 para -n0 (el programa no funciona desde la línea de comandos, por lo -que también se cuenta el espacio)

Llame con la entrada en STDIN:

perl -n0 connectletters.pl
E--E-
BB-C-
AD---
---C-
AD---

Terminar con ^D o ^Zlo que sea que cierre STDIN en su sistema

connectletters.pl:

/-/?map{$_="$`$_$'";s%\pL%$_="$`0$'";1while do{s/[$&-](.{5}|)0|0(.{5}|)[$&-]/0$+0/s};/$&/||$&%eg;!/1/&&do$0}A..E:exit!print
Ton Hospel
fuente