Collega le lettere


10

Ispirato da questo piccolo gioco .

Sfida

Dato come input la posizione iniziale di una griglia (sempre 5x5), in questo modo:

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

Devi collegare le lettere (stesse lettere tutte insieme), rimuovendo tutti gli -spazi vuoti . Le lettere saranno sempre A,B,C,D and E.

Ogni coppia di lettere deve essere collegata da un'unica linea non ramificata che può piegarsi ad angolo retto (usando la stessa lettera per rappresentare la linea).

Si garantisce che ogni input abbia ogni lettera iniziale esattamente 2 volte e avrà sempre tutte le lettere iniziali AE.

L'input può essere letto da stdin, o una sola stringa come arg per alcune funzioni, o anche un array / matriz / elenco di caratteri, il modo più conveniente per il tuo linguaggio di codifica.

Dal momento che questo è il più breve del codice in byte vince!


Esempio

Non esiste una sola soluzione per ciascun problema, ma le regole si applicano a tutti (nessuno spazio vuoto e nessuna lettera separata). E l'ingresso è garantito per avere almeno un output corretto.

Iniziamo a collegare le lettere A:

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

Ora, collegando le lettere B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Ora, collegando le lettere C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Ora, collegando le lettere D:

AABCD
AABCD
AABCD
AABBD
AAE-E

E, infine, le lettere E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Un altro campione

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

@ Sp3000 non è un duplicato, poiché questa sfida ha una garanzia di input corretto.
Nathan Merrill,

È garantito che l'input abbia ciascuna lettera iniziale esattamente 2 volte? Avrà sempre tutte le lettere iniziali A-E?
Ton Hospel

1
@NathanMerrill che sembra una differenza abbastanza piccola. Non riesco a immaginare che la verifica della solvibilità occuperebbe la maggior parte del codice.
Martin Ender,

1
@ MartinBüttner nella mia sfida, la verifica della solvibilità è la sfida, nessuna connessione necessaria. Mentre le due sfide avranno somiglianze, nella mia mente si sentono drasticamente diverse.
Nathan Merrill,

4
Una mia tecnica preferita per alcune domande come questa è quella di usare numeri casuali per riempire posizioni per evitare il backtracking e fermarmi se trovo una soluzione. Funziona solo se una soluzione è garantita, altrimenti il ​​programma può essere eseguito per sempre (se una soluzione è garantita, puoi spesso scrivere il codice in modo che i tempi di esecuzione lunghi diventino esponenzialmente più improbabili per periodi più lunghi). Per questa tecnica le domande sono molto diverse
Ton Hospel,

Risposte:


4

Perl, 130 128 127 byte

Include +4 per -n0(il programma non funziona dalla riga di comando quindi anche lo -spazio viene conteggiato)

Chiama con l'ingresso su STDIN:

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

Teminate con ^Do ^Zqualunque cosa chiuda STDIN sul vostro 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.