Hãy nói rằng bạn đã thấy bạn của mình nhập mật khẩu của họ vào điện thoại Android của họ. Bạn không nhớ họ đã tạo ra mẫu như thế nào nhưng bạn nhớ mẫu đó trông như thế nào. Là người bạn quan tâm mà bạn muốn biết mật khẩu của họ an toàn đến mức nào. Công việc của bạn là tính toán tất cả các cách mà một mẫu cụ thể có thể được thực hiện.
Cách thức hoạt động của các mẫu Android
Các mẫu được vẽ trên lưới 3x3 của các nút. Trong một mẫu người ta truy cập một loạt các nút mà không bao giờ nhấc ngón tay khỏi màn hình. Mỗi nút họ truy cập được kết nối với nút trước đó bằng một cạnh. Có hai quy tắc cần ghi nhớ.
Bạn không thể truy cập bất kỳ một nút nào nhiều lần
Một cạnh có thể không đi qua một nút không mong muốn
Lưu ý rằng, mặc dù thường rất khó thực hiện và do đó không phổ biến lắm trong các kết hợp khóa Android thực sự, có thể di chuyển như một Hiệp sĩ . Đó là, có thể di chuyển từ một bên đến một góc không liền kề hoặc cách khác xung quanh. Dưới đây là hai ví dụ về các mẫu sử dụng một động thái như vậy:
Đây là một Gif hoạt hình của nó đang được thực hiện.
Giải quyết một mô hình
Một mô hình điển hình có thể trông giống như thế này:
Với một mẫu đơn giản như thế này, có hai cách để vẽ mẫu. Bạn có thể bắt đầu ở một trong hai đầu lỏng lẻo và đi qua các nút được tô sáng đến nút kia. Mặc dù điều này đúng với nhiều mẫu đặc biệt là các mẫu mà con người thường sử dụng nhưng điều này không đúng với tất cả các mẫu.
Hãy xem xét các mẫu sau:
Có hai giải pháp có thể nhận ra ngay lập tức. Một bắt đầu ở phía trên bên trái:
Và một bắt đầu ở trung tâm dưới cùng:
Tuy nhiên, vì một dòng được phép đi qua một điểm khi nó đã được chọn, có một mẫu bổ sung bắt đầu ở giữa trên cùng:
Mẫu cụ thể này có 3 giải pháp nhưng mẫu có thể có bất kỳ chỗ nào giữa 1 và 4 giải pháp [cần dẫn nguồn] .
Dưới đây là một số ví dụ về mỗi:
1.
2.
3.
4.
Tôi / O
Một nút có thể được biểu diễn dưới dạng các số nguyên từ 0 đến 9, bao gồm các chuỗi tương đương hoặc các ký tự từ a đến i (hoặc A đến I). Mỗi nút phải có một đại diện duy nhất từ một trong các bộ này.
Một giải pháp sẽ được đại diện bởi một thùng chứa có thứ tự chứa các biểu diễn nút. Các nút phải được sắp xếp theo thứ tự mà chúng được truyền qua.
Một mẫu sẽ được đại diện bởi một thùng chứa các cặp nút không có thứ tự. Mỗi cặp đại diện cho một cạnh bắt đầu kết nối hai điểm trong cặp. Mô hình đại diện không phải là duy nhất.
Bạn sẽ lấy một biểu diễn mẫu làm đầu vào thông qua các phương thức nhập chuẩn và xuất tất cả các giải pháp có thể tạo ra cùng một mẫu thông qua các phương thức đầu ra tiêu chuẩn.
Bạn có thể giả sử mỗi đầu vào sẽ có ít nhất một giải pháp và sẽ kết nối ít nhất 4 nút.
Bạn có thể chọn sử dụng một container được đặt hàng thay cho một container không có thứ tự, nếu bạn rất muốn hoặc bị buộc phải lựa chọn ngôn ngữ.
Các trường hợp thử nghiệm
Với các nút được sắp xếp theo mẫu sau:
0 1 2
3 4 5
6 7 8
Hãy {...}
là một container không có thứ tự, [...]
là một container được đặt hàng và (...)
là một cặp.
Các đầu vào và đầu ra sau phải khớp
{(1,4),(3,5),(5,8)} -> {[1,4,3,5,8]}
{(1,4),(3,4),(5,4),(8,5)} -> {[1,4,3,5,8]}
{(0,4),(4,5),(5,8),(7,8)} -> {[0,4,5,8,7],[7,8,5,4,0]}
{(0,2),(2,4),(4,7)} -> {[0,1,2,4,7],[1,0,2,4,7],[7,4,2,1,0]}
{(0,2),(2,6),(6,8)} -> {[0,1,2,4,6,7,8],[1,0,2,4,6,7,8],[8,7,6,4,2,1,0],[7,8,6,4,2,1,0]}
{(2,3),(3,7),(7,8)} -> {[2,3,7,8],[8,7,3,2]}
{(0,7),(1,2),(1,4),(2,7)} -> {[0,7,2,1,4],[4,1,2,7,0]}
{(0,4),(0,7),(1,3),(2,6),(2,8),(3,4),(5,7)} -> {[1,3,4,0,7,5,8,2,6]}
{(1,3),(5,8)} -> {}
Một album imgur của tất cả các trường hợp thử nghiệm như hình ảnh có thể được tìm thấy ở đây . Các mẫu là trong các giải pháp màu xanh trong màu đỏ.
Chấm điểm
Đây là mã golf. Ít byte nhất sẽ thắng.