Tính toán ma trận bình phương tối ưu


13

Các ma trận tối ưu (đối với phạm vi khá hẹp của thách thức này) thu được bằng cách "nén" các yếu tố từ các hàng tương ứng và cột của một ma trận vuông và nhận được tối đa của mỗi cặp.

Chẳng hạn, đưa ra ma trận sau:

4 5 6
1 7 2
7 3 0

Bạn có thể kết hợp nó với chuyển vị của nó để có được : [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Nếu bạn nén từng cặp danh sách, bạn có được những điều sau đây : [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. Bước cuối cùng là lấy tối đa của mỗi cặp để có được ma trận tối ưu:

4 5 7
5 7 3
7 3 0

Nhiệm vụ của bạn là xuất ra ma trận tối ưu của ma trận vuông được đưa ra làm đầu vào. Ma trận sẽ chỉ chứa số nguyên. I / O có thể được thực hiện trong bất kỳ định dạng hợp lý. Mã ngắn nhất tính bằng byte (bằng UTF-8 hoặc mã hóa tùy chỉnh của ngôn ngữ) sẽ thắng!

Xét nghiệm

[[172,29], [29,0]] -> [[172,29], [29,0]]
[[4,5,6], [1,7,2], [7,3,0]] -> [[4,5,7], [5,7,3], [7,3,0 ]]
[[1,2,3], [1,2,3], [1,2,3]] -> [[1,2,3], [2,2,3], [3,3,3 ]]
[[4,5, -6], [0,8, -12], [- 2,2,4]] -> [[4,5, -2], [5,8,2], [- 2,2,4]]

Chúng ta có thể xuất ra một phiên bản phẳng của ma trận không? ví dụ [1,2,3,4]thay vì [[1,2],[3,4]]? Sẽ tiết kiệm ~ 33%
lãng phí

Câu trả lời:


7

Thạch , 2 byte

»Z

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

»Z  Main link. Argument: M (integer matrix)

 Z  Zip the rows of M, transposing rows and columns.
»   Take the maxima of all corresponding integers.

Ôi trời ... Tại sao trên thế giới lại »hành xử như vậy?!

5
Khá chuẩn cho một ngôn ngữ thao tác mảng. Octave cũng maxlàm như vậy.
Dennis

5

Haskell , 40 byte

z(z max)<*>foldr(z(:))e
e=[]:e
z=zipWith

Hãy thử trực tuyến!

Tôi sẽ không biết điều này như:

import Data.List
f m = zipWith (zipWith max) m (transpose m)

... mà thanh lịch hơn nhiều.


2
Tôi thấy buồn cười khi môn golf tốt nhất tôi có thể chơi trong Clean giống hệt với Haskell vô dụng của bạn.
Οurous

5

Husk , 5 4 byte

Rất tiếc, không bao giờ phải sử dụng trước (hoặc ):

S‡▲T

Hãy thử trực tuyến!

Giải trình

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum




2

JavaScript (ES6), 48 byte

m=>m.map((r,y)=>r.map((v,x)=>v>(k=m[x][y])?v:k))

Các trường hợp thử nghiệm




1

CJam , 8 byte

{_z..e>}

Khối ẩn danh (hàm) lấy đầu vào từ ngăn xếp và thay thế nó bằng đầu ra.

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

{      }    e# Define block
 _          e# Duplicate
  z         e# Zip
   .        e# Apply next operator to the two arrays, item by item
            e# (that is, to rows of the two matrices)
    .       e# Apply next operator to the two arrays, item by item
            e# (that is, to numbers of the two rows)
     e>     e# Maximum of two numbers

1

R , 23 byte

function(A)pmax(A,t(A))

Hãy thử trực tuyến!

Điều này tương đương với hầu hết các câu trả lời khác. Tuy nhiên, R có hai maxchức năng riêng biệt cho hai kịch bản phổ biến:

maxmintrả về giá trị tối đa hoặc tối thiểu của tất cả các giá trị có trong các đối số của chúng, dưới dạng số nguyên nếu tất cả là logic hoặc số nguyên, gấp đôi nếu tất cả là số và ký tự khác.

pmaxpmin lấy một hoặc nhiều vectơ (hoặc ma trận) làm đối số và trả về một vectơ duy nhất cho cực đại 'song song' (hoặc cực tiểu) của vectơ. Phần tử đầu tiên của kết quả là tối đa (tối thiểu) của các phần tử đầu tiên của tất cả các đối số, phần tử thứ hai của kết quả là tối đa (tối thiểu) của các phần tử thứ hai của tất cả các đối số, v.v. Đầu vào ngắn hơn (có độ dài khác không) được tái chế nếu cần thiết.



1

C (gcc) , 79 77 byte

  • Đã lưu hai byte nhờ Steadybox ; chỉ tham gia vào một tham số kích thước ma trận vì tất cả các ma trận trong thử thách này là hình vuông.
j,i;f(A,n)int*A;{for(j=0;j<n*n;j++)printf("%d,",A[A[j]>A[i=j/n+j%n*n]?j:i]);}

Hãy thử trực tuyến!

Lấy một mảng số nguyên phẳng Avà kích thước ma trận n(như ma trận phải là hình vuông) làm đầu vào. Xuất ra một biểu diễn chuỗi số nguyên phẳng cho thiết bị xuất chuẩn.



0

05AB1E , 7 byte

ø‚øεøεà

Hãy thử trực tuyến!

Giải trình

ø         # transpose input matrix
 ‚        # pair with original matrix
  ø       # zip together
   ε      # apply on each sublist ([[row],[transposed row]])
    ø     # zip
     ε    # apply on each sublist (pair of elements)
      à   # extract greatest element





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.