Reliez les lettres

10

Inspiré par ce petit jeu .

Défi

Étant donné en entrée la position initiale d'une grille (toujours 5x5), comme ceci:

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

Vous devez connecter les lettres (les mêmes lettres toutes ensemble), en supprimant tous les -espaces vides . Les lettres seront toujours A,B,C,D and E.

Chaque paire de lettres doit être reliée par une seule ligne non ramifiée qui peut se plier à angle droit (en utilisant la même lettre pour représenter la ligne).

L'entrée est garantie d'avoir chaque lettre de départ exactement 2 fois et elle aura toujours toutes les lettres de départ AE.

L'entrée peut être lue à partir de stdin, ou une seule chaîne en tant qu'arg dans une fonction, ou même un tableau / matriz / liste de caractères, le moyen le plus pratique pour votre langage de codage.

Puisqu'il s'agit de code le plus court en octets gagne!


Exemple

Il n'y a pas qu'une seule solution à chaque problème, mais les règles s'appliquent à tous (pas d'espace vide et pas de lettres séparées). Et l'entrée est garantie d'avoir au moins une sortie correcte.

Commençons par connecter les lettres A:

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

Maintenant, connectez les lettres B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Maintenant, connectez les lettres C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Maintenant, connectez les lettres D:

AABCD
AABCD
AABCD
AABBD
AAE-E

Et enfin les lettres E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Un autre échantillon

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
supprimé
la source
@ Sp3000 n'est pas un dup, car ce défi a la garantie d'une entrée correcte.
Nathan Merrill
L'entrée est-elle garantie d'avoir chaque lettre de départ exactement 2 fois? Aura-t-il toujours toutes les lettres de départ A-E?
Ton Hospel
1
@NathanMerrill qui semble être une différence assez mineure. Je ne peux pas imaginer que le contrôle de la solvabilité occuperait la majorité du code.
Martin Ender
1
@ MartinBüttner dans mon défi, le contrôle de la solvabilité est le défi, aucune connexion nécessaire. Bien que les deux défis aient des similitudes, ils se sentent radicalement différents dans mon esprit.
Nathan Merrill
4
Une de mes techniques préférées pour certaines questions comme celle-ci consiste à utiliser des nombres aléatoires pour remplir les positions afin d'éviter de revenir en arrière et de m'arrêter si je trouve une solution. Cela ne fonctionne que si une solution est garantie, sinon le programme peut s'exécuter indéfiniment (si une solution est garantie, vous pouvez souvent écrire le code de sorte que les longues durées d'exécution soient exponentiellement plus improbables pendant des périodes plus longues). Pour cette technique, les questions sont très différentes
Ton Hospel

Réponses:

4

Perl, 130 128 127 octets

Comprend +4 pour -n0(le programme ne fonctionne pas à partir de la ligne de commande -et l'espace est également compté)

Appelez avec l'entrée sur STDIN:

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

Teminate avec ^Dou ^Zou tout ce qui ferme STDIN sur votre système

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
la source