Verbinde die Buchstaben

10

Inspiriert von diesem kleinen Spiel .

Herausforderung

Geben Sie als Eingabe die Anfangsposition eines Gitters (immer 5x5) wie folgt an:

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

Sie müssen die Buchstaben verbinden (alle gleichen Buchstaben zusammen) und alle -Leerzeichen entfernen . Die Buchstaben werden immer sein A,B,C,D and E.

Jedes Buchstabenpaar muss durch eine einzelne unverzweigte Linie verbunden sein, die sich im rechten Winkel biegen kann (wobei derselbe Buchstabe zur Darstellung der Linie verwendet wird).

Die Eingabe hat garantiert genau 2 Mal jeden Startbuchstaben und immer alle Startbuchstaben AE.

Die Eingabe kann von stdin oder einer einzigen Zeichenfolge als Argument für eine Funktion oder sogar von einem Array / einer Matriz / einer Liste von Zeichen gelesen werden. Dies ist der bequemste Weg zu Ihrer Codierungssprache.

Da dies gewinnt der kürzeste Code in Bytes!


Beispiel

Es gibt nicht nur eine Lösung für jedes Problem, sondern die Regeln gelten für alle (kein Leerzeichen und keine getrennten Buchstaben). Und der Eingang hat garantiert mindestens einen korrekten Ausgang.

Beginnen wir mit dem Verbinden der Buchstaben A:

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

Verbinden Sie nun die Buchstaben B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Verbinden Sie nun die Buchstaben C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Verbinden Sie nun die Buchstaben D:

AABCD
AABCD
AABCD
AABBD
AAE-E

Und schließlich die Buchstaben E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Noch ein Beispiel

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
entfernt
quelle
@ Sp3000 kein Dup, da diese Herausforderung eine Garantie für die korrekte Eingabe hat.
Nathan Merrill
Ist garantiert, dass die Eingabe jeden Startbuchstaben genau zweimal enthält? Wird es immer alle Anfangsbuchstaben haben A-E?
Ton Hospel
1
@ NathanMerrill, das scheint ein ziemlich kleiner Unterschied zu sein. Ich kann mir nicht vorstellen, dass die Überprüfung der Lösbarkeit den größten Teil des Codes ausmachen würde.
Martin Ender
1
@ MartinBüttner in meiner Herausforderung, die Prüfung für Lösbarkeit ist die Herausforderung, nicht erforderlich verbindet. Obwohl die beiden Herausforderungen Ähnlichkeiten aufweisen werden, fühlen sie sich in meinem Kopf drastisch unterschiedlich an.
Nathan Merrill
4
Eine meiner Lieblingstechniken für einige Fragen wie diese ist die Verwendung von Zufallszahlen zum Ausfüllen von Positionen, um ein Zurückverfolgen zu vermeiden und anzuhalten, wenn ich eine Lösung finde. Dies funktioniert nur, wenn eine Lösung garantiert ist, andernfalls kann das Programm für immer ausgeführt werden (wenn eine Lösung garantiert ist, können Sie den Code häufig so schreiben, dass lange Laufzeiten für längere Zeit exponentiell unwahrscheinlicher werden). Für diese Technik die Fragen sind sehr unterschiedlich
Ton Hospel

Antworten:

4

Perl, 130 128 127 Bytes

Beinhaltet +4 für -n0(Programm funktioniert nicht über die Befehlszeile, daher wird auch der -Speicherplatz gezählt)

Anruf mit dem Eingang auf STDIN:

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

Teminate mit ^Doder ^Zoder was auch immer schließt STDIN auf Ihrem System

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
quelle