Con tôi có một tấm thảm bảng chữ cái để chơi, một cái gì đó như thế này:
Sau nhiều tháng với các ô của thảm được đặt ngẫu nhiên, tôi cảm thấy mệt mỏi và đặt tất cả các ô của chiếu được nhóm theo các phần theo màu nền của chúng. Vì vậy, nếu các chữ cái đại diện cho màu nền, tôi có một tấm thảm như thế này:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Vì vậy, đối với các màu A, B, C, D và E luôn có cách kết nối tất cả các ô có cùng màu nền theo chiều ngang hoặc chiều dọc trong chiếu. Đó là những gì tôi gọi là một tấm thảm được nhóm đúng màu . Bạn có thể xem các nhóm cho ví dụ trước trong các bảng sau:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Ngoài ra, chỉ có một nhóm cho mỗi màu, vì vậy điều này sẽ không hợp lệ:
ABA
ABA
Bởi vì màu A gạch không được nhóm trong một nhóm duy nhất. Điều này cũng sẽ không hợp lệ vì các ô không kết nối theo chiều ngang hoặc chiều dọc:
AB
BA
Các thách thức
Đưa ra một mảng các ký tự 2 chiều trong phạm vi ASCII có thể in được (không cần phải là một hình vuông miễn là kích thước của cả hai chiều bằng hoặc lớn hơn 1), kiểm tra xem mảng có đại diện cho một tấm thảm được nhóm đúng màu không (mỗi ký tự khác nhau trong mảng đại diện cho một màu khác nhau). Đầu vào có thể ở bất kỳ định dạng hợp lý nào miễn là nó đại diện cho một mảng các ký tự 2 chiều (mảng char 2D, mảng các chuỗi có cùng độ dài, v.v.) và đầu ra phải là một cặp giá trị trung thực và falsey (0 / 1, 't' / 'f', đúng / sai, bất cứ điều gì miễn là một cái gì đó được trả về và các giá trị trả về là nhất quán giữa các đầu vào).
Đây là môn đánh gôn, vì vậy có thể chương trình / chức năng / phương pháp / lambda ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!
Ví dụ
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Thảm của tôi được nhóm đúng theo màu sắc
(Tôi vẫn phải sửa các đường viền đó ...)