Dấu vết ma trận tổng quát


23

Cảm hứng.

Cho (bằng mọi cách):

  • Hàm hộp đen hai đối số (hoặc một đối số bao gồm danh sách hai thành phần) , (đầu vào và đầu ra là 1, 2, 3, Lỗi)f: ℤ+ × ℤ+ → ℤ+
  • Một ma trận nguyên dương hoàn toàn có ít nhất hai hàng và hai cột

trả về dấu vết hàm của ma trận .

A là gì chức năng dấu vết ?

Một dấu vết ma trận bình thường là tổng của đường chéo chính (trên cùng bên trái đến dưới cùng bên phải) của một ma trận:

[[1,2,3],[4,5,6],[7,8,9]][1,5,9]1+5+915

Nhưng thay vì tính tổng, chúng tôi muốn áp dụng fdọc theo đường chéo:

[[1,2,3],[4,5,6],[7,8,9]][1,5,9]f(f(1,5),9)hoặcf(1,f(5,9))

Vui lòng cho biết bạn sử dụng từ trái sang phải hay phải sang trái.

Ma trận đã cho và tất cả các giá trị trung gian sẽ là các số nguyên dương hoàn toàn trong miền số nguyên của ngôn ngữ của bạn. Ma trận có thể không vuông.

Ví dụ

f(x,y) = xy, [[1,2,3],[4,5,6],[7,8,9]]1×5×945

f(x,y) = xy, [[1,2,3],[4,5,6],[7,8,9]]→ →1591

f(x,y) = x-y, [[4,5,6],[1,2,3]]4-22

f(x,y) = (x+y)⁄2, [[2,3,4],[5,6,7],[8,9,10]]5hoặc7

f(x,y) = x+2y, [[1,2,3],[4,5,6],[7,8,9]]47hoặc29

f(x,y) = max(x,y), [[1,2,3],[4,5,6],[7,8,9]]max(1,5,9)9

f(x,y) = 2x, [[1,2,3],[4,5,6],[7,8,9]]2hoặc4

f(x,y) = lcm(x,y), [[2,2,2],[2,2,3],[2,3,3],[4,4,4]]lcm(2,2,3)6

Thực hiện tham khảo.


Đường chéo của là [[2,2,2],[2,2,3],[2,3,3],[4,4,4]]gì?
hoàn toàn là

3
@totallyhuman:[2,2,3]
Emigna

1
Khỉ thật, tôi đã đọc tiêu đề là "Trance Matrix Generalized" và vô cùng thất vọng khi trang được tải
tar

Câu trả lời:


9

R , 40 30 byte

function(m,F)Reduce(F,diag(m))

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

Xác nhận các trường hợp thử nghiệm.

Di chuyển xuống theo đường chéo, do đó từ trái sang phải trong trường hợp này. Đối với các toán tử số học, bạn có thể sử dụng "+"hoặc backticks xung quanh các toán tử ( +,*,-,%/%,^,%%)

Khá đơn giản: Reducelà R tương đương với a foldđường chéo của ma trận là các phần tử a_ijtrong đó i==j, tức là, nơi các chỉ số rowcolcựu sinh viên giống nhau. diagcó hành vi thích hợp cho ma trận không vuông.


8

Haskell , 39 byte

Cảm ơn @Laikoni đã giúp tôi khắc phục giải pháp không hợp lệ trước đây!

f!m=foldl1 f[h|h:_<-zipWith drop[0..]m]

Liên kết bên trái, thử trực tuyến! (thay thế foldl1bởi foldr1vì phải kết hợp)


làm thế nào về foldl1 f$zipWith(!!)m[0..]?
tự hào

@proudhaskeller: Đó là những gì người khác đã thử, nhưng thất bại ở ma trận không vuông ..
17:30

5

Toán học , 16 byte

-1 byte nhờ Martin Ender.

#~Tr~Fold[g]@*0&

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

Giải pháp thay thế, 17 byte

Fold[g]@*Diagonal

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


17 byte (chức năng hộp đen có thể được giả sử dưới một tên cụ thể)
Ông Xcoder

Đó là @*{}cú pháp không làm cho rất nhiều ý nghĩa (bạn có thể có nghĩa @*List), nhưng thực tế là nó hoạt động nào là khá mát mẻ. Trong thực tế, nó có nghĩa là bạn có thể thay thế {}bằng a 0và lưu một byte.
Martin Ender

