당신은 주어진하고 N 별 m 정수의 행렬 N, m> 3 . 당신의 작업은 발견하는 3- 바이 -3 최저 평균 및 출력이 값을 갖는 서브 매트릭스.
규칙 및 설명 :
- 정수는 음이 아닙니다.
- 선택적 입력 및 출력 형식
- 출력은 소수점 이하 2 자리까지 정확해야합니다 (정수가 아닌 경우).
- 하위 행렬은 연속적인 행과 열로 구성되어야합니다.
테스트 사례 :
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Minimum mean: 14
100 65 2 93
3 11 31 89
93 15 95 65
77 96 72 34
Minimum mean: 46.111
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Minimum mean: 1
4 0 0 5 4
4 5 8 4 1
1 4 9 3 1
0 0 1 3 9
0 3 2 4 8
4 9 5 9 6
1 8 7 2 7
2 1 3 7 9
Minimum mean: 2.2222
이것은 코드 골프 이므로 각 언어에서 가장 짧은 코드가 승리합니다. 나는 사람들이 첫 번째보다 짧지 않더라도 이미 사용 된 언어로 답변을 게시하도록 권장합니다.
답변
답변
젤리 , 11 9 바이트
+3\⁺€F÷9Ṃ
@ Dennis 덕분에 2 바이트를 절약했습니다 .
설명
+3\⁺€F÷9Ṃ Main link. Input: 2d matrix
+3\ Reduce overlapping sublists of size 3 by addition
⁺€ Repeat previous except over each row
F Flatten
÷9 Divide by 9
Ṃ Minimum
답변
옥타브, 38 바이트
@(M)min(conv2(M,ones(3)/9,'valid')(:))
답변
MATL , 13 9 바이트
3thYCYmX<
@ rahnema1의 답변 포트 .
작동 원리
입력 고려
[100 65 2 93;
3 11 31 89;
93 15 95 65;
77 96 72 34]
예로서.
3th % Push [3 3]
% STACK: [3 3]
YC % Input matrix implicitly. Convert 3x3 sliding blocks into columns
% STACK: [100 3 65 11;
3 93 11 15;
93 77 15 96;
65 11 2 31;
11 15 31 95;
15 96 95 72;
2 31 93 89;
31 95 89 65;
95 72 65 34]
Ym % Mean of each column
% STACK: [46.1111 54.7778 51.7778 56.4444]
X< % Minimum of vector. Display implicitly
% STACK: [46.1111]
답변
Mathematica, 37 35 바이트
2 바이트의 @MartinEnder에게 감사합니다!
Min@BlockMap[Mean@*Mean,#,{3,3},1]&
설명
Min@BlockMap[Mean@*Mean,#,{3,3},1]&
BlockMap[ ]& (* BlockMap function *)
# (* Divide the input *)
{3,3} (* Into 3x3 matrices *)
1 (* With offset 1 *)
Mean@*Mean (* And apply the Mean function twice to
each submatrix *)
Min (* Find the minimum value *)
답변
파이썬 2 , 93 81 80 79 바이트
f=lambda M:M[2:]and min(sum(sum(zip(*M[:3])[:3],()))/9,f(M[1:]),f(zip(*M)[1:]))
작동 원리
f 는 튜플 목록 (또는 행렬 M 을 나타내는 다른 색인 가능한 2D 반복 가능 항목)을 가져 와서 왼쪽 위 모서리에있는 3×3 하위 행렬 의 평균의 최소값을 재귀 적으로 계산 하고 f 없이 M 에 재귀 적으로 적용되는 재귀 함수입니다. 첫 번째 행과 첫 번째 열이없는 M.
f(M)
다음을 수행합니다.
-
경우 M은 세 개 미만의 행이,
M[2:]
빈리스트이며, f를 반환합니다.첫 번째 실행에서 n> 3 이므로 이니셜은 빈 목록을 반환 할 수 없습니다.
-
M 에 3 개 이상의 행이있는 경우
M[2:]
비어 있지 않고 진실이므로 오른쪽의 코드and
가 실행되어 다음 3 개 값 중 최소값을 반환합니다.min(sum(sum(zip(*M[:3])[:3],()))/9
M[:3]
처음 세 행 산출 M을 ,zip(*...)
전치 행 및 열 (튜플들의 목록을 수득)는sum(...,())
(때문 작품 모든 투플을 연결 한+
연결 임), 및sum(...)/9
아홉 개 정수 결과 목록의 평균을 계산한다.f(M[1:])
첫 번째 행이 제거 된 상태 에서 M에 f 를 재귀 적으로 적용 합니다.
f(zip(*M)[1:])
행과 열을 전치하고 결과의 첫 번째 행을 제거하므로 ( M 의 첫 번째 열은 반복적으로 f 를 결과에 적용 합니다.
재귀 호출에서 이전에 제거 된 레이어는 항상 행이므로 M 에 충분한 행이 있는지 테스트하면 항상 충분합니다.
마지막으로 일부 재귀 호출 []
이 문제가 될 것으로 예상 할 수 있습니다. 그러나 Python 2 에서 n 은 숫자이고 A 가 반복 가능할 때마다 비교 n < A
는 True를 반환 하므로 최소 하나 이상의 숫자와 하나 이상의 반복 가능한 값을 계산하면 항상 가장 낮은 숫자를 반환합니다.
답변
J , 21 바이트
[:<./@,9%~3+/\3+/\"1]
J에서 하위 배열에 대해 작업하는 올바른 방법 은 배열 크기 의 전체 하위 배열마다 동사를 적용 하는 수단 _3
인 세 번째 컷 형식 을 사용하는 것 입니다. 이를 사용하는 솔루션은 1 바이트 만 필요하지만 더 큰 배열에서는 훨씬 효율적입니다.;.
x (u;._3) y
u
x
y
[:<./@,9%~3 3+/@,;._3]
설명
[:<./@,9%~3+/\3+/\"1] Input: 2d array M
] Identity. Get M
"1 For each row
3 \ For each overlapping sublist of size 3
+/ Reduce by addition
3 \ For each overlapping 2d array of height 3
+/ Reduce by addition
9%~ Divide by 9
[: , Flatten it
<./@ Reduce by minimum