Lập chỉ mục và loại bỏ ma trận của tôi


9

Lập chỉ mục và loại bỏ ma trận của tôi

Đưa ra một mảng ma trận / 2d trong ngôn ngữ ưa thích của bạn

Đầu vào:

  • Ma trận sẽ luôn có độ dài lẻ
  • Ma trận sẽ luôn luôn vuông hoàn hảo
  • Các giá trị ma trận có thể là bất kỳ số nguyên nào trong ngôn ngữ của bạn (dương hoặc âm)

Thí dụ:

1  2  3  4  5  6  7
2  3  4  5  6  7  8
3  4  50 6  7  8  9
4  5  6 100 8  9  10
5  6  7  8 -9  10 11
6  7  8  9  10 11 12
7  8 900 10 11 12 0

Định nghĩa:

  • "Số trung tâm" được định nghĩa là số có cùng số lượng ở bên trái, phải, lên và xuống

Trong trường hợp này, trung gian 100 của nó

  • "Vỏ ngoài" là tập hợp các số có chỉ số x và y của chúng hoặc 0 hoặc kích thước ma trận

1  2  3  4  5  6  7
2                 8
3                 9
4                 10
5                 11
6                 12
7  8 900 10 11 12 0

Nhiệm vụ của bạn:

Thêm vào số trung tâm tổng của mỗi hàng và cột sau khi nhân các giá trị trong mỗi hàng với chỉ số dựa trên 1 của chúng

Một hàng chẳng hạn

4  5  6  7  8

cho mỗi số

number * index + number * index.....

4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100

thí dụ:

 2 -3 -9  4  7  1  5  => 61
-2  0 -2 -7 -7 -7 -4  => -141
 6 -3 -2 -2 -3  2  1  => -10
 8 -8  4  1 -8  2  0  => -20
-5  6  7 -1  8  4  8  => 144
 1  5  7  8  7 -9 -5  => 10
 7  7 -2  2 -7 -8  0  => -60
                         |
78 65 60 45 -15 -89 10   => 154
                     |
                     => -16
  • Đối với tất cả các hàng và cột bạn kết hợp các giá trị này ..
  • Bây giờ bạn cũng tổng hợp những thứ này => 154-16 = 138
  • Bạn thêm số đó vào "số trung tâm" và xóa "vỏ ngoài" của ma trận

 0 -2 -7 -7 -7     => -88
-3 -2 -2 -3  2     => -15
-8  4 1+138 -8  2  => 395
 6  7 -1  8  4     => 69
 5  7  8  7 -9     => 26

19 69 442 30 -26

làm điều này cho đến khi bạn kết thúc với một số duy nhất

-2 -2 -3     => -15
 4  1060 -8  => 2100
 7 -1  8     => 29

27 2115 5
  • Thêm 2114 + 2147 vào 1060
  • Tháo "vỏ ngoài" và nhận 5321
  • Bây giờ chúng tôi có một số duy nhất còn lại

đây là đầu ra!

trường hợp thử nghiệm:

-6

-6

-7 -1  8
-4 -6  7
-3 -6  6

2

 6  7 -2  5  1
-2  6 -4 -2  3
-1 -4  0 -2 -7
 0  1  4 -4  8
-8 -6 -5  0  2

-365

 8  3  5  6  6 -7  5
 6  2  4 -2 -1  8  3
 2  1 -5  3  8  2 -3
 3 -1  0  7 -6  7 -5
 0 -8 -4 -9 -4  2 -8
 8 -9 -3  5  7  8  5
 8 -1  4  5  1 -4  8

17611

-9 -7  2  1  1 -2  3 -7 -3  6  7  1  0
-7 -8 -9 -2  7 -2  5  4  7 -7  8 -9  8
-4  4 -1  0  1  5 -3  7  1 -2 -9  4  8
 4  8  1 -1  0  7  4  6 -9  3 -9  3 -9
-6 -8 -4 -8 -9  2  1  1 -8  8  2  6 -4
-8 -5  1  1  2 -9  3  7  2  5 -6 -1  2
-8 -5 -7 -4 -9 -2  5  0  2 -4  2  0 -2
-3 -6 -3  2 -9  8  1 -5  5  0 -4 -1 -9
-9 -9 -8  0 -5 -7  1 -2  1 -4 -1  5  7
-6 -9  4 -2  8  7 -9 -5  3 -1  1  8  4
-6  6 -3 -4  3  5  6  8 -2  5 -1 -7 -9
-1  7 -9  4  6  7  6 -8  5  1  0 -3  0
-3 -2  5 -4  0  0  0 -1  7  4 -9 -4  2

