Hubungkan surat-surat itu

10

Terinspirasi oleh game kecil ini .

Tantangan

Diberikan sebagai input posisi awal kisi (selalu 5x5), seperti ini:

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

Anda perlu menghubungkan huruf-huruf (semua huruf yang sama), menghapus semua -ruang kosong . Surat-surat itu akan selalu A,B,C,D and E.

Setiap pasangan huruf harus dihubungkan oleh satu baris tidak bercabang yang dapat menekuk pada sudut kanan (menggunakan huruf yang sama untuk menggambarkan garis).

Input dijamin memiliki masing-masing huruf awal tepat 2 kali dan itu akan selalu memiliki semua huruf awal AE.

Input dapat dibaca dari stdin, atau satu-satunya string sebagai arg ke beberapa fungsi, atau bahkan array / matriz / daftar karakter, cara paling mudah untuk bahasa pengkodean Anda.

Karena ini adalah terpendek kode dalam byte menang!


Contoh

Tidak hanya ada satu solusi untuk setiap masalah, tetapi aturan berlaku untuk semua (tidak ada ruang kosong dan tidak ada huruf yang terpisah). Dan input dijamin memiliki setidaknya satu output yang benar.

Mari kita mulai menghubungkan huruf A:

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

Sekarang, menghubungkan huruf B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Sekarang, menghubungkan huruf C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Sekarang, menghubungkan huruf D:

AABCD
AABCD
AABCD
AABBD
AAE-E

Dan, akhirnya huruf E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Sampel lain

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
dihapus
sumber
@ Sp3000 bukan dup, karena tantangan ini memiliki jaminan input yang benar.
Nathan Merrill
Apakah input dijamin memiliki masing-masing huruf awal tepat 2 kali? Apakah akan selalu memiliki semua huruf awal A-E?
Ton Hospel
1
@NathanMerrill itu sepertinya perbedaan yang cukup kecil. Saya tidak dapat membayangkan bahwa pemeriksaan untuk solvabilitas akan mengambil sebagian besar kode.
Martin Ender
1
@ MartinBüttner dalam tantangan saya, pemeriksaan solvabilitas adalah tantangan, tidak diperlukan koneksi. Sementara dua tantangan akan memiliki kesamaan, mereka merasa berbeda secara drastis dalam pikiran saya.
Nathan Merrill
4
Teknik favorit saya untuk beberapa pertanyaan seperti ini adalah menggunakan angka acak untuk mengisi posisi untuk menghindari mundur dan berhenti jika saya menemukan solusi. Itu hanya bekerja jika suatu solusi dijamin, jika tidak program dapat berjalan selamanya (jika suatu solusi dijamin Anda dapat sering menulis kode sehingga runtimes yang lama mendapatkan secara eksponensial lebih tidak mungkin untuk waktu yang lebih lama). Untuk teknik ini pertanyaan yang sangat berbeda
Ton Hospel

Jawaban:

4

Perl, 130 128 127 byte

Termasuk +4 untuk -n0(program tidak bekerja dari commandline jadi -dan spasi dihitung juga)

Panggil dengan input di STDIN:

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

Teminasi dengan ^Datau ^Zapa pun yang menutup STDIN pada sistem Anda

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
sumber