Từ khóa mô tả (để tìm kiếm): Tạo hai ma trận tương đương, chồng chéo, mảng, tìm
Thử thách
Santa đã có một lịch sử yêu tinh ăn cắp quà từ kho tiền của anh ta trong quá khứ, vì vậy năm nay anh ta đã thiết kế một khóa rất khó để bẻ khóa, và dường như nó đã giữ các yêu tinh trong năm nay. Thật không may, anh ta đã mất kết hợp và anh ta cũng không thể tìm ra cách mở nó! May mắn thay, anh ấy đã thuê bạn viết một chương trình để tìm sự kết hợp. Nó không cần phải là cái ngắn nhất, nhưng anh ta cần tìm nó càng nhanh càng tốt!
Anh ấy có một lịch trình rất nghiêm ngặt và anh ấy không thể chờ đợi lâu. Điểm của bạn sẽ là tổng thời gian chạy của chương trình của bạn nhân với số bước mà chương trình của bạn đưa ra cho đầu vào tính điểm. Điểm số thấp nhất chiến thắng.
Thông số kỹ thuật
Khóa là một ma trận vuông 1s và 0. Nó được đặt thành một sự sắp xếp ngẫu nhiên 1 và 0 và cần được đặt thành một mã được chỉ định. May mắn thay, Santa nhớ mã yêu cầu.
Có một vài bước anh ta có thể thực hiện. Mỗi bước có thể được thực hiện trên bất kỳ ma trận con liền kề nào (nghĩa là bạn phải chọn một ma trận con được giới hạn hoàn toàn bởi một góc trên cùng bên trái và dưới cùng bên phải) (có thể là ma trận con không vuông):
- Xoay phải 90 độ *
- Xoay trái 90 độ *
- Xoay 180 độ
- Chu kỳ mỗi
n
phần tử hàng phải hoặc trái (kết thúc tốt đẹp) - Chu kỳ mỗi
m
phần tử cột lên hoặc xuống (kết thúc tốt đẹp) - Lật theo chiều ngang
- Lật theo chiều dọc
- Lật trên đường chéo chính *
- Lật trên đường chéo chính *
* chỉ khi ma trận con là hình vuông
Tất nhiên, anh ta cũng có thể thực hiện các bước này trên toàn bộ ma trận. Vì 1 và 0 chỉ có thể được hoán đổi trên ma trận nhưng giá trị của hình vuông không thể thay đổi trực tiếp, nên số 1 và 0 là giống nhau cho cấu hình bắt đầu và kết thúc.
Định dạng thông số kỹ thuật + Quy tắc
Bạn sẽ được cung cấp đầu vào dưới dạng hai ma trận vuông (vị trí bắt đầu và vị trí kết thúc) theo bất kỳ định dạng hợp lý nào bạn muốn. Đầu ra phải là một chuỗi các bước này ở bất kỳ định dạng nào có thể đọc được. Vì đây không phải là môn đánh gôn, vui lòng biến nó thành một định dạng dễ kiểm chứng, nhưng đó không phải là một yêu cầu nghiêm ngặt. Bạn có thể chọn lấy độ dài cạnh của ma trận trong đầu vào nếu bạn muốn.
Chương trình của bạn sẽ được chạy trên máy tính của tôi (Linux Mint, chi tiết phiên bản chính xác có sẵn theo yêu cầu nếu có ai quan tâm: P) và tôi sẽ tính thời gian dựa trên khoảng thời gian giữa lúc tôi nhấn "enter" trên dòng lệnh và khi lệnh thoát.
Các trường hợp thử nghiệm
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Lấy toàn bộ ma trận. Chu kỳ mỗi cột lên 1.
- Lấy hai cột giữa làm ma trận phụ. Chu kỳ mỗi cột xuống 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Lấy toàn bộ ma trận. Chu kỳ mỗi cột xuống 1.
- Lấy cột giữa. Chu kỳ xuống 2.
- Lấy 2 hàng trên cùng. Lật nó theo chiều dọc.
- Lấy 2 yếu tố trên cùng bên phải của hàng trên cùng. Hoán đổi chúng (xoay phải / trái 1, lật theo chiều ngang).
- Lấy 2 yếu tố ngoài cùng bên trái của hàng trên cùng. Trao đổi chúng.
Có thể có các phương pháp hiệu quả hơn, nhưng điều đó không thành vấn đề. Vui lòng chỉ ra chúng trong các ý kiến nếu bạn tìm thấy một mặc dù :)
Đánh giá vụ án
Trường hợp thử nghiệm này sẽ được sử dụng để đánh giá trình của bạn. Nếu tôi tin rằng một câu trả lời dành riêng cho trường hợp thử nghiệm quá nhiều, tôi có quyền lặp lại một đầu vào ngẫu nhiên và từ chối tất cả các câu trả lời với trường hợp mới. Trường hợp thử nghiệm có thể được tìm thấy ở đây , nơi trên cùng là bắt đầu và dưới cùng là cấu hình mong muốn.
Nếu tôi tin rằng câu trả lời là chuyên môn quá nhiều, MD5 của trường hợp thử nghiệm tiếp theo là 3c1007ebd4ea7f0a2a1f0254af204eed
. (Điều này được viết ở đây ngay bây giờ để giải phóng bản thân khỏi những lời buộc tội gian lận: P)
Áp dụng sơ hở tiêu chuẩn. Không có câu trả lời sẽ được chấp nhận. Chúc mừng mã hóa!
Lưu ý: Tôi đã lấy cảm hứng cho loạt thử thách này từ Advent Of Code . Tôi không có liên kết với trang web này
Bạn có thể xem danh sách tất cả các thử thách trong chuỗi bằng cách xem phần 'Liên kết' của thử thách đầu tiên tại đây .
0
và 641
, và có tổng số256 choose 64 ≈ 1.9 × 10⁶¹
ma trận có thể tiếp cận. (có thể so sánh với Megaminx và lớn hơn Rubik's Revenge, mặc dù ít hơn nhiều so với khối của Giáo sư)