파이썬, 456 429 381
import turtle as t
L="fl"
R="fr"
d=L*3+R*3
b=(d+R)*3
a=[b,120,L*3+"fflflffflflfrflflfffl"+R*4+"flf",90,b+"ffrfrflffrffrfrfrflflf",120,(R*5+L*5+R+L)*5+"rrfr"+L*5+R*2+L*2+R*4+"f",72,(d+"f")*5+"rfl"+((d+"b")*5)[:-1],120]
l=t.lt
f=t.fd
b=t.bk
r=t.rt
p=input()*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
for c in a[p]:exec c+"(a[p+1])"
t.getscreen().getcanvas().postscript(file="o")
l r f b
터틀 커서를 모양의 각도로 이동시키는 연산자로 기본 인터프리터를 구현했습니다 . 한 번에 한 각도 만 회전합니다. 나는 문자열 (psuedo-subroutines와 같은 종류)을 재사용하여 문자열을 압축했습니다. 포스트 스크립트 파일로 출력됩니다.
골프화되지 않은 코드에 대한 약간의 설명 :
import turtle as t
Left="fl"
Right="fr"
diamond= Left*3 + Right*3
tetrahedron=(d+R)*3 #used to be b
내장 거북이 모듈을 가져오고 문자열을 단축시키는 매크로를 정의합니다. 거북이 모듈은 명령을 사용하여 화면에서 '거북이'를 움직입니다 (예 : 앞으로 (100), 왼쪽 (90))
netList=[
#tetrahedron
tetrahedron,120,
#cube
Left*3+"fflflffflflfrflflfffl"+Right*4+"flf",90,
#octohedron, builds off the tetrahedron
tetrahedron+"ffrfrflffrffrfrfrflflf",120,
#dodecahedron
(Right*5 + Left*5 + Right + Left)*5
+"rrfr"+
Left*5 + Right*2 + Left*2 + Right*4 + "f",72,
#icosahedron
(diamond+"f")*5 +"rfl"+((diamond+"b")*5)[:-1],120
]
이 목록에는 각도와 이동 순서가 있습니다. 4 면체는 8 면체와 재사용하기 위해 저장되었습니다.
l=t.left
f=t.forward
b=t.back
r=t.right
이것은 내가 좋아하는 부분으로, 단일 문자 로컬 기능을 수행하므로 미리 정의 된 문자열을 통해 호출을 단축하고 자동화 할 수 있습니다.
input=int(raw_input())*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
입력을 받아 (1에서 5 사이) netList에서 모양 문자열을 가리키는 인덱스로 변환합니다. 이 설정 거북이는 전체 그물을 보여줍니다. 과제를 그리는 것이라면 이것들을 생략 할 수 있지만 그림 출력이 필요하기 때문에 필요합니다.
for command in netList[input]:
exec command+"(netList[input+1])"
t.getscreen().getcanvas().postscript(file="o")
for 루프는 명령 시퀀스 문자열에서 명령을 가져 와서 실행하므로 "fl"과 같은 문자열의 경우 "forward (angle); left (angle);" 새로 작성된 로컬 함수를 호출하여 마지막 행은 turtle 함수를 사용하여 포스트 스크립트 형식 형식 인 'o'라는 파일을 출력합니다.
실행하려면 :
파일로 복사하여 거기서부터 실행하십시오. 당신이 그것을 실행할 때, 그것은 1에서 5 사이의 숫자 입력을 기다릴 것입니다 (거북을 설정하기 전에 묻도록 방금 변경했습니다). 숫자를 입력하면 창이 나타나고 그물을 그립니다. 더 빨리 가고 싶다면 t.speed(200)
전에 추가 할 수 있습니다 setup
.
인터프리터에 복사하여 붙여 넣을 수 있지만 raw_input()
호출 되면 "t.setup(.9,.9)"
숫자 대신 입력 한 다음 문자열을 사용 합니다. 따라서이 작업을 수행 raw_input()
하는 경우을 복사하고 나머지는 붙여 넣기보다 숫자를 입력하십시오. 전체적으로 실행되도록 고안되었습니다. 또는 함수에 복사하여 호출 할 수 있습니다.
출력 결과는 다음과 같습니다 (postscript에서 변환 됨).
참고 : 창의 위치는 변경되었지만 전체 모양은 동일합니다.
코드 골프에는 약간의 힘이 있지만 모양 사이에서 일관된 패턴을 찾는 데 지쳤습니다.