@MartinEnder Tôi thực sự đã có Listđầu tiên nhưng tôi đã cố gắng {}chỉ vì cái quái quỷ đó và vô cùng ngạc nhiên khi nó hoạt động. Làm cho ý nghĩa nhưng làm thế nào để 0làm việc? o0
hoàn toàn là

1
@totallyhuman Cách tương tự như {}. Hiện tại bạn đang sử dụng {}như một hàm (hoặc thực sự là "đầu" sử dụng thuật ngữ Mathicala). Nếu bạn đã sử dụng chung chung fở đó, bạn sẽ nhận được f[1,2,3](nếu đó là đường chéo). Nhưng với {}bạn có được {}[1,2,3]. Đó là một biểu hiện hoàn toàn vô nghĩa, nhưng những cái đầu có thể là những biểu hiện độc đoán và nếu Mathicala không biết phải làm gì với chúng, thì nó sẽ khiến chúng như vậy. Hầu hết các hàm thao tác danh sách của Mathicala thực sự hoạt động với các biểu thức với phần đầu tùy ý và trong trường hợp Fold, phần đầu bị bỏ qua. [tbc]
Martin Ender

Vì vậy, bạn có thể sử dụng 0như cái đầu thay thế, cái 0[1,2,3]mà vẫn vô nghĩa, nhưng hoạt động như nhau.
Martin Ender

4

Octave , 61 57 53 byte

function m=g(f,m)for i=diag(m)'(2:end)m=f(m(1),i);end

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

Xác định một hàm gcó một hàm xử lý fvà ma trận m. Ở lần lặp đầu tiên, m(1)trả về phần tử ma trận trên cùng bên trái; Sau đó, nó chỉ trở lại m.



@Giuseppe Đó là những gì tôi đã làm với phiên bản 61 byte ban đầu của mình. Tất nhiên, tôi nên kết hợp các điểm mạnh của phiên bản 57 và 61 byte của mình, mà các yêu cầu đưa ra câu trả lời 53 byte. Cảm ơn đã khiến tôi nhìn vào đó một lần nữa!
Sanchise


3

Haskell , 47 45 42 byte

f%((h:t):r)|[]<-t*>r=h|x<-tail<$>r=f h$f%x

Hãy thử trực tuyến! Xác định hàm (%)lấy hàm và ma trận làm danh sách các danh sách làm đầu vào.

Hàm được gấp từ phải sang trái:

f % [[1,2,3], -> f 1 ( f % [[5,6],   -> f 1 ( f 5 ( f % [[9]] ) ) -> f 1 ( f 5 ( f 9 ) ) )
     [4,5,6],               [8,9]] )
     [7,8,9]]

f % ((h:t):r)              -- (h:t) is the first row and r the remaining rows
 | [] <- t *> r = h         -- a shorter way of checking wether t==[] or r==[]
 | x<-tail<$>r = f h $ f%x -- apply f to h and the result of recursively calling (%) on
                           -- the remaining matrix with the first column removed

Chỉnh sửa: -2 byte nhờ BMO và -3 byte nhờ Zgarb !


1
43 byte bằng cách sử dụng $và đơn giản hóa điều kiện với *>.
Zgarb

@Zgarb Ý tưởng hay để sử dụng *>!
Laikoni

3

APL (Dyalog Unicode) , 7 byte ( SBCS của Adám )

⎕/1 1⍉⎕

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

-3 nhờ một gợi ý để chuyển đổi chương trình này thành chương trình đầy đủ của Adám .

Phải sang trái.


Không cần sử dụng SBCS của Adám tại đây: bạn chỉ có thể sử dụng Dyalog Classic.
Zacharý

@ Zacharý Điều tôi đang trả lời bằng Dyalog Unicode, Classic đang bị phản đối theo thời gian.
Erik the Outgolfer

Không phải codepage mặc dù codepage sẽ tồn tại
Zacharý

@ Zacharý Vâng, hãy kiên định. : P
Erik the Outgolfer



2

Python 2 , 61 byte

lambda f,m:reduce(f,[l[i]for i,l in enumerate(m)if len(l)>i])

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

Điều này hoạt động từ trái sang phải.


@AsoneTuhid có thể là bất kỳ cách nào, hãy kiểm tra (x+y)⁄2x+2yví dụ
Rod

Phải, tôi đã đọc sai, xin lỗi
Asone Tuhid

2

JavaScript (ES6), 58 56 byte

g=(f,a,r=a[i=0][0],e=a[++i]&&a[i][i])=>e?g(f,a,f(r,e)):r

