Mục tiêu của thử thách này là tạo ra một chương trình lấy ma trận và xuất ra dạng phản hồi hàng giảm.
Một ma trận ở dạng giảm âm hàng nếu nó đáp ứng tất cả các điều kiện sau:
- Nếu có một hàng trong đó mọi mục nhập đều bằng 0, thì hàng này nằm bên dưới bất kỳ hàng nào khác có chứa một mục nhập khác.
- Các mục khác không ngoài cùng bên trái của một hàng bằng
1
.- Mục nhập khác không ngoài cùng của một hàng là mục nhập khác không duy nhất trong cột của nó.
- Xem xét bất kỳ hai mục nhập khác không ngoài cùng bên trái, một mục nằm ở hàng i, cột j và mục khác nằm ở hàng s, cột t. Nếu
s>i
, sau đót>j
.
Quá trình chung để biến đổi ma trận là:
- Xử lý lần lượt từng hàng i từ 1 đến n và làm việc trên các cột j từ 1 đến m bỏ qua bất kỳ cột nào trong tất cả các mục nhập không.
- Tìm cột j tiếp theo với một mục khác.
- Các hàng trao đổi, nếu cần, sao cho phần tử trục A (i, j) là khác không.
- Đặt trục bằng 1 bằng cách chia mỗi phần tử trong hàng trục cho giá trị của trục.
- Đặt tất cả các yếu tố trên và dưới trục bằng 0 bằng cách trừ một bội số phù hợp của hàng trục khỏi mỗi hàng khác.
- Lặp lại cho tất cả các hàng.
Nếu bạn muốn đọc thêm về loại ma trận này, hãy xem bài viết Wikipedia về nó và một công cụ và bài viết (các bước ở trên) cho thấy các bước để chuyển đổi ma trận.
Đối với thử thách thực tế, ở đây nó đi:
Đầu vào có thể được cung cấp theo bất kỳ cách nào bạn muốn thông qua STDIN hoặc tương đương, chỉ cần vui lòng giải thích nó trong câu trả lời của bạn. Đầu ra sẽ là dạng hồi âm hàng giảm của đầu vào ở dạng tương tự như đầu vào thông qua STDOUT hoặc tương đương. Sơ hở tiêu chuẩn không được phép và thư viện bên ngoài hoặc các chức năng mà làm nhiệm vụ này cũng không được phép ( TI-BASIC
's rref(
lệnh, ví dụ). Bạn có thể viết một chương trình hoặc chức năng đầy đủ. Đây là mã golf, BYTES thấp nhất sẽ thắng. Chúc may mắn!
Ví dụ đầu vào: [[2,1,1,14][-1,-3,2,-2][4,-6,3,-5]]
Kết quả ví dụ: [[1,0,0,1][0,1,0,5][0,0,1,7]]
method(ref(matrix))
, thì tôi sẽ nói tiếp tục