인생의 골프 꽃


19

여기서의 과제는 선택한 언어로 생명의 꽃 (일부는 신성한 기하학적 인물)을 정확하게 묘사하는 것입니다.

생명의 꽃

이 설계는 중심이 피치 1의 삼각형 격자에 배열 된 중심과 중심을 둘러싸는 하나의 더 큰 반경 3의 원으로 표시된 바와 같이 반경 1의 원과 부분 원의 배열로 구성됩니다.

디자인은 원하는대로 확장 할 수 있지만 수학적으로 정확한 최대 2 %의 오차는 허용됩니다. 래스터 그래픽을 사용하는 경우 작은 원의 지름이 약 100 픽셀 이상으로 효과적으로 제한됩니다.

이것이 코드 골프이기 때문에 가장 짧은 코드 (바이트)가 이깁니다.


10
사이트에 오신 것을 환영합니다! 아시다시피, 일반적으로 답변을 수락하기 전에 잠시 기다려 주시기 바랍니다. 다른 사용자는 컨테스트를 "오버"로 보지 않으며 더 많은 참여와 경쟁이있을 것입니다.
DJMcMayhem

2
"시각적이고, 알아볼 수 있고, 정확하다"는 분명하거나 객관적이지 않다. 객관적 유효성 기준없이 제출물이 유효한지 여부를 판단하는 것은 불가능합니다. 샌드 박스 를 사용 하여 주요 사이트에 게시하기 전에 문제가있는 잠재적 인 문제를 해결하는 것이 좋습니다.
Mego

"인식 가능"과 같은 추상 규칙 외에도 최소 크기를 지정하는 것이 좋습니다.
manatwork

아직 아무도 연결하지 않았기 때문에 새로운 과제에 대한 피드백을받을 수 있도록 설계된 메타에 샌드 박스가 있습니다. 당신은 여기에서 찾을 수 있습니다 meta.codegolf.stackexchange.com/questions/2140/...을
tuskiomi

1
실제로는 단지 19 개의 원이 아닙니다. 가장자리에도 약간의 원호가 있습니다. (6 개 중 2π / 3, 12 개 π, 18 개 π / 6 개)
Martin Ender

답변:


23

매쓰, 177 173 128 124 120 바이트

c=Circle;Graphics@{{0,0}~c~3,Rotate[Table[If[-3<x-y<4,c[{√3x,-x+2y}/2,1,Pi/{6,2}]],{x,-3,2},{y,-4,2}],Pi/3#]&~Array~6}

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

주요 아이디어는 6 가지 회전 버전의 결과를 작성하는 것입니다.

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

이것은 두 개의 모서리가 잘린 동일한 원호의 직사각형 테이블입니다. 전단을 제거하고 각 원 중심을로 표시하면 #기본적으로이 패턴으로 원을 분포하려고합니다.

####
#####
######
######
 #####
  ####

이 가장자리는 조건을 부과함으로써 차단하는 -3 < x-y < 4차원 인덱스에를 (의 값이 이후 x-y대각선을 따라 상수는)과 전단이 곱에서 유래 xy우리가 찾고있는 그리드에 걸쳐 비 직교 기저 벡터에 의해.

회전되지 않은 호의 이러한 특정 방향은 호의 양쪽 끝이 균등하게 나뉘어 Pi호가 다음과 같이 표현 될 수 있기 때문에 가장 짧게 나타납니다 Pi/{6,2}.


√3을 사용하면 숫자 오류의 원인을 제거하면서 2 자 및 0 바이트를 저장할 수 있습니다.
Kelly Lowder

@KellyLowder 좋은 지적, 고정.
Martin Ender

8

OpenSCAD, 228 바이트

$fn=99;module o(a=9){difference(){circle(a);circle(a-1);}}function x(n)=9*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o();q(g-1);}}else{intersection(){translate(x(i))o();circle(9);}}}q(2);o(27);

아래는 누군가 r (반지름)과 w (반지 폭)을 설정할 수있는 버전입니다.

r=1;w=.1;$fn=99;module o(n){difference(){circle(n);circle(n-w);}}function x(n)=(r-w/2)*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o(r);q(g-1);}}else{intersection(){translate(x(i))o(r);circle(r);}}}q(2);o(3*r-w);

이 버전은 xactly 246 자입니다.
이 코드 중 일부는 기술적으로 필요하지 않지만 그림처럼 보이게 만듭니다.


OpenSCAD.net (Firefox 47)에서이 오류가 발생합니다. Error: Error: Parse error on line 1: ...x(k))o();circle(9);};}}}q(2);o(27); -----------------------^ Expecting 'TOK_ID', '}', 'TOK_IF', '!', '#', '%', '*', got ';'
HyperNeutrino

