일반 폴리그램


16

정점의 수 n ≥ 3와 "단계 크기" 1 ≤ m < n/2 (두 개의 연결된 정점 사이의 거리를 나타냄)가 주어지면 해당하는 일반 폴리그램 의 그래픽 표현이 출력 됩니다. 폴리그램이 여러 개의 닫힌 루프로 구성된 경우 각 루프는 다른 선 색상으로 렌더링되어야합니다. (이것이 혼란스러워 보인다면, 아래 예제는 잘 정리되어 있어야합니다.)

규칙

문제에 대한 합리적인 해결책은 이러한 규칙을 자동으로 충족시킬 수 있습니다. "이 검은 색 블록은 완전히 폴리그램이지만 다음과 같은 응답을 방지하기 위해 출력 매개 변수에 일부 제한을두기 만하면됩니다. 선 너비를 9000 이상으로 설정했습니다. "

  • 폴리그램을 파일 (디스크 또는 표준 출력 스트림에 기록 될 수 있음)로 렌더링하거나 화면에 표시 할 수 있습니다.
  • 벡터 또는 래스터 그래픽을 사용할 수 있습니다. 출력이 래스터 화 된 경우 이미지의 크기는 400x400 픽셀 이상이어야하며 폴리그램 반경 (중심에서 각 정점까지의 거리)은 측면 길이의 35 %에서 50 % 사이 여야합니다.
  • 폴리그램의 종횡비는 1이어야합니다 (정점이 올바른 원에 놓 이도록). 이미지의 캔버스는 직사각형 일 수 있습니다.
  • 폴리그램의 선은 반지름의 5 %보다 두껍지 않아야합니다 (물론, 0이 아닌 두께를 가져야합니다).
  • 폴리그램 외에 축이나 프레임을 렌더링 할 수 있지만 다른 것은 없습니다.
  • (단색) 배경색을 선택할 수 있습니다.
  • 여러 개의 닫힌 루프로 구성된 폴리그램의 경우 시각적으로 다른 6 가지 이상의 색을 지원해야합니다.이 색은 모두 배경과 달라야합니다. (그레이가 스펙트럼을 통해 충분히 퍼져 있다면 그레이 스케일은 괜찮습니다.) 코드는 여전히 6 개 이상의 루프에서 작동해야하지만 추가 루프에서 색상을 구별 할 필요는 없습니다 (즉, 재사용 할 수도 있음) 그 시점에서 이전 루프의 색상).

이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.

모든 출력은 다음과 같습니다 n = 16(열이 해당 n하고 행이에 해당 m).

여기에 이미지 설명을 입력하십시오 더 큰 버전을 보려면 클릭하십시오.

더 큰 예를 들면 n다음 (n, m) = (29, 11)(30, 12)같습니다.

여기에 이미지 설명을 입력하십시오여기에 이미지 설명을 입력하십시오


앨리어싱 제거 및 항목은 어떻습니까? (우리는 각진 선을 다루기 때문에)
Optimizer

1
@Optimizer 앤티 앨리어싱 알고리즘을 처방하지 않겠습니다. 선이 명확하게 표시되는 한 선에 앨리어싱되거나 앤티 앨리어싱 될 수 있습니다. 최선의 판단을하십시오.
Martin Ender

답변:


5

MATLAB, 85 81

이 기능은 화면에 플롯을 표시합니다.

function f(n,m)
hold all
axis equal
for k=1:gcd(m,n)
plot(i.^(4*(k:m:n^2)/n))
end

n = 30, m = 12에 대한 결과 : 에프 (30,12)


나는 이것이 효과가 있는지 확실하지 않다. 올바르게 수행하면 30, 12에 대해이 이미지 가 출력됩니다 . 참조 : bit.ly/1GFZni7
durron597

@ durron597 Matlab에서 실제로 작동하지만 hold all첫 번째 줄 위에 다음 플롯이 그려 지기 때문에 함수를 즉시 재사용 할 수는 없습니다 ... 함수의 재사용 가능성에 대한 합의가 있는지 모르겠습니다. 정직한.
Martin Ender

@ MartinBüttner hold on어쨌든 바이트를 저장 해야 합니다. 4 바이트를 추가하면 재사용 clf\n
가능해

알고 보니 우리는 합의를 하고 난 질문을 게시하고 몇 달 전에 자신을 대답합니다. oO 그 메타 포스트에 의해 hold.
Martin Ender

@ MartinBüttner 변경할 경우 hold allclf\nhold on그 수정을 수행하여 문제를?
durron597

3

CJam, 114

"P2"N400:ASAN6N0aA*aA*q~:M;:K{:CK,f{M*+K%P*2*K/_[mc)\ms)]199f*}_+2ew{~1$.-Af/A,\ff*\f.+{:mo~_3$=@C6%)tt}/}/}/Sf*N*

이미지를 ASCII PGM 형식으로 출력합니다.

온라인으로 시도 할 수 있지만 출력이 꽤 깁니다. 이미지 크기를 줄이려면 더 작은 숫자로 변경 400하고 변경할 수 있습니다 199.

CJam에는 이미지, 그림, 선 또는 모양에 대한 개념이 없으므로 픽셀 단위로 정사각 행렬로 이미지를 생성했습니다 (하나의 숫자는 각 픽셀의 회색 음영을 나타냄).

결과는 다음과 같습니다 30 12.

폴리그램


1

Mathematica, 70 바이트

ListPolarPlot[Table[{2Pi(i+j#2)/#,1},{i,GCD@##},{j,#+1}],Joined->1>0]&

글쎄 ... 이것은 지금까지 두 제출물을 능가하는 참조 구현입니다. 나는 내 자신의 도전에 이길 의도가 없으므로 누군가 이길 수 있기를 바라고있다.

출력은 여기서 축을 제거하지 않는 것을 제외하고는 챌린지 자체의 플롯과 같습니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.