이 과제는 2018 년 5 월 Language of the Month 이벤트 의 일부로 일부 MATL 언어 기능과 관련이 있습니다 .
소개
MATL에서 많은 2 입력 함수 는 broadcast 와 함께 요소별로 작동 합니다. 이것은 다음을 의미합니다.
요소 별 (또는 벡터화 ) :이 함수는 크기가 일치하는 두 개의 배열을 입력으로받습니다. 함수에 의해 정의 된 작업은 해당 항목의 각 쌍에 적용됩니다. 예를 들어, 수정 후 표기법 사용 :
[2 4 6] [10 20 30] +
출력을 제공 합니다
[12 24 36]
이것은 다차원 배열에서도 작동합니다. 표기법
[1 2 3; 4 5 6]
은2
×3
배열 (행렬)을 나타냅니다.1 2 3 4 5 6
2
첫 번째 치수 (수직)와3
두 번째 (수평)를 따라 크기가 있습니다 . 예를 들어[2 4 6; 3 5 7] [10 20 30; 40 60 80] *
[20 80 180; 120 300 560]
브로드 캐스팅 또는 ( 단일 확장 ) : 두 입력 배열의 크기는 일치하지 않지만 각 비 일치 차원에서 배열 중 하나의 크기는 size
1
입니다. 이 배열은 다른 차원을 따라 암시 적으로 복제되어 크기를 일치시킵니다. 그런 다음 작업이 위와 같이 요소별로 적용됩니다. 예를 들어, 크기가1
×2
및3
× 인 두 개의 입력 배열을 고려하십시오1
.[10 20] [1; 2; 5] /
방송 덕분에 이것은
[10 20; 10 20; 10 20] [1 1; 2 2; 5 5] /
그래서 그것은 준다
[10 20; 5 10; 2 4]
마찬가지로
3
×2
및3
× 크기1
(방송은 이제 두 번째 측정 기준에만 적용됨),[9 8; 7 6; 5 4] [10; 20; 30] +
[19 18; 27 26; 35 34]
차원 수는 다를 수도 있습니다. 예를 들어, 크기가 3 × 2 및 3 × 1 × 5 인 입력은 호환 가능하며 3 × 2 × 5 결과를 제공합니다. 실제로, 크기 3 × 2는 3 × 2 × 1과 동일하다 (임의적으로 많은 암시 적 후행 싱글 톤 치수가있다).
반면에,
2
x2
및3
x1
배열 쌍은 첫 번째 차원의 크기가2
and 이므로 크기3
가 같고 같지 않기 때문에 오류가 발생 합니다1
.
모듈 식 방송의 정의
모듈 식 방송은 일치하지 않는 크기가없는 경우에도 작동하는 방송의 일반화입니다 1
. 예를 들어 함수의 입력으로 다음 2
× 2
및 3
× 1
배열을 고려하십시오 +
.
[2 4; 6 8] [10; 20; 30] +
규칙은 다음과 같습니다. 각 차원마다 해당 차원을 따라 더 작은 배열이 다른 배열의 크기와 일치하도록 모듈 식 (순환)으로 복제 됩니다. 이것은 위의 내용을
[2 4; 6 8; 2 4] [10 10; 20 20; 30 30] +
결과와 함께
[12 14; 26 28; 32 34]
두 번째 예로
[5 10; 15 20] [0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0] +
생산할 것이다
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
일반적으로, 크기와 입력 a
× b
와 c
× d
주고 크기의 결과 max(a,b)
× max(c,d)
.
도전
위에서 정의한대로 모듈 식 브로드 캐스트 로 2 차원 어레이에 대한 추가 를 구현 합니다 .
배열은 직사각형 (비정형이 아님)이며 음이 아닌 정수만 포함 하며 최소한1
각 차원에서 크기를 갖습니다 .
추가 규칙 :
입력 및 출력은 합리적인 방법 으로 수행 할 수 있습니다 . 그들의 형식은 평소처럼 유연합니다.
모든 프로그래밍 언어의 프로그램 또는 기능이 허용 됩니다 . 표준 허점은 금지되어 있습니다.
바이트 단위의 최단 코드가 이깁니다.
테스트 사례
다음은 ;
행 분리 자로 사용 됩니다 (위 예에서와 같이). 각 테스트 사례에는 두 개의 입력과 출력이 표시됩니다.
[2 4; 6 8]
[10; 20; 30]
[12 14; 26 28; 32 34]
[5 10; 15 20]
[0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0]
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
[1]
[2]
[3]
[1; 2]
[10]
[11; 12]
[1 2 3 4 5]
[10 20 30]
[11 22 33 14 25]
[9 12 5; 5 4 2]
[4 2; 7 3; 15 6; 4 0; 3 3]
[13 14 9;12 7 9;24 18 20;9 4 6;12 15 8]
[9 12 5; 5 4 2]
[4 2 6 7; 7 3 7 3; 15 6 0 1; 4 0 1 16; 3 3 3 8]
[13 14 11 16; 12 7 9 8; 24 18 5 10; 9 4 3 21; 12 15 8 17]
[6 7 9]
[4 2 5]
[10 9 14]
1
× n
(예 [1 2 3]
) 또는 n
× 1
(예 [1; 2; 3]
)