Chúng ta hãy đại diện cho một viên gạch tiêu chuẩn là [__]
(và bỏ qua thực tế là đỉnh được mở). Khi các viên gạch này được xếp chồng lên nhau, mọi lớp khác được bù lại bằng một nửa viên gạch, như thường lệ trong xây dựng gạch:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Do đó, mỗi viên gạch có nhiều nhất là sáu hàng xóm và hai viên gạch không thể xếp hàng trực tiếp theo chiều dọc.
Điểm mấu chốt là sự sắp xếp của những viên gạch này không bị phá hủy , mà chỉ được giữ bằng trọng lực. Vì vậy, điều quan trọng là mỗi viên gạch trong cấu trúc phải ổn định, nếu không thì toàn bộ cấu trúc không ổn định.
Có ba cách một viên gạch riêng lẻ có thể ổn định:
- Bất kỳ gạch trên mặt đất (dòng gạch thấp nhất) là ổn định.
Bất kỳ viên gạch nào có hai viên gạch trực tiếp bên dưới đều ổn định:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Bất kỳ viên gạch nào có một viên gạch cả trên và dưới nó trên cùng một mặt đều ổn định:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
Từ những quy tắc này, chúng ta có thể thấy, ví dụ, sự sắp xếp
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
là không ổn định bởi vì gạch bên phải trên không ổn định, đó là tất cả những gì nó cần.
Một cấu trúc gạch chỉ ổn định nếu tất cả các viên gạch của nó ổn định.
Thử thách
Nhiệm vụ của bạn là viết một hàm lấy chuỗi cấu trúc gạch và trả về giá trị trung thực nếu cấu trúc ổn định và giá trị giả nếu không ổn định. ( định nghĩa trung thực / giả )
Chuỗi đầu vào có thể lớn tùy ý nhưng nó sẽ luôn là một lưới các ký tự hình chữ nhật, với các khoảng trống lấp đầy các khoảng trống của các viên gạch. Chiều rộng lưới ký tự sẽ chia hết cho 4 nhưng chiều cao có thể là số lẻ hoặc số chẵn.
Lưới gạch luôn mở rộng ở trên và bên phải của vị trí gạch dưới bên trái:
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
Tùy thuộc vào cấu trúc, mỗi cái BRK?
đại diện cho một viên gạch ( [__]
) hoặc khoảng trống (4 khoảng trắng).
Lưu ý rằng các hốc nửa gạch được lấp đầy các khoảng trống để đảm bảo lưới ký tự là hình chữ nhật.
Chấm điểm
Mã ngắn nhất tính bằng byte thắng.
Ghi chú
- Nếu muốn bạn có thể sử dụng
.
thay vì khoảng trắng làm ký tự khoảng trống. - Chuỗi rỗng được coi là ổn định.
- Nếu ngôn ngữ của bạn không có chức năng, bạn có thể sử dụng biến chuỗi được đặt tên làm đầu vào và gán kết quả cho biến khác.
- Nếu ngôn ngữ của bạn không có chuỗi, bạn có thể làm bất cứ điều gì có vẻ phù hợp cho đầu vào.
Các trường hợp thử nghiệm
Các trường hợp thử nghiệm khác nhau, cách nhau bởi các dòng trống. Để rõ ràng .
được sử dụng thay vì không gian cho không gian trống.
Ổn định:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Không ổn định:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
. , mà không cần một động cơ vật lý, nếu bạn cảm thấy thích nó.)