Tôi đã viết một vài thử thách liên quan đến ma trận và phổ biến là tôi sử dụng một định dạng như dưới đây khi biểu diễn các ma trận, cả trong ví dụ và trong các trường hợp thử nghiệm:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Đây có thể là một định dạng rườm rà trong nhiều ngôn ngữ.
Thử thách:
Viết chương trình / hàm có thể lấy ma trận trên biểu mẫu được đưa ra ở trên cùng làm đầu vào (sao chép / dán trực tiếp từ bài đăng này) và xuất cùng một ma trận trên cả ba định dạng thông thường khác được hiển thị bên dưới .
Định dạng đầu vào:
Các số được phân tách bằng một số lượng không gian khác nhau và dòng mới để thể hiện các hàng (xem trường hợp kiểm tra).
- Số lượng khoảng cách giữa các số không được đảm bảo là nhất quán. Tuy nhiên, bạn có thể giả sử rằng chữ số cuối cùng trong mỗi cột thẳng hàng (nếu điều đó giúp bất kỳ).
- Có thể có cả số nguyên và số float, và chúng có thể dương, âm hoặc bằng không. Một ma trận sẽ không chứa số nguyên và số float cùng một lúc.
- Bạn có thể cho rằng không có số nào dài hơn 10 ký tự, bao gồm dấu trừ và dấu thập phân cho số float âm.
- Bạn có thể giả sử rằng có cùng số lượng mục trong mỗi hàng và trong mỗi cột.
- Sẽ không có bất kỳ ma trận đầu vào trống nào, nhưng có thể có các số đơn hoặc ma trận chỉ có một hàng hoặc cột.
- Trong các trường hợp này, bạn có thể chọn giữa các định dạng đầu ra được hiển thị trong các trường hợp thử nghiệm
Chương trình / chức năng của bạn phải xử lý đầu vào nếu nó được sao chép trực tiếp từ bài đăng này và dán vào trình thông dịch (STDIN hoặc dưới dạng đối số chức năng hoặc một cái gì đó tương đương). Bạn có thể có bất cứ điều gì bạn thích (dấu ngoặc, dấu ngoặc kép, dấu ngoặc đơn) ở phía trước và / hoặc sau ma trận, nhưng bạn phải xem ma trận là một chuỗi các ký tự không thể thay đổi (bao gồm các dòng mới).
Để làm rõ: Giả sử chức năng / chương trình của bạn được gọi f
và ma trận là:
1 -2
3 5
6 7
sau đó bạn có thể đưa ra ma trận dưới dạng đối số hàm như thế này (và vô số tùy chọn khác):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Dù sao đi nữa, nếu ngôn ngữ của bạn không thể lấy ma trận sao chép / dán làm đầu vào thì tôi sợ bạn phải chọn ngôn ngữ khác.
Định dạng đầu ra:
Bạn nên xuất ma trận theo ba định dạng sau (thứ tự không quan trọng):
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
- Bạn có thể tách ba đầu ra theo cách bạn muốn (ví dụ: một dòng mới)
- Bạn phải xuất các số bằng cách sử dụng cùng độ chính xác như đầu vào (ví dụ: bạn không được cắt bớt số thập phân, cũng không phải số nguyên đầu ra là số float).
- Các không gian là bắt buộc
- Bạn phải sử dụng
-
cho số âm, không_
hoặc tương tự.
Các trường hợp thử nghiệm:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
0.14778 0.27114 0.24415
0.45997 0.12287 0.67470
0.28945 0.37928 0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]
-0.0398301 0.2403455 -0.2253368 0.3565870 0.0605803 0.0830780
-0.3254422 -0.1185191 -0.2989537 0.1647319 0.3621135 0.2018815
-0.0022281 -0.3362287 -0.3568447 0.4419063 0.3801872 -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]
0 4 1 0
0 0 -6 0
0 1 4 -3
2 0 0 8
0 0 0 0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]
1
----
[1] (or [[1]])
{1} (or {{1}})
[1] (or 1)
1 2
----
[1, 2] (or [[1, 2]])
{1, 2} (or {{1, 2}})
[1, 2]
4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]
Tôi hoàn toàn nhận thức được điều này , nhưng trong thử thách này, định dạng I / O cồng kềnh là toàn bộ vấn đề. Thách thức sẽ là tất cả về định dạng đầu ra trong một số ngôn ngữ, trong khi đọc đầu vào sẽ là phần khó nhất trong các ngôn ngữ khác.
Xin đừng nản lòng nếu đọc đầu vào khó, những bài nộp đó có thể là những bài thú vị nhất. Ngắn không nhất thiết phải giống như ấn tượng. Và như mọi khi, giải thích được khuyến khích!