Toán học 120 130
Biên tập
Phiên bản này hoạt động với các mảng có kích cỡ khác nhau.
l = List;
g = Grid@Cases[Outer[l, Sequence @@ MapIndexed[l, #, {2}], 1]~Flatten~(Length[#] - 1),
x_ /; LessEqual @@ x[[All, 1]] == True :> x[[All, 2, 2]] - 1] &
Sử dụng
g@{{10, 20, 30}, {1, 22, 3}}
g@{{1, 5, 7, 10}, {2, 6, 6, 8, 12}, {4, 5, 9}}
g@{{10, 20, 30}, {1, 2, 3}}
g@{{1, -2, 3}, {-12, -7, 8, 9, 6}, {3, 99, 9}, {100, 10, -23}, {90, 10}}
Giải trình
Sử dụng ví dụ đầu tiên ở trên,
a = {{10, 20, 30}, {1, 22, 3}}
MapIndexed
thiết lập các chỉ số cho tất cả các yếu tố. Lưu ý: Mathicala bắt đầu đếm bằng 1. (Sau này chúng ta sẽ tính đến điều đó.)
MapIndexed[l, a, {2}]
{{{10, {1, 1}}, {20, {1, 2}}, {30, {1, 3}}}, {{1, {2, 1}}, {22, {2, 2}}, {3, {2, 3}}}}}
Outer
tạo ra tất cả các danh sách, mỗi ứng cử viên như một mảng bánh sandwich và các chỉ số của các yếu tố của chúng; %
chứa kết quả từ đầu ra trước. Các con số, 10
và 22
tôi đã nhấn mạnh sau khi chúng là đầu ra, đề cập đến một mảng bánh sandwich {10,22}
vẫn chưa được xác định như vậy.
Outer[l, Sequence @@ %, 1]~Flatten~(Length[a] - 1)
{{{10, {1, 1}}, {1, {2, 1}}}, {{ 10 , {1, 1}}, { 22 , {2, 2}}}, {{10, { 1, 1}}, {3, {2, 3}}}, {{20, {1, 2}}, {1, {2, 1}}}, {{20, {1, 2}}, {22, {2, 2}}}, {{20, {1, 2}}, {3, {2, 3}}}, {{30, {1, 3}}, {1, {2, 1}}}, {{30, {1, 3}}, {22, {2, 2}}}, {{30, {1, 3}}, {3, {2, 3}}}}
Cases
kiểm tra từng yếu tố ở trên để xác định xem LessEqual
mối quan hệ (nhỏ hơn hoặc bằng) có được giữ hay không. Các kết quả hiển thị dưới đây là những trường hợp trong đó các mảng sandwich được phát hiện. Một lần nữa, tôi nhấn mạnh {10,22}
trong đầu ra.
Cases[%, x_ /; LessEqual @@ x[[All, 1]] == True]
{{{ 10 , {1, 1}}, { 22 , {2, 2}}}, {{20, {1, 2}}, {22, {2, 2}}}}
%%
đề cập đến kết quả áp chót. :>
, [RuleDelayed] trả về các phần của các trường hợp quan tâm, cụ thể là các chỉ số của các mảng sandwich. -1
sửa lỗi cho thực tế là Mathicala bắt đầu mảng bằng 1 thay vì 0.
Cases[%%,
x_ /; LessEqual @@ x [[Tất cả, 1]] == Đúng:> x [[Tất cả, 2, 2]] - 1]
{{0, 1}, {1, 1}}
Grid
hiển thị kết quả trong một lưới. Hàng đầu tiên 0 1
có nghĩa là phần tử 0 từ danh sách con đầu tiên (tức là 10 ) và phần tử 1 từ danh sách phụ thứ hai (tức là 22 ) tạo thành mảng sandwich đầu tiên được tìm thấy.
Grid@%
0 1
1 1