Python, 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")
Eu implementei um intérprete primitivo com l r f b
operadores que movem o cursor da tartaruga no ângulo das formas. Ao mesmo tempo, ele gira apenas um ângulo. Compactei as strings reutilizando strings (como psuedo-sub-rotinas); além disso, não verifiquei se estava usando o melhor caminho. Ele gera um arquivo postscript.
Uma pequena explicação do código não golfe:
import turtle as t
Left="fl"
Right="fr"
diamond= Left*3 + Right*3
tetrahedron=(d+R)*3 #used to be b
Importa o módulo embutido tartaruga e define as macros que encurtam as seqüências de caracteres. O módulo tartaruga usa comandos para mover uma 'tartaruga' pela tela (ou seja, para frente (100), esquerda (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
]
Esta lista contém os ângulos e as seqüências de movimento. O tetraedro foi salvo para reutilização com os octohedren.
l=t.left
f=t.forward
b=t.back
r=t.right
Esta é a parte que eu gosto, ela cria funções locais de um único caractere para que as chamadas possam ser encurtadas e automatizadas por meio de strings predefinidas.
input=int(raw_input())*2-2
t.setup(.9,.9)
t.goto(-200,150)
t.clear()
Isso começa pegando a entrada (entre 1 e 5) e convertendo-a em um índice que aponte para a string de forma no netList. Estes configuração tartaruga para mostrar toda a rede. Eles podem ficar de fora se a tarefa for apenas desenhá-los, mas como precisamos de uma imagem, eles são necessários.
for command in netList[input]:
exec command+"(netList[input+1])"
t.getscreen().getcanvas().postscript(file="o")
O loop for pega os comandos na sequência de sequências de comandos e os executa; portanto, para uma sequência como "fl", executa "forward (angle); left (angle);" chamando as funções locais recém-criadas. a última linha gera um arquivo chamado 'o' que está no formato de postscript usando a função turtle.
Para correr :
Copie-o para um arquivo e execute-o a partir daí. Quando você o executa, ele espera uma entrada de número entre 1 e 5 (eu apenas mudei para que ele pergunte antes de configurar a tartaruga). Quando você digita um número, uma janela é exibida e desenha a rede. se você quiser ir mais rápido, você pode adicionar t.speed(200)
antessetup
.
Você pode copiar e colar no intérprete, mas quando raw_input()
é chamado, consome a próxima string que você digita, em "t.setup(.9,.9)"
vez de um número. Então, se você fizer isso, copie atéraw_input()
, digite um número e copie e cole o restante. Destina-se a ser executado como um todo. Ou você pode copiá-lo em uma função e chamá-lo.
Aqui estão as saídas (convertidas do postscript):
Nota: a posição destes na janela mudou, mas sua forma geral é a mesma.
É um pouco de força bruta para o código de golfe, mas me cansei de tentar encontrar um padrão consistente entre as formas.
d
é a cadeia que faz os dois triângulos, por isso é(d+'f')*5+setupPosition+(d+'b')*5
setup
faz com que a janela da tartaruga seja grande o suficiente para segurar a rede. O mesmo ocorre comgoto
a "tartaruga" para -200, 150.clear
limpa a linha feita porgoto
. Seus apenas comandos para configurar o desenho.p=(ord(raw_input())-49)*2
leva um número, de 1 a 5, correspondente à forma desejada.Mathematica
Fora da competição, não é um idioma gratuito (a menos que um teste gratuito conte como gratuito)
Uso:
fonte
Python 2 (com cairo) - 239
Resultados:
fonte
Logotipo, 199 bytes
Lendo isso de volta, vejo que minha versão original não estava em conformidade com as especificações escritas (pegue um argumento numérico e desenhe uma forma), mas sim como interpretada por algumas das outras respostas (desenhe todas as formas). A nova versão corrige isso. Ele espera ser chamado como por exemplo
q 5
.cs
deve ser feito antes para limpar a tela e apontar a tartaruga para o norte.q
chama a função principalp
com 3 argumentos. A sintaxe para isso é bastante inchada, então, para superar minha pontuação anterior, tive que raspar bytes em outro lugar.a nova versão do
p
leva 3 argumentos. Não há necessidadex
ey
porque traçamos apenas uma rede, masd
o passo entre as subunidades permanece.s
ainda é o número de lados por polígono en
agora codifica para duas coisas diferentes>n/8
é o número de subunidades a serem plotadas en*45
é um ângulo através do qual a tartaruga deve ser girada antes de começar (aproveitando o mod natural 360 para rotações. )O loop aprimorado realiza o desenho de
s
linhas com rotação à direita es+2
linhas com rotação à esquerda em um único loop.o intérprete calormen parece ser menos tolerante com a falta de espaço em branco agora do que na época do meu primeiro post, mas o código funciona bem em http://turtleacademy.com/playground/en
Logotipo, 200 bytes
Intérprete em http://www.calormen.com/jslogo/# Supõe-se que a tartaruga esteja apontando para o norte antes de o programa ser executado. Use o
cs
comando para limpar a tela, aponte a tartaruga para o norte e coloque-a na origem no centro da tela.A unidade básica de todas as redes acima é um par de polígonos consecutivos. Estes estão dispostos em 2 fileiras escalonadas, formando uma subunidade de 4 polígonos que podem ser traduzidos verticalmente para formar todas as redes (exceto o octaedro, que monta uma carona no desenho do icosaedro e tetraedro). A subunidade forma 1 rede de tetraedro, 1/5 da rede de icosaedro, 1/3 da rede de dodecaedro e 2/3 da rede de cubos (duas subunidades são desenhadas, com os dois quadrados do meio sobrepostos).
Código ungolfed
fonte
ht
para ocultá-lo para a imagem. Estou feliz por não ter!