Các ngữ pháp hoàn toàn không thể đảo ngược


16

(lấy cảm hứng từ câu hỏi này về Toán học)

Các định nghĩa

Cho n x nma trận vuông A , chúng ta có thể gọi nó invertiblenếu tồn tại một số n x nma trận vuông B sao cho AB = BA = I n , với I n là ma trận nhận dạng có kích thước n x n(ma trận có đường chéo chính 1s và bất cứ thứ gì khác 0) và ABBA đại diện cho phép nhân ma trận thông thường (tôi sẽ không đi sâu vào vấn đề đó ở đây - hãy tham gia một lớp đại số tuyến tính).

Từ đó, chúng ta có thể gọi một m x nma trận C totally invertible nếu mọi k x khàm con (được định nghĩa bên dưới) của C không thể nghịch đảo cho tất cả k > 1, k <= (smaller of m,n).

Một hàm con được định nghĩa là ma trận kết quả sau khi xóa bất kỳ số lượng hàng và / hoặc cột nào khỏi ma trận gốc. Ví dụ, 3x3ma trận C dưới đây có thể được chuyển đổi thành một 2x2hàm con C ' bằng cách loại bỏ hàng đầu tiên 1 2 3và cột giữa 2 5 8như sau:

C = [[1 2 3]
     [4 5 6]    -->  C' = [[4 6]
     [7 8 9]]              [7 9]]

Lưu ý rằng có nhiều khả năng Subatrix khác nhau, ở trên chỉ là một ví dụ. Thử thách này chỉ liên quan đến những người mà Subatrix kết quả là một k x k ma trận vuông .

Các thách thức

Đưa ra một ma trận đầu vào, xác định xem nó hoàn toàn không thể đảo ngược hay không.

Đầu vào

  • Một ma trận kích thước duy nhất m x n, trong bất kỳ định dạng phù hợp .
  • Không mất tính tổng quát, bạn có thể giả sử m <= nhoặc m >= n, bất kỳ người chơi gôn nào cho mã của bạn và lấy đầu vào theo cách đó (nghĩa là bạn có được một hoạt động chuyển đổi miễn phí nếu bạn muốn nó).
  • Kích thước ma trận đầu vào sẽ không nhỏ hơn 3 x 3và không lớn hơn ngôn ngữ của bạn có thể xử lý.
  • Ma trận đầu vào sẽ chỉ bao gồm các giá trị số từ Z + ( số nguyên dương ).

Đầu ra

  • Một truthy / falsey giá trị cho dù ma trận đầu vào là hoàn toàn khả nghịch.

Những quy định

  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Các ví dụ

Truthy

[[1 2 3]
 [2 3 1]
 [3 1 2]]

[[2 6 3]
 [1 12 2]
 [5 3 1]]

[[1 2 3 4]
 [2 3 4 1]
 [3 4 1 2]]

[[2  3  5  7  11]
 [13 17 19 23 29]
 [31 37 41 43 47]]


Falsey

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[1 6 2 55 3]
 [4 5 5 5  6]
 [9 3 7 10 4]
 [7 1 8 23 9]]

[[2 3 6]
 [1 2 12]
 [1 1 6]]

[[8 2 12 13 2]
 [12 7 13 12 13]
 [8 1 12 13 5]]

Subatrix số ít ở 2 6 3; 1 12 2; 5 3 1đâu?
frageum

1
@feersum Rất tiếc - cảm ơn vì đã bắt được. Điều đó được cho là đã đi theo Truthy và người bên dưới được cho là 6ở trong góc chứ không phải a 7. Lỗi chính tả vụng về.
admBorkBork

Lúc đầu, tôi nghĩ tiêu đề nói "tàu ngầm hoàn toàn không thể đảo ngược".
user2357112 hỗ trợ Monica

Câu trả lời:


5

Thạch , 26 24 23 20 19 17 16 byte

-1 byte nhờ vào @miles (không cần thiết cho mỗi , khi lấy định thức)
-2 byte, @miles một lần nữa! (tách chuỗi không cần thiết và sử dụng Ѐnhanh)

ZœcLÆḊ
œcЀJÇ€€Ȧ

Dùng thử trực tuyến! hoặc tất cả 8 bài kiểm tra

Làm sao?

œcЀJÇ€€Ȧ  - Main link: matrix as an array, M
    J      - range of length -> [1,2,...,len(a)] (n)
  Ѐ       - for each of right argument
œc         -     combinations of M numbering n
     Ç€€   - call the last link (1) as a monad for €ach for €ach
        Ȧ  - all truthy (any determinant of zero results in 0, otherwise 1)
                 (this includes an implicit flattening of the list)

