Połącz litery

10

Zainspirowany tą małą grą .

Wyzwanie

Jako dane wejściowe podano początkową pozycję siatki (zawsze 5 x 5), jak poniżej:

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

Musisz połączyć litery (wszystkie te same litery razem), usuwając wszystkie puste -spacje. Listy będą zawsze A,B,C,D and E.

Każda para liter musi być połączona pojedynczą nierozgałęzioną linią, która może zginać się pod kątem prostym (używając tej samej litery do przedstawienia linii).

Na wejściu gwarantowane jest, że każda litera początkowa ma dokładnie 2 razy i zawsze będzie miała wszystkie początkowe litery AE.

Dane wejściowe można odczytać ze stdin lub jednego łańcucha jako argumentu do jakiejś funkcji, a nawet tablicy / matriz / listy znaków, co jest najbardziej dogodnym sposobem na Twój język kodowania.

Ponieważ jest to wygrywa najkrótszy kod w bajtach!


Przykład

Dla każdego problemu istnieje nie tylko jedno rozwiązanie, ale reguły dotyczą wszystkich (bez pustej przestrzeni i oddzielnych liter). A wejście ma zagwarantowane co najmniej jedno prawidłowe wyjście.

Zacznijmy łączyć litery A:

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

Teraz łącząc litery B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Teraz łącząc litery C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Teraz łącząc litery D:

AABCD
AABCD
AABCD
AABBD
AAE-E

I wreszcie litery E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Kolejne próbki

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
oddalony
źródło
@ Sp3000 nie duplikat, ponieważ to wyzwanie ma gwarancję poprawności danych wejściowych.
Nathan Merrill,
Czy wejście ma gwarantowane, że każda litera początkowa ma dokładnie 2 razy? Czy zawsze będzie zawierać wszystkie litery początkowe A-E?
Ton Hospel
1
@NathanMerrill, która wydaje się dość niewielką różnicą. Nie mogę sobie wyobrazić, że sprawdzenie zdolności do rozwiązania zajmie większość kodu.
Martin Ender
1
@ MartinBüttner w moim wyzwaniu, sprawdzenie zdolności do rozwiązania jest wyzwaniem, nie wymaga połączenia. Chociaż oba wyzwania będą miały podobieństwa, w moim umyśle drastycznie się różnią.
Nathan Merrill,
4
Moją ulubioną techniką w przypadku niektórych takich pytań jest użycie liczb losowych do wypełnienia pozycji, aby uniknąć cofania się i zatrzymać, jeśli trafię w rozwiązanie. Działa to tylko wtedy, gdy rozwiązanie jest gwarantowane, w przeciwnym razie program może działać wiecznie (jeśli rozwiązanie jest gwarantowane, często można napisać kod, aby dłuższe czasy działania były wykładniczo bardziej mało prawdopodobne przez dłuższy czas). W przypadku tej techniki pytania bardzo różne
Ton Hospel

Odpowiedzi:

4

Perl, 130 128 127 bajtów

Obejmuje +4 dla -n0(program nie działa z wiersza poleceń, więc -spacja jest również liczona)

Zadzwoń z wejściem na STDIN:

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

Teminate z ^Dlub ^Zcokolwiek, co zamyka STDIN w twoim systemie

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
źródło