Nếp gấp từ trái sang phải. Chỉnh sửa: Đã lưu 2 byte bằng cách sử dụng thực tế là mảng hoàn toàn tích cực. Giải pháp thay thế, cũng 56 byte:

(f,a,g=r=>(e=a[++i]&&a[i][i])?g(f(r,e)):r)=>g(a[i=0][0])

Có vẻ như bạn không cần 1/và bạn có thể lưu thêm 2 byte bằng cách di chuyển một số thứ xung quanh : f=>a=>(h=r=>(e=a[++i]&&a[i][i])?h(f(r,e)):r)(a[i=0][0]). TIO
Shaggy

@Shaggy Oh, nó hoàn toàn tích cực, tôi đã không thấy điều đó.
Neil

Rõ ràng chúng ta có thể giả sử rằng các hàm hộp đen được gán cho một biến được xác định trước để bạn có thể lưu 2 byte nếu bạn muốn tận dụng lợi thế đó.
Xù xì

@Shaggy Trên thực tế tôi nghĩ rằng nó sẽ tiết kiệm 4 byte (2x f,) khỏi phiên bản đầu tiên?
Neil

Bạn đúng; xin lỗi, quên đếm f,khi gọi glại.
Xù xì

2

JavaScript, 46 byte

f=>a=>a.reduce((p,l,i)=>l[i]?f(p[0]|p,l[i]):p)

Nhờ @Shaggy, sử dụng bitwise hoặc lưu một byte. Đó là phép thuật.


Điều này dường như không hoạt động nếu ma trận có nhiều hàng hơn cột.
Xù xì

@Shaggy buồn quá, 47 byte bây giờ ...
tsh