ZœcLÆḊ - Link 1, determinants of sub-matrices: row selection, s
Z      - transpose s
   L   - length of s
 œc    - combinations of transposed s numbering length of s
    ÆḊ - determinant

Tôi đã nghĩ rằng tôi cần nó bởi vì tôi có một loạt các kết hợp, nhưng không tôi không cần phải hướng dẫn rõ ràng. Cảm ơn!
Jonathan Allan

Tôi đã học được về nó từ đó thách thức cuối cùng sử dụng yếu tố quyết định, và xác minh rằng nó thực sự không có ldepth = 2trong nguồn
dặm

1
Ngoài ra tôi nghĩ rằng bạn có thể tiết kiệm một byte trong liên kết 2 sử dụng ZœcLÆḊvà byte khác trong liên kết chính bởiçЀJȦ
dặm

Tốt thứ @miles cảm ơn một lần nữa! Tôi nghĩ rằng cái đầu tiên trong số hai cái đó không hoạt động khi tôi thử nó, nhưng nó chắc chắn là khi tôi sử dụng chiếc golf của bạn. Hoàn toàn quên mất Ѐ.
Jonathan Allan

2
Thoải mái kết hợp, tôi nghĩ bạn có thể làm cho nó một lót nếu bạn muốn với œcЀJµZœcLÆḊµ€€Ȧđó cũng là 16 byte
dặm

4

Toán học 10.0, 34 byte

#~Minors~n~Table~{n,Tr@#}~FreeQ~0&

Một chuỗi 6 dấu ngã ... hồ sơ cá nhân mới!


3

MATL, 57 byte

tZyt:Y@!"@w2)t:Y@!"@w:"3$t@:)w@:)w3$)0&|H*XHx]J)]xxtZy]H&

Tất nhiên, bạn có thể dùng thử trực tuyến!

Đầu vào phải theo hướng 'dọc' (nRows> = nColumns). Tôi cảm thấy rằng đây có thể không phải là giải pháp hiệu quả nhất ... Nhưng ít nhất tôi sẽ để lại một số chỗ cho những người khác vượt qua tôi. Tôi rất thích nghe những gợi ý cụ thể có thể làm cho cách tiếp cận cụ thể này ngắn hơn, nhưng tôi nghĩ rằng số lượng lớn này sẽ truyền cảm hứng cho những người khác thực hiện một mục MATL với một cách tiếp cận hoàn toàn khác. Hiển thị 0 nếu sai, hoặc giá trị lớn nếu trung thực (sẽ nhanh chóng trở thành Inf nếu ma trận quá lớn; thêm 1 byte, người ta có thể thay thế H*bằng H&Y(logic và)). Đã lưu một vài byte nhờ @LuisMendo.

tZy  % Duplicate, get size. Note that n=<m.   
%   STACK:  [m n], [C]
t: % Range 1:m                           
%   STACK:  [1...m], [m n], [C]
Y@   % Get all permutations of that range. 
%   STACK:  [K],[m n],[C] with K all perms in m direction.
!"   % Do a for loop over each permutation.
%   STACK:  [m n],[C], current permutation in @.
@b   % Push current permutation. Bubble size to top.
%   STACK:  [m n],[pM],[C] with p current permutation in m direction.
2)t:Y@!" % Loop over all permutations again, now in n direction
%   STACK: [n],[pM],[C] with current permutation in @.
@w:" % Push current permutation. Loop over 1:n (to get size @ x @ matrices)
%   STACK: [pN],[pM],[C] with loop index in @.
3$t  % Duplicate the entire stack.
%   STACK: [pN],[pM],[C],[pN],[pM],[C]
@:)  % Get first @ items from pN
%   STACK: [pNsub],[pM],[C],[pN],[pM],[C]
w@:) % Get first @ items from pM
%   STACK: [pMsub],[pNsub],[C],[pN],[pM],[C]
w3$)  % Get submatrix. Needs a `w` to ensure correct order.
%   STACK: [Csub],[pN],[pM],[C]
0&|  % Determinant.
%   STACK: [det],[pN],[pM],[C]
H*XHx% Multiply with clipboard H.
%   STACK: [pN],[pM],[C]
]    % Quit size loop
%   STACK: [pN],[pM],[C]. Expected: [n],[pM],[C]
J)   % Get last element from pN, which is n.
%   STACK: [n],[pM],[C]
]    % Quit first loop
xxtZy% Reset stack to
%   STACK: [m n],[C]
]    % Quit final loop.
H& % Output H only.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.