-28473770

Đây là một thử thách về tiền mã hóa, vì vậy chương trình có tỷ lệ thắng thấp nhất


bạn đã đúng, đó là một lỗi đánh máy
downrep_nation

3
Tại sao số âm là một vấn đề? Tôi không nghĩ rằng thách thức nên điều chỉnh cho esolang nhưng có lẽ cách khác phù hợp hơn
downrep_nation

@LuisMendo Tôi nghĩ đó không phải là vấn đề, quy tắc "Các giá trị ma trận có thể là bất kỳ số nguyên nào trong ngôn ngữ của bạn" có nghĩa là nếu ngôn ngữ của bạn không có số âm, thì không nên hỗ trợ chúng.
Gây tử vong vào

thực sự đó là chính xác. nhưng sau đó các trường hợp kiểm tra sẽ không hoạt động đúng
downrep_nation

2
"Tôi không nghĩ rằng thách thức nên điều chỉnh cho esolang nhưng có lẽ cách khác phù hợp hơn" nên được khắc trên đá
edc65

Câu trả lời:


4

MATL , 36 34 byte

tnq?`t&+stn:*sytn2/)+ 7M(6Lt3$)tnq

Đầu vào là một mảng 2D với ;dấu phân cách hàng

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

tnq       % Take input. Duplicate, get number of elements, subtract 1
?         % If greater than 0
  `       %   Do...while
    t     %     Duplicate
    &+    %     Sum matrix with its transpose
    s     %     Sum each column. Gives a row vector
    tn:   %     Vector [1 2 ...] with the same size
    *     %     Multiply element-wise
    s     %     Sum of vector. This will be added to center entry of the matrix
    y     %     Duplicate matrix
    tn2/  %     Duplicate, get half its number of elements. Gives non-integer value
    )     %     Get center entry of the matrix, using linear index with implicit rounding
    +     %     Add center entry to sum of previous vector
    7M    %     Push index of center entry again
    (     %     Assgined new value to center of the matrix
    6Lt   %     Array [2 j1-1], twice. This will be used to remove shell
    3$)   %     Apply row and col indices to remove outer shell of the matrix
    tnq   %     Duplicate, number of elements, subtract 1. Falsy if matrix has 1 entry
          %   End do...while implicitly. The loop is exited when matrix has 1 entry
          % End if implicitly
          % Display stack implicitly

4

Python 2.7, 229 byte

Đây là nỗ lực đầu tiên của tôi tại một cái gì đó như thế này, vì vậy hy vọng tôi tuân theo tất cả các quy tắc với đệ trình này. Đây chỉ là một chức năng trong danh sách các danh sách làm tham số. Tôi cảm thấy các khoản tiền và sự hiểu biết danh sách có thể được rút ngắn lại một chút, nhưng nó quá khó đối với tôi. : D

def r(M):
  t=len(M)
  if t==1:return M[0][0]
  M[t/2][t/2]+=sum(a*b for k in [[l[x] for l in M]for x in range(0,t)]for a,b in enumerate(k,1))+sum([i*j for l in M for i,j in enumerate(l,1)])
  return r([p[+1:-1]for p in M[1:-1]])

Thx to Easterly Irk vì đã giúp tôi cạo sạch một vài byte.


