Kết nối các chữ cái


10

Lấy cảm hứng từ trò chơi nhỏ này .

Thử thách

Đưa ra làm đầu vào vị trí ban đầu của lưới (luôn là 5x5), như thế này:

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

Bạn cần kết nối các chữ cái (cùng một chữ cái với nhau), loại bỏ tất cả các -khoảng trống. Các chữ cái sẽ luôn luôn A,B,C,D and E.

Mỗi cặp chữ cái phải được kết nối bằng một dòng không phân chia duy nhất có thể uốn cong ở các góc phải (sử dụng cùng một chữ cái để mô tả dòng).

Đầu vào được đảm bảo có mỗi chữ cái bắt đầu chính xác 2 lần và nó sẽ luôn có tất cả các chữ cái bắt đầu AE.

Đầu vào có thể được đọc từ stdin hoặc một chuỗi duy nhất dưới dạng arg cho một số hàm, hoặc thậm chí là một mảng / matriz / danh sách các ký tự, cách thuận tiện nhất cho ngôn ngữ mã hóa của bạn.

Vì đây là mã ngắn nhất tính bằng byte thắng!


Thí dụ

Không chỉ có một giải pháp cho mỗi vấn đề, mà các quy tắc áp dụng cho tất cả (không có khoảng trống và không có chữ cái tách biệt). Và đầu vào được đảm bảo có ít nhất một đầu ra chính xác.

Hãy bắt đầu kết nối các chữ cái A:

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

Bây giờ, kết nối các chữ B:

AABCD
AAB--
AABC-
AABBD
AAE-E

Bây giờ, kết nối các chữ C:

AABCD
AABC-
AABC-
AABBD
AAE-E

Bây giờ, kết nối các chữ cái D:

AABCD
AABCD
AABCD
AABBD
AAE-E

Và, cuối cùng là các chữ E:

AABCD
AABCD
AABCD
AABBD
AAEEE

Một mẫu khác

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 không phải là bản sao, vì thử thách này có đảm bảo đầu vào chính xác.
Nathan Merrill

Là đầu vào được đảm bảo để có mỗi chữ cái bắt đầu chính xác 2 lần? Nó sẽ luôn luôn có tất cả các chữ cái bắt đầu A-E?
TonMedel 15/03/2016

1
@NathanMerrill có vẻ như là một sự khác biệt khá nhỏ. Tôi không thể tưởng tượng rằng việc kiểm tra khả năng thanh toán sẽ chiếm phần lớn mã.
Martin Ender

1
@ MartinBüttner trong thử thách của tôi, kiểm tra khả năng thanh toán thử thách, không cần kết nối. Trong khi hai thử thách sẽ có những điểm tương đồng, chúng cảm thấy khác biệt lớn trong tâm trí tôi.
Nathan Merrill

4
Một kỹ thuật yêu thích của tôi đối với một số câu hỏi như thế này là sử dụng các số ngẫu nhiên để điền vào các vị trí để tránh quay lui và dừng lại nếu tôi nhấn một giải pháp. Điều đó chỉ hoạt động nếu một giải pháp được đảm bảo, nếu không chương trình có thể chạy mãi mãi (nếu một giải pháp được đảm bảo, bạn có thể thường xuyên viết mã để thời gian chạy dài trở nên khó khăn hơn theo cấp số nhân trong thời gian dài hơn). Đối với kỹ thuật này các câu hỏi rất khác nhau
Tôn Hospel

Câu trả lời:


4

Perl, 130 128 127 byte

Bao gồm +4 cho -n0(chương trình không hoạt động từ dòng lệnh -và do đó , không gian cũng được tính)

Gọi với đầu vào trên STDIN:

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

Bắt đầu với ^Dhoặc ^Zbất cứ điều gì đóng STDIN trên hệ thống của bạn

connectletters.pl:

/-/?map{$_="$`$_$'";s%\pL%$_="$`0$'";1while do{s/[$&-](.{5}|)0|0(.{5}|)[$&-]/0$+0/s};/$&/||$&%eg;!/1/&&do$0}A..E:exit!print
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.