O desafio
Esse desafio é muito direto. Dados quatro pontos tridimensionais, calcule a área da superfície do tetraedro que eles formam. Isso é código-golfe , então o código mais curto vence. Aplicam-se brechas padrão, com a estipulação adicional de que é proibida qualquer função interna para executar esta tarefa, com quatro pontos.
Você pode assumir que todos os quatro pontos serão distintos e serão dados via STDIN, 1 ponto por linha. Cada ponto consistirá em três números inteiros não assinados de 16 bits. O formato exato de cada ponto pode ser modificado se facilitar as coisas, como três números inteiros separados por espaço. Porém, ter cada ponto em uma linha separada é obrigatório. A saída deve ser feita por STDOUT, com pelo menos 2 casas decimais.
Para aqueles que não sabem, um tetraedro é um sólido 3-d, formado por 4 faces triangulares.
Exemplo
# input (format is up to you, see clarification above)
[23822, 47484, 57901]
[3305, 23847, 42159]
[19804, 11366, 14013]
[52278, 28626, 52757]
# output
2932496435.95
Deixe uma nota se notar que minha matemática está errada.
[[list],[of],[lists]]
?Respostas:
Python,
198 178161 caracteresO formato de entrada é o indicado na pergunta.
Ele calcula o comprimento das arestas adjacentes a cada uma das faces e depois usa a fórmula de Heron .
fonte
Matlab / Octave 103
Eu assumo os valores a serem armazenados na variável
c
. Isso usa o fato de que a área de um triângulo é a metade do comprimento do produto cruzado de dois de seus vetores laterais.fonte
Input[]
Input[]
,InputString[]
,Import[]
, eImportString[]
.APL, 59
Funciona calculando produtos cruzados
Explicação
A primeira linha define uma função que recebe dois argumentos (implicitamente nomeados
⍺
e⍵
), espera implicitamente que sejam matrizes numéricas de comprimento 3, as trata como vetores 3D e calcula a magnitude quadrada de seu produto cruzado.A segunda linha faz o resto.
fonte
Python 3,
308 298 292 279 258254Isso usa:
fonte
for i in">"*4
é inteligentex**0.5
, em vez demath.sqrt(x)
.def a(t,u,v)
em uma linha assim:def a(t,u,v):w=(t+u+v)/2;return(w*(w-t)*(w-u)*(w-v))**0.5
.Mathematica
168154Ele encontra os comprimentos das bordas do tetraedro e usa a fórmula de Heron para determinar as áreas das faces.
Existe uma rota mais direta que requer apenas 60 caracteres , mas viola as regras na medida em que calcula a área de cada face com uma função integrada
Area
:fonte
Sábio - 103
A parte de leitura de entrada é adaptada da resposta de Keith Randall .
fonte
Python - 260
Não sei ao certo qual é a etiqueta ao postar respostas para suas próprias perguntas, mas ela é a minha solução, que usei para verificar meu exemplo:
Ele usa o mesmo procedimento que os laurencevs.
fonte
r=range
.lambda
é mais curto quedef
.math.sqrt
pode ser substituído por(…)**.5
.p=copy.copy(P);p.pop(j);
pode ser reduzido parap=P[:j-1]+P[j:]
.A
é usado apenas uma vez.C, 303
Excluindo espaços em branco desnecessários. No entanto, ainda há muito golfe a ser feito aqui (tentarei voltar e fazer isso mais tarde). É a primeira vez que declaro um
for
loop em um#define
. Eu sempre achei maneiras de minimizar o número de loops antes.Eu tive que mudar de
float
paradouble
obter a mesma resposta que o OP para o caso de teste. Antes disso, eram 300 rodadas.scanf
funciona da mesma forma, se você separa sua entrada com espaços ou novas linhas, para que você possa formatá-la em quantas ou quantas linhas desejar.fonte