1
Bạn có thể xóa một vài khoảng trắng giữa các toán tử ( ...) + sum([i*j...-> ...)+sum([i*j...), nhưng về tổng thể, bài đăng đầu tiên tuyệt vời !!!!
Rɪᴋᴇʀ

oooh đã bỏ lỡ điều đó. Cảm ơn!
Jeremy

1
Ngoài ra, ...]for ...công trình. Bạn có thể loại bỏ ít nhất 2 không gian như thế. (cuối danh sách chạm vào vòng lặp for)
Rɪᴋᴇʀ

3

C #, 257 byte

đây là một câu trả lời không esolang

void f(int[][]p){while(p.Length>1){int a=p.Length;int r=0;for(int i=0;i<a;i++)for(int j=0;j<a;j++)r+=(i+j+2)*p[i][j];p[a/2][a/2]+=r;p=p.Where((i,n)=>n>0&&n<p.Length-1).Select(k=>k.Where((i,n)=>n>0&&n<p.Length-1).ToArray()).ToArray();}Console.Write(p[0][0]);

vô dụng:

void f(int[][]p)
    {
        while (p.Length>1)
        {
            int a=p.Length;
            int r=0; //integer for number to add to middle
            for (int i = 0; i < a; i++)
                for (int j = 0; j < a; j++)
                    r +=(i+j+2)*p[i][j]; //add each element to counter according to their 1 based index
            p[a / 2][a / 2] += r; //add counter to middle
            p = p.Where((i, n) => n > 0 && n < p.Length - 1).Select(k => k.Where((i, n) => n > 0 && n < p.Length - 1).ToArray()).ToArray(); //strip outer shell from array
        }
        Console.Write(p[0][0]); //print last and only value in array
    }

2
Bây giờ, J không phải là một esolang.
dặm

Điều này không biên dịch nếu bạn không bao gồm using System.Linqusing System. Tôi không chắc chắn nếu nó được yêu cầu bởi các quy tắc mặc dù.
Yytsi

Nó không phải là một chương trình đầy đủ, nó chỉ là một chức năng nên theo như tôi biết. ý tôi là, tôi cũng cần bao gồm App.config và tất cả các byte trong thuộc tính và makefile chứ? không
hạ cấp

@downrep_nation Thật là kỳ lạ, vì tôi đã thấy một số người đưa chúng vào nguồn khi nó chỉ là một hàm và họ đã bao gồm các byte trên điểm số.
Yytsi

Bây giờ khi tôi nghĩ về nó, tôi đang nói rằng bạn nên nhập ít nhất System.Linq. Các ngôn ngữ khác yêu cầu nhập để sử dụng một số tính năng nhất định cũng trải qua quy trình tương tự, vì vậy tôi nghĩ thật không công bằng khi cho rằng mọi mô-đun được tải vào bộ nhớ trong C #.
Yytsi

2

J, 66 byte

([:}:@}."1@}:@}.]+(i.@,~=](]+*)<.@-:)@#*[:+/^:2#\*]+|:)^:(<.@-:@#)

Phương pháp tiếp cận thẳng dựa trên quá trình được mô tả trong thử thách.

[:+/^:2#\*]+|:được tổng ]+(i.@,~=](]+*)<.@-:)@#*là một cách đặc biệt xấu xí để tăng trung tâm theo tổng. [:}:@}."1@}:@}.loại bỏ lớp vỏ bên ngoài. Có lẽ có một cách tốt hơn để làm điều này.

Sử dụng

   f =: ([:}:@}."1@}:@}.]+(i.@,~=](]+*)<.@-:)@#*[:+/^:2#\*]+|:)^:(<.@-:@#)
   f _6
_6
   f _7 _1 8 , _4 _6 7 ,: _3 _6 6
2
   f 6 7 _2 5 1 , _2 6 _4 _2 3 , _1 _4 0 _2 _7 , 0 1 4 _4 8 ,: _8 _6 _5 0 2 
_365
   f 8 3 5 6 6 _7 5 , 6 2 4 _2 _1 8 3 , 2 1 _5 3 8 2 _3 , 3 _1 0 7 _6 7 _5 , 0 _8 _4 _9 _4 2 _8 ,8 _9 _3 5 7 8 5 ,: 8 _1 4 5 1 _4 8
17611
   f (13 13 $ _9 _7 2 1 1 _2 3 _7 _3 6 7 1 0 _7 _8 _9 _2 7 _2 5 4 7 _7 8 _9 8 _4 4 _1 0 1 5 _3 7 1 _2 _9 4 8 4 8 1 _1 0 7 4 6 _9 3 _9 3 _9 _6 _8 _4 _8 _9 2 1 1 _8 8 2 6 _4 _8 _5 1 1 2 _9 3 7 2 5 _6 _1 2 _8 _5 _7 _4 _9 _2 5 0 2 _4 2 0 _2 _3 _6 _3 2 _9 8 1 _5 5 0 _4 _1 _9 _9 _9 _8 0 _5 _7 1 _2 1 _4 _1 5 7 _6 _9 4 _2 8 7 _9 _5 3 _1 1 8 4 _6 6 _3 _4 3 5 6 8 _2 5 _1 _7 _9 _1 7 _9 4 6 7 6 _8 5 1 0 _3 0 _3 _2 5 _4 0 0 0 _1 7 4 _9 _4 2)
_28473770

2

Brachylog , 114 byte

{l1,?hh.|:{:Im:I:?:{[L:I:M]h:JmN,Ll:2/D(IJ,M{$\:?c:{:{:ImN,I:1+:N*.}f+.}a+.}:N+.;'(DIJ),N.)}f.}f:7a$\:7a&.}.
brbr.

Tôi cho rằng điều này thậm chí còn hiệu quả. Ít nhất tôi đã nhận ra rằng Brachylog thực sự cần một "giá trị thay đổi của yếu tố đó" như là một tích hợp mặc dù

Ví dụ sử dụng:

?- run_from_file('code.brachylog', '[[0:_2:_7:_7:_7]:[_3:_2:_2:_3:2]:[_8:4:139:_8:2]:[6:7:_1:8:4]:[5:7:8:7:_9]]', Z).
Z = 5321 .

Giải trình

Phiên bản dễ đọc hơn (và dài hơn):

{l1,?hh.|:2f:7a$\:7a&.}.
:Im:I:?:3f.
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
$\:?c:5a+.
:6f+.
:ImN,I:1+:N*.
brbr.

Tôi sẽ giải thích đại khái về từng vị từ (nghĩa là mỗi dòng ngoại trừ dòng đầu tiên là Vị ngữ chính + vị ngữ 1):

  • Vị từ chính + vị ngữ 1 {l1,?hh.|:2f:7a$\:7a&.}.: Nếu đầu vào chỉ có một hàng, sau đó kết thúc thuật toán và trả về giá trị duy nhất. Khác tìm tất cả các hàng thỏa mãn vị từ 2, sau đó áp dụng vị từ 7 trên ma trận kết quả, sau đó vị ngữ 7 trên chuyển vị, sau đó gọi đệ quy.

  • Vị ngữ 2 :Im:I:?:3f.: Lấy Ihàng thứ của ma trận, tìm tất cả các giá trị của hàng đó thỏa mãn vị ngữ 3 với Ivà ma trận làm đầu vào bổ sung.

  • Vị ngữ 3 [L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.): Llà hàng, Ilà chỉ số của hàng, Mlà ma trận. NJyếu tố thứ của L. Nếu độ dài Lchia cho 2 bằng cả hai IJthì đầu ra là tổng của Nkết quả của vị từ 4 trên ma trận. Nếu không, đầu ra chỉ là N. Vị ngữ thiết yếu này tạo lại ma trận với ngoại lệ là phần tử trung tâm được thêm vào tổng.

  • Vị ngữ 4 $\:?c:5a+.: Áp dụng vị ngữ 5 trên mỗi hàng và cột của ma trận, thống nhất đầu ra với tổng kết quả.

  • Vị ngữ 5 :6f+.: Tìm tất cả các đầu ra hợp lệ của vị từ 6 trên hàng, thống nhất đầu ra với tổng của danh sách kết quả.

  • Vị ngữ 6 :ImN,I:1+:N*.NIgiá trị thứ của hàng, thống nhất đầu ra với N * (I+1).

  • Vị ngữ 7 brbr.: Xóa hàng đầu tiên và cuối cùng của ma trận.


2

APL, 56 ký tự

{{1 1↓¯1 ¯1↓⍵+(-⍴⍵)↑(⌈.5×⍴⍵)↑+/(⍵⍪⍉⍵)+.×⍳≢⍵}⍣(⌊.5×≢⍵)⊣⍵}

Bằng tiếng Anh:

  • ⍣(⌊.5×≢⍵) lặp lại "một nửa kích thước của kích thước được làm tròn"
  • (⍵⍪⍉⍵)+.×⍳≢⍵ tích trong của ma trận và hoán vị của nó với vectơ chỉ số
  • (-⍴⍵)↑(⌈.5×⍴⍵)↑ kết quả biến đổi trong ma trận được đệm bằng 0s
  • 1 1↓¯1 ¯1↓ loại bỏ vỏ ngoà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.