@AlexL. Mac에서 실제 OpenSCAD 클라이언트를 사용할 때 해당 오류가 발생하지 않습니다. 그러나 Chrome을 사용하여 OpenSCAD.net에서 해당 오류를 복제 할 수 있었으므로 실망 스럽습니다. 서비스에 문제가 있다고 생각합니다. 데스크톱 응용 프로그램을 사용해 볼 수 있습니까?
Henry Wildermuth

1
데스크탑 버전 (Ubuntu 14.04 LTS)에서 나를 위해 일했습니다.
Benjamin Spector

1
코드에서};} 패턴을 발견했습니다. 두 버전 모두에서 문자를 면도하는}}로 안전하게 바꿀 수 있다고 생각합니다. 직접 테스트하여 작동하는 것 같습니다.
Benjamin Spector

6

Mathematica 263 바이트

@MartinEnder의 제출과 경쟁하지는 않지만 그럼에도 불구하고 재미있었습니다. 나는 꽃잎이 무작위로 걷는 것을 허용했다! 꽃잎은 또한 임의로 선택된 종점 중 하나에 대해 60 도씩 무작위로 회전하여 걷는다. 꽃잎의 회전 끝이 큰 디스크 바깥으로 떨어지는 지 테스트하고, 그렇다면 회전이 반대 방향으로 진행됩니다.

c=Circle;a=√3;v={e=0{,},{0,2}};f=RandomChoice;Graphics@{e~c~6,Table[q=f@{1,2};t=f@{p=Pi/3,-p};r=RotationTransform[#,v[[q]]]&;v=r[If[r[t]@v[[-q]]∈e~Disk~6,t,-t]]@v;Translate[Rotate[{c[{1,a},2,p{4,5}],c[{1,-a},2,p{1,2}]},ArcTan@@(#-#2)&@@v,e],v[[2]]],{5^5}]}

다음은 애니메이션에 사용한 후속 코드입니다.

Export[NotebookDirectory[]<>"flower.gif", Table[Graphics[Join[{c[e,6]},(List@@%)[[1,2,1;;n-1]],{Thick,Red,(List@@%)[[1,2,n]]}]],{n,1,3^4,1}]]

랜덤 꽃잎 워크

나는 2 차원 랜덤 워크가 결국 원점으로 돌아와야한다는 곳을 읽었습니다. 큰 디스크를 채우는 것은 수천 단계로 보입니다.


이것은 정말 좋은 생각이지만 유한 한 반복 횟수로 전체 꽃을 채우지 않을 확률은 0이 아닙니다. 꽃잎 30 개를 그린 후에는 종료 조건을 추가해야합니다 (실제로 완료되었는지 여부를 결정하는 가장 짧은 방법 인 것 같습니다). 그런 다음 종료 할 때 도면이 완료되고 종료되지 않을 확률이 0임을 알게됩니다.
Martin Ender

그것과는 별도로, 저장할 수있는 많은 바이트가 있습니다 : Sqrt[3]is 3^.5. e처음 사용할 때까지 정의 할 필요가 없으므로이 트릭 을 사용하여 바이트를 저장할 수 있습니다 v={e=0{,},{0,2}}. 당신은 또한 같은 몇 가지 중위 표기법을 사용 e~c~6하거나 e~Disk~6, 및 ArcTan@@Subtract@@v동등해야한다 ArcTan@@(#-#2)&@@v.
Martin Ender

15 바이트를 제거하기 위해 접두사와 √ 연산자를 사용했습니다. @MartinEnder 팁에 감사드립니다. 취소 된 / 2와 2 *를 제거했습니다. 꽃잎이 180 개이므로 4 ^ 4 반복은 일반적으로 디스크의 약 절반을 차지하고 5 ^ 5는 작업을 수행합니다. 9 ^ 9가 디스크를 덮지 않을 확률은 10 ^ 400,000 중 ~ 1이며 이는 2 % 오류보다 훨씬 적으므로 낭비하는 바이트를 확인할 가치가 없습니다.
Kelly Lowder

3

자바 스크립트 (ES6) / SVG, 299 바이트

with(document){write(`<svg height=250 width=250><circle${b=` fill=none stroke=black `}cx=125 cy=125 r=120 />`);for(i=0;i<24;i++)write(`<path${b}d=M5,125${`${a=`a60,60,0,0,1,`}40,0`.repeat(i%4+3)+`${a}-40,0`.repeat(i%4+3)} transform=${`rotate(60,125,125)`.repeat(i>>2)}rotate(-60,${i%4*4}5,125) />`)}

다양한 길이의 여러 아크 쌍을 생성 한 다음 제자리로 회전시켜 작동합니다.

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