Hôm nọ, nhóm chúng tôi đến một phòng thoát. Một trong những câu đố liên quan đến một bảng gồm sáu công tắc cơ, trong đó bạn phải tìm ra sự kết hợp chính xác giữa bật và tắt để mở khóa một hộp, giống như thế này:
-v-v-v-
-v-v-v-
Là nhà phát triển, chúng tôi quyết định sẽ hiệu quả hơn khi thử từng một trong 2 ^ 6 = 64 kết hợp so với thực sự giải câu đố. Vì vậy, chúng tôi đã chỉ định một số người nghèo làm một số đếm nhị phân:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
vân vân
Thử thách
Viết chương trình, đưa ra tất cả các công tắc ở vị trí tắt dưới dạng một chuỗi được định dạng như trên, tạo ra tất cả các kết hợp bật và tắt theo bất kỳ thứ tự nào.
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Do đó, chương trình của bạn có thể nhận đầu vào thông qua stdin, tệp hoặc dưới dạng đối số chuỗi đơn và trả về hoặc in đầu ra. Nếu được trả về, đầu ra có thể nằm trong danh sách / mảng / v.v. thay vì một chuỗi đơn. Nếu đầu ra là một chuỗi đơn, các bảng nên được phân tách bằng dòng mới (cho phép dòng mới được phép.)
Các chuỗi đầu vào sẽ khớp với biểu thức chính quy r'((-v)+-)(\n(-v)+-)*'
và đại diện cho một bảng với tất cả các công tắc tắt. Điều này có nghĩa là không có trường hợp nào và các công tắc được căn trái. Mỗi hàng có thể không có cùng số lượng thiết bị chuyển mạch.
Mỗi bảng đầu ra phải có cùng định dạng với đầu vào, ngoại trừ việc v có thể được thay thế bằng ^ theo yêu cầu. Các bảng đầu ra có thể được phân tách bằng bất kỳ số lượng dòng mới.
Vì thời gian chạy tự nhiên là O (2 ^ n) trong số lượng công tắc, mã của bạn sẽ không được kiểm tra trên bất kỳ hơn 10 công tắc trong bất kỳ sắp xếp nào.
Đây là mã golf, vì vậy mã ngắn nhất về số byte thắng.
Đầu vào và đầu ra mẫu
Đầu vào:
-v-
Sản lượng có thể:
-v-
-^-
Đầu vào:
-v-
-v-
Sản lượng có thể:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
Vì việc kiểm tra câu trả lời của bạn để biết số lượng thiết bị chuyển mạch lớn hơn, đây là tập lệnh Python như một công cụ kiểm tra độ tỉnh táo. (Tôi đã bao gồm một đoạn mã được nhận xét hiện tại để tạo đầu ra dự kiến từ một tệp đầu vào nhất định trong trường hợp bạn muốn có nhiều trường hợp kiểm tra hơn. Thật không may, nó hơi linh hoạt về mặt đầu vào và đầu ra so với thông số kỹ thuật; đặt chuỗi đầu vào trong một tệp có tên 'đầu vào' và đầu ra được phân tách bằng dòng mới (xin lỗi, không có định dạng danh sách) trong một tệp có tên 'đầu ra' trong cùng thư mục và chạy python3 sanitycheck.py
.