영감을받은 이 .
실제로 래스터 그래픽을 다루는 2 학년 인 Agatha Stephendale은 선형 대수 과정을 수강했습니다. 이제 그녀는 행렬을 사각형으로 상상하지만 예술적으로는 사각형에 대각선을 연결하고 그에 따라 트레이스를 계산하려고합니다. 실제로, 그녀는 정사각 행렬뿐만 아니라 모든 행렬의 트레이스를 계산하려고합니다.
Agatha는 아티스트이기 때문에 좋아하는 이미지 편집기에서 선을 그리는 방법을 알고 있으며 후자는 Bresenham의 알고리즘 을 사용 하여 선을 그립니다. 그녀는 Wikipedia를 확인하고 의사 코드를 발견했습니다.
function line(x0, y0, x1, y1)
real deltax := x1 - x0
real deltay := y1 - y0
real deltaerr := abs(deltay / deltax) // Assume deltax != 0 (line is not vertical),
// note that this division needs to be done in a way that preserves the fractional part
real error := 0.0 // No error at start
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
while error ≥ 0.5 then
y := y + sign(deltay) * 1
error := error - 1.0
(이 의사 코드는 1보다 작은 경사에 대해서만 작동합니다. 키가 큰 격자의 경우 유사한 처리를 수행해야하지만 루프 오버가 발생합니다. 두 경우에 y
대해서는 이 섹션 을 참조하십시오 .)
Agatha는 행렬을 직사각형으로 상상하고 대각선을 그립니다. Bresenham의 알고리즘은 행렬의 어느 요소가 대각선에 속하는지를 결정합니다. 그런 다음 그녀는 합계를 취합니다. 이는 학생이 적고 코드를 저장하기 위해 대용량 HDD를 감당할 수 없기 때문에 가능한 적은 바이트로 구현하려는 것입니다.
직무
행렬 A가 주어지면 래스터 화 된 주 대각선 (왼쪽에서 오른쪽 아래로)에있는 요소의 합을 반환합니다. 여기서 왼쪽은 Bresenham의 선 알고리즘에 의해 결정됩니다. 즉, 행렬이 m × n 격자를 나타내고 있다고 가정하면 Bresenham의 알고리즘을 사용하여 A [1, 1]에서 A [m, n]까지 격자에 선을 그리고 선의 모든 요소의 합을 가져옵니다. 참고 것을 1 × N 과 N × 1 개 (이는 하나의 마지막 행의 마지막 요소의 첫 번째 행의 첫 번째 요소의 선을 그리는 것 방법이기 때문에) 매트릭스 전체 매트릭스 자체 대각선된다.
입력 : 실제 행렬은 (a 될 수 1 × 1 행렬의 행 행렬 열의 행렬, 또는 직사각형 행렬). 출력 : 숫자.
일부 소스 (예 : 위의 Wikipedia의 의사 코드)는 조건 검사를 사용하고 error≥0.5
다른 소스는을 사용 error>0.5
합니다. 원래 게시 된 것 ( error≥0.5
)을 사용해야 하지만 대안 error>0.5
이 코드에서 더 짧은 경우 코드 골프이므로 구현 할 수는 있지만 명시 적으로 언급하십시오 . 테스트 사례 4를 참조하십시오.
도전 규칙
- I / O 형식은 유연합니다. 행렬은 줄 바꿈, 행 벡터 배열 또는 열 벡터 배열 등으로 구분 된 공백으로 구분 된 여러 줄의 행일 수 있습니다.
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
- 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다.
- 기본 허점 은 금지되어 있습니다.
테스트 사례
[[1,2,3],[4,5,6],[7,8,9]]
→1+5+9
→ 출력 :15
.
[[1,2,3,4],[5,6,7,8]]
→1+2+7+8
→ 출력 :18
.
[[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24]]
→1+8+9+16+17+24
→ 출력 :75
.
[[1,2,3,4,5],[6,7,8,9,10]]
→1+2+8+9+10
(≥
오류 조건 사용) → 출력 :30
.
그러나 >
코드에서 엄격한 부등식을 사용하는 것이 더 짧은 경우 허용되는 출력은 1+2+3+9+10=25
이지만 별도로 언급해야합니다.
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
→1+5+8+12
→ 출력 :26
.
[[-0.3,0.5]]
→ 출력 :0.2
.[[3.1],[2.9]]
→ 출력 :6
.[[-5]]
→ 출력 :-5
.
Bresenham의 알고리즘에 대한 추가 정보
[[1,2],[3,4],[5,6],[7,8],[9,10]]
28
( ≥
예상 구현) 또는 27 ( >
선택 구현)입니다.
[[1,2,3,4,5],[6,7,8,9,10]]
.