Vâng, đó là những gì tôi đã có ban đầu, quá. Mới sửa chỉnh sửa thành giải pháp của tôi nhưng bạn cũng đánh bại tôi :( Tôi nghĩ rằng bạn có thể lấy lại một byte, mặc dù vậy, bằng cách sử dụng bitwise OR, mặc dù vậy
Shaggy

@Shaggy thật kỳ diệu
tsh

Quên đề cập: Rõ ràng chúng ta có thể giả sử rằng các hàm hộp đen được gán cho một biến được xác định trước để bạn có thể lưu 3 byte nếu bạn muốn tận dụng lợi thế đó.
Xù xì

2

Java 8, 88 81 70 byte

m->{int r=m[0][0],i=1;try{for(;;)r=f(r,m[i][i++]);}finally{return r;}}

Nếp gấp [[1,2,3],[4,5,6],[7,8,9]]để f(f(1,5),9).

-7 byte gián tiếp nhờ @KamilDrakari bằng cách sử dụng một mẹo tương tự như anh ta đã làm trong câu trả lời C # của mình : thay vì có một ranh giới tối đa cho vòng lặp dựa trên các hàng / cột, chỉ cần thử bắt ArrayIndexOutOfBoundsException.
-11 byte thay thế catch(Exception e)bằng finally.

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

Câu trả lời 88 byte cũ:

m->{int r=m[0][0],i=1;for(;i<Math.min(m.length,m[0].length);)r=f(r,m[i][i++]);return r;}

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

Giải trình:

m->{                   // Method with integer-matrix parameter and integer return-type
  int r=m[0][0],       //  Start the result at the integer of position 0,0 (0-indexed)
      i=1;             //  Start the index at 1 (0-indexed)
  try{for(;;)          //  Loop indefinitely
    r=f(r,m[i][i++]);} //   Call f with the result + next diagonal cell as arguments
                       //   (and increase `i` by 1 with `i++` afterwards)
  finally{             //  If an ArrayIndexOutOfBoundsException occurred we're done,
   return r;}}         //   in which case we return the result-integer

Định dạng đầu vào hộp đen:

Giả sử có một hàm int f(int x,int y)được đặt tên , được cho phép theo câu trả lời meta này .

Tôi có một lớp trừu tượng Testchứa hàm mặc định f(x,y), cũng như lambda ở trên:

abstract class Test{
  int f(int x,int y){
    return x+y;
  }

  public java.util.function.Function<int[][],Integer>c=
    m->{int r=m[0][0],i=1;for(;i<Math.min(m.length,m[0].length);)r=f(r,m[i][i++]);return r;}
  ;
}

Đối với các trường hợp thử nghiệm, tôi ghi đè chức năng này f. Ví dụ, trường hợp thử nghiệm đầu tiên được gọi như thế này:

System.out.println(new Test(){
  @Override
  int f(int x,int y){
    return x*y;
  }
}.c.apply(new int[][]{
  new int[]{1,2,3},
  new int[]{4,5,6},
  new int[]{7,8,9}
}));

2

Tùy viên , 14 byte

Fold#/Diagonal

Hãy thử trực tuyến! Đặt fvà gọi là f[function, array].

Giải trình

Đây là một ngã ba của hai chức năng: Fold/Diagonal. Điều này, cho các đối số fa, tương đương với:

Fold[f, (/Diagonal)[f, a]]

/, khi được áp dụng một cách đơn lẻ cho một hàm, trả về một hàm được áp dụng cho đối số cuối cùng của nó. Vì vậy, điều này tương đương với:

Fold[f, Diagonal[a]]

Điều này gấp chức năng ftrên đường chéo chính của a.


Một ngôn ngữ pha tại nhà có thể đọc được
Adám

@ Adám; D đúng vậy!
Conor O'Brien

2

AWK , 77 byte

func z(F,M,r){for(e=1;e<M[1]&&e<M[2];)r=@F(r==""?M[1,1]:r,M[++e,e])
return r}

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

Tôi tò mò nếu AWKcó thể làm lập trình chức năng cả. Tôi nghĩ rằng điều này được tính.

"Ma trận" được định nghĩa là một mảng kết hợp tiêu chuẩn, với các trường bổ sung M[1]=#rowsM[2]=#columns. Tên hàm được truyền vào dưới dạng một chuỗi được đánh giá thông qua @F(...)cú pháp. Đánh giá được thực hiện từ trái sang phải. Các rtham số là một giữ chỗ để ngăn chặn ghi đè lên một hiện rbiến và để tránh sự cần thiết phải khởi tạo lại cho mỗi cuộc gọi. Thông thường, không gian thêm được thêm vào để chỉ định các trình giữ chỗ như vậy AWK, nhưng đây là mã golf, vì vậy mỗi byte đều có giá trị. :)

Liên kết TIO thực hiện tất cả các trường hợp thử nghiệm.


2

05AB1E , 15 10 byte

Các nếp gấp từ phải sang trái
Đã lưu 5 byte bằng cách sử dụng tích hợp mới theo đề xuất của Kevin Cruijssen

Å\`[.g#I.V

Giải trình

Hoạt động tương tự như phiên bản cũ, ngoại trừ đó Å\là một tích hợp mới để đẩy đường chéo chính.

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Phiên bản cũ

¬g£vyNè}[.g#I.V

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

¬                 # get the head of the input (first row)
 g                # get its length (number of columns)
  £               # take that many rows from input
   v              # for each row_index, row (N,y) do:
    y             # push the row
     Nè           # get the nth element of the row
       }          # end loop
        [.g#      # loop until one value remain on the stack
            I.V   # run the input function

1
¬g£vyNè}[có thể Å\`[bây giờ, tiết kiệm 5 byte.
Kevin Cruijssen

1

Husk , 7 byte

Cảm ơn @Zgarb đã sửa lỗi gửi của tôi!

Ḟ₁§z!Tŀ

Liên kết bên trái, Hãy thử trực tuyến! (đối với phiên bản kết hợp phải, chỉ cần thay thế bằng F)

Giải trình

Thật không may, không có cách nào dễ dàng để có được đường chéo của ma trận, vì vậy hầu hết các byte đều dành cho điều đó:

Ḟ₁§z!Tŀ  -- function ₁ is the function and matrix A implicit, example: 
  §      -- fork A
     T   -- | transpose A: [[1,4,7],[2,5,8],[3,6,9]]
      ŀ  -- | enumerate A: [1,2,3]
   z!    -- and zipWith index: [1,5,9]
Ḟ₁       -- right fold function

Huh, tích hợp cho các đường chéo, nhưng không phải cho đường chéo
Adám

2
@ Adám Tôi cho rằng đó là vì bạn có thể tính toán các siêu âm của ma trận vô hạn nhưng không phải là đường chéo.
Martin Ender

1

SNOBOL4 (CSNOBOL4) , 86 byte

T	I =1
	T =M<1,1>
I	I =I + 1
	T =EVAL(F '(T,M<I,I>)')	:S(I)F(RETURN)
	DEFINE('T(M,F)')

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

Xác định hàm T(for TRACE) lấy ARRAYmột chuỗi Fvà tên đó là tên của hàm. Nếp gấp từ trái sang phải.

Sử dụng tham chiếu gián tiếp ( $) không hoạt động với các hàm. Vì vậy, sử dụng EVALvà truyền một chuỗi vào tên dường như là cách duy nhất để có được hàm hộp đen trong SNOBOL.

Ngoài ra, thật khó để xác định mảng; tuy nhiên, vì các tham chiếu mảng không hợp lệ gây ra FAILURE, điều này hoạt động cho các mảng không vuông - nếu Inằm ngoài giới hạn ở một trong hai chiều, F(RETURN)thì hàm sẽ trả về.

Chỉnh sửa:

Có thể, dựa trên bài đăng meta này , tôi có thể giả sử rằng hàm hộp đen Fđược định nghĩa dưới tên F, sẽ giảm hàm này xuống 75 byte (loại bỏ việc sử dụng EVAL,Ftrong định nghĩa hàm). Tuy nhiên, tôi thích phiên bản này hơn vì nó gần hơn để chuyển tham chiếu đến một chức năng.



1

tinylisp , 79 byte

(load library
(d D(q((M)(i(h M)(c(h(h M))(D(map t(t M))))(
(q((F M)(foldl F(D M

Dòng cuối cùng là một hàm lambda chưa được đặt tên có chức năng và ma trận và trả về dấu vết ma trận. Các dấu vết là liên kết trái (tức là f(f(1,5),9)). Hãy thử trực tuyến!

Bị đánh cắp

Chúng tôi xác định một hàm trợ giúp để tính đường chéo; sau đó generalized-tracechỉ là một trình bao bọc nhỏ xung quanh chức năng thư viện foldl.

(load library)

(def diagonal
 (lambda (matrix)
  (if (head matrix)
   (cons
    (head (head matrix))
    (diagonal (map tail (tail matrix))))
   nil)))

(def generalized-trace
 (lambda (func matrix)
  (foldl func (diagonal matrix))))

Khi tính toán đường chéo đệ quy, chúng tôi kiểm tra xem (head matrix)có đúng không. Nếu ma trận nằm ngoài hàng, nó sẽ là danh sách trống (nil) vàhead của nil là nil - falsey. Hoặc, nếu ma trận nằm ngoài các cột, hàng đầu tiên (đầu) của nó sẽ là danh sách trống (nil) - falsey. Nếu không, sẽ có một hàng đầu tiên không trống, đó là sự thật.

Vì vậy, nếu hàng đầu tiên không tồn tại hoặc trống, chúng tôi sẽ trả về nil. Mặt khác, nếu có một hàng đầu tiên không trống, chúng ta sẽ lấy (head (head matrix))- phần tử đầu tiên của hàng đầu tiên - và cons(trả trước) cho kết quả của cuộc gọi đệ quy. Đối số của lệnh gọi đệ quy là (map tail (tail matrix))- đó là, lấy tất cả các hàng trừ hàng đầu tiên và lấy tất cả trừ phần tử đầu tiên của mỗi hàng.



1

C # (Trình biên dịch Visual C #) , 72 69 60 byte

m=>{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch{}}

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

try/catch cho phép đường chéo đạt được chính xác bằng cách đơn giản đi dọc theo nó và chấm dứt khi ra khỏi giới hạn.

3 byte được lưu bởi vì, như Kevin Cruijssen đã chỉ ra, các hàm hộp đen có thể được giả sử tồn tại dưới một tên cụ thể .

9 byte được lưu bằng cách quay lại thông qua sửa đổi một đối số .

Do đó, hàm được gọi bằng cách lưu trữ hàm mong muốn dưới tên f, gọi trace(matrix)và kết quả được lưu trongmatrix[0][0] .

Ngoài ra, nếu bạn thực sự thích sự dài dòng,

C # (Trình biên dịch Visual C #) , 97 + 13 = 110 78 69 byte

(int[][]m)=>{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch{}}

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

32 byte được lưu bằng cách sử dụng hàm được xác định trước, vì không lấy hàm làm tham số cho phép loại bỏ Systemnhập và Funcloại chung dài .


Thủ thuật hay với thử bắt. Tôi đã có thể chơi golf 7 byte trên câu trả lời Java 8 của mình (mặc dù tôi phải sử dụng catch(Exception e)thay vì catch. :) EDIT: Ồ, đã có thể thay thế catch(Exception e)bằng finallyđể tiết kiệm nhiều byte hơn. Cảm ơn một lần nữa. +1 từ tôi.
Kevin Cruijssen

@KevinCruijssen bạn cũng có thể được hưởng lợi từ cải tiến mới nhất của tôi (mặc dù tôi không nhớ chắc chắn liệu Java có thể sửa đổi các đối số hay không)
Kamil Drakari

Cảm ơn vì đã cho tôi biết. Mặc dù có thể có trong Java, nhưng điều đó có nghĩa là tôi sẽ phải đổi finallythành catch(Exception e), vì cuối cùng tôi sẽ không trở lại bên trong nữa. Vì vậy, m->{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch(Exception e){}}(73 byte) không may là dài hơn đối với tôi so với câu trả lời hiện tại của tôi m->{int r=m[0][0],i=1;try{for(;;)r=f(r,m[i][i++]);}finally{return r;}}(70 byte) Nhưng thực sự là một cách hay để lưu byte trong câu trả lời của bạn! :) Quá tệ, tôi chỉ có thể +1 câu trả lời của bạn một lần.
Kevin Cruijssen

1

JavaScript, 61 57 56 52 50 44 42 byte

Giảm từ trái sang phải. Giả sử hàm được gán cho biếnf , theo bài đăng meta này được ông Xcoder & hoàn toàn chú ý đến tôi. Không thể nói như tôi đồng ý với nó vì nó mâu thuẫn trực tiếp với sự đồng thuận hiện có của chúng tôi rằng chúng tôi có thể không cho rằng đầu vào được gán cho một biến được xác định trước, nhưng bây giờ tôi sẽ tiết kiệm vài byte.

a=>a.map((y,z)=>x=(n=y[z])?z?f(x,n):n:x)|x

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

g=
a=>a.map((y,z)=>x=(n=y[z])?z?f(x,n):n:x)|x
o.innerHTML=[[`f(x,y) = xy`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x*y,45],[`f(x,y) = x<sup>y</sup>`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x**y,1],[`f(x,y) = x-y`,[[4,5,6],[1,2,3]],(x,y)=>x-y,2],[`f(x,y) = <sup>(x+y)</sup>⁄<sub>2</sub>`,[[2,3,4],[5,6,7],[8,9,10]],(x,y)=>(x+y)/2,7],[`f(x,y) = x+2y`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x+2*y,29],[`f(x,y) = max(x,y)`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>Math.max(x,y),9],[`f(x,y) = 2x`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>2*x,4],[`f(x,y) = lcm(x,y)`,[[2,2,2],[2,2,3],[2,3,3],[4,4,4]],(x,y)=>-~[...Array(x*y).keys()].find(z=>!(++z%x|z%y)),6]].map(([a,b,c,d],e)=>`Test #${++e}:  ${a}\nMatrix:   ${JSON.stringify(b)}\nFunction: ${f=c}\nResult:   ${g(b)}\nExpected: ${d}`).join`\n\n`
<pre id=o></pre>


1

APL NARS, 20 byte, 10 ký tự

{⍺⍺/1 1⍉⍵}

kiểm tra:

  f←{⍺⍺/1 1⍉⍵}
  ⎕←q←3 3⍴⍳10    
1 2 3
4 5 6
7 8 9
  ×f q
45
  *f q
1
  {⍺+2×⍵}f q
47
  ⌈f q
9
  {2×⍺+0×⍵}f q
2
  -f ⊃(4 5 6)(1 2 3)
2
  {(⍺+⍵)÷2}f ⊃(2 3 4)(5 6 7)(8 9 10)
5
  ∧f ⊃(2 2 2)(2 2 3)(2 3 3)(4 4 4)
6

Làm tốt lắm. Mặc dù tôi nghĩ rằng bạn tự mình đạt được điều này, nhưng nó thực sự giống hệt với giải pháp ban đầu của Erik the Outgolfer .
Adám

0

Thạch , 5 byte

Trái sang phải.

ŒDḢç/

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

Tuyên bố miễn trừ trách nhiệm: Tôi không biết liệu đây có phải là phương thức nhập có thể chấp nhận cho các chức năng hộp đen không. Điều này giả định rằng hàm được triển khai trong liên kết ở trên và do đó được "đặt tên" (nghĩa là nó có thể gọi được) ç, nhưng nếu không thì tôi không có cách nào để gán nó ç. Nếu bất cứ ai có nhiều kinh nghiệm hơn với các chức năng hộp đen Jelly +, tôi sẽ đánh giá cao suy nghĩ. Sau khi dành một chút thời gian để trò chuyện, chúng tôi đã hiểu rằng việc sử dụng çcó thể thực sự hợp lệ.


0

Clojure, 30 byte

#(reduce %2(map nth %(range)))

Giảm "từ bên trái".


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.