Método mais curto para implementar o Teorema de Pitágoras


14

Quem não ama o teorema de Pitágoras a² + b² = c²? Escreva o método mais curto possível em qualquer idioma que considere o valor aeb e imprima "A hipotenusa deste triângulo retângulo é" + c. Mantenha c com apenas três casas decimais.


3
Isso se qualifica como um quebra-cabeça de programação?
5134

1
@DavidCarraher O problema em si não é quebra-cabeça de programação. Mas como o objetivo é buscar uma solução para ele, é de fato um quebra-cabeça de programação.
Victor Stafusa

3
menor em caracteres
Vik P

4
A code-golftag diz explicitamente "O código-golfe é uma competição para resolver um problema específico no menor número de bytes de código-fonte". Consulte Código de pontuação de golfe (bytes vs. caracteres) .
res

1
@res: Fixed :-p
Timwi

Respostas:


15

APL (54)

'The hypotenuse of this right triangle is',3⍕.5*⍨+/⎕*2

Teste:

      'The hypotenuse of this right triangle is',3⍕.5*⍨+/⎕*2
⎕:
      9 10
The hypotenuse of this right triangle is 13.454

Explicação:

  • ⎕*2: eleva os valores na entrada para a segunda potência
  • +/: pegue a soma
  • .5*⍨: elevar o resultado para a 0.5ª potência
  • 3⍕: arredondar para 3 casas decimais

Trata-se de imbatível
Cruncher

@ Cruncher: tentei codificar a string, mas não consegui obter a rotina de decodificação suficientemente pequena.
marinus

Pelo princípio do buraco do pombo, acho que você passaria muito tempo (talvez impossível. Tem que ser impossível pelo menos para algumas cordas) tentando comprimir a corda. Talvez se a string tivesse algum padrão lógico, mas isso não parece ser o caso. Estou interessado em ver as tentativas que você teve até agora, porém
Cruncher

7
Corrija a ortografia de "hipotenusa" para salvar um personagem.
Tim S.

1
@Cruncher: Na verdade, eu venci em Sclipting ...
Timwi

11

TI-BASIC, 76 55 53 52 bytes

Input :Disp "THE HYPOTENUSE OF THIS RIGHT TRIANGLE IS
Fix 3:R▶Pr(X,Y

Não, parênteses de fechamento não são necessários. Além disso, menos bytes do que a resposta da APL :)


1
Poderia ser R▶Pr(A,B.
lirtosiast

3
2 anos para implementar uma sugestão, lol.
mbomb007

Destinado à grandeza, eu acho. E acabei de raspar mais dois bytes para vencer o APL!
Timtech 13/09/17

-1 byte:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya

Usar Inputpara pedir Xe Yé meio hilário. Se permitirmos isso, devemos também permitir a configuração PolarGCantes Input, para que o comprimento da hipotenusa seja determinado pelo byte R? É certo que PolarGCos valores de Xe Ynão são mais exibidos quando movemos o cursor, mas eles ainda são armazenados nas variáveis ​​apropriadas. (Que seria, então nunca usa, mas é o pensamento que conta.)
Misha Lavrov

9

Python 2.7 - 76 caracteres

print'The hypotenuse of this right triangle is %.3f'%abs(input()+1j*input())

Explicação

| a + ib | = √ (a 2 + b 2 ) = c

==> a 2 + b 2 = c 2

PJ em hipotenusa

Professor: "Você pode me dizer, o que é hipotenusa?"

LJ: "Hipotenusa, uma pergunta fácil. Se há uma festa de destaque ontem à noite e você a lê no jornal, chama-se High Party News"


8

Sclipting , 46 caracteres

글坼各갠方終加감半方갾밈乘增貶껠矽녆둥긆둹댆뭴뉖멵댶넠닶눠덆둩댲걲늖덨덂건댦땡닦덬뉒걩댲밀⓶

Espera a entrada como dois números (pode ser fracionário!) Separados por um espaço.

Isso é mais curto que o APL, apesar de ter que usar alguns truques inconvenientes.

Explicação

글坼 | split at space
各 | for each...
  갠方 | to the power of two
終
加 | add
감半方 | to the power of one half
갾밈乘 | multiply by 1000
增貶 | increment, then decrement (kludge for rounding)
껠矽 | insert '.' at 4th-last character position
녆둥긆둹댆뭴뉖멵댶넠닶눠덆둩댲걲늖덨덂건댦땡닦덬뉒걩댲밀⓶ | "The hypotenuse..."

2
unicode não faz isso como 92 bytes?
triturador

@ Cruncher Perguntei ontem nos comentários da pergunta, o que conta é a contagem de caracteres, não a contagem de bytes.
Joachim Isaksson

3

dc 54

Tangente a pontuação da resposta do APL!

2^r2^+3kv[The hypotenuse of this right triangle is ]Pp

Teste:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000

realmente não funciona para mim. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'não espera nenhuma entrada, imprime "dc: stack empty"3 vezes e depois "A hipotenusa deste triângulo retângulo é 2.000".
Tomas

1
@ Tomas é uma espécie de função aa; você precisa colocar os parâmetros na pilha primeiro, como mostro no teste, ou se você quiser invocar seu caminho, seria dc -e '3 4 2^r2^+3kv[...onde 3 e 4 são os parâmetros.
Daniero

3

C, 77 ou 99

77 caracteres se a entrada puder ser apenas os argumentos da função:

f(a,b){printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

99 se for necessário ler a entrada do stdin:

a,b;f(){scanf("%d %d",&a,&b);printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

Um grande obrigado a @Yimin Rong!


1
Há um hypot (a, b) que salvará três caracteres.

Essa função não compilar o que quer compilar eu uso gcc tcc clang no tio ... talvez falta um header #include e no título da versão precisa do compilador
RosLuP

3

Powershell

Só para ver se eu poderia ...

echo "The hypotenuse of this right triangle is " ([math]::round([math]::sqrt(([math]::pow(([double](Read-Host -p "A")),2) + [math]::pow(([double](Read-Host -p "B")),2))),3))

1
Bom trabalho. Parece que você fez isso enquanto eu estava ocupado com minha própria solução, que supera isso em cerca de 62 caracteres. Para referência futura, espera-se que as respostas do Code Golf sejam "golfadas" e tenham sua "pontuação" incluída. "Golfe" significa que você deve fazer todos os esforços para reduzir o tamanho dos caracteres usando pseudônimos de mão curta, truques de sintaxe e outros meios de estender as regras do idioma. Você também deve remover espaços em branco desnecessários sempre que possível (há pelo menos três espaços que podem ser removidos da sua solução). A "pontuação", neste caso, é a sua contagem de caracteres - atualmente 173.
Iszi

Sugiro que você leia o wiki da tag code golf, várias partes da Central de Ajuda e o tópico Dicas de golfe para PowerShell para ter uma idéia melhor de como escrever uma resposta competitiva para os desafios de código aqui.
Iszi

Além disso, recebo um erro com seu script. "... o nome do parâmetro 'p' é ambíguo ..." em relação a Read-Host.
Iszi

3

Rubi, 94 90 82 caracteres

p "The hypotenuse of this right triangle is %.3f"%(Math.sqrt(gets.to_i**2+gets.to_i**2))

Atualização (obrigado pelos comentários):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5

1
Você pode salvar alguns caracteres se usar em a**0.5vez de longos Math.sqrt(a). E o espaço depois ptambém pode ser removido.
Nik O'Lai

1
E você não precisa de parênteses %(Math...).
Nik O'Lai

2

MATLAB 79 74

@(a,b)sprintf('The hypotenuse of this right triangle is %.3f',norm([a b]))


2

C ++ - 90

void h(int a,int b){printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

pow(a,2)quando você pode fazer a*a? Estou também não tenho certeza eu entendo o propósito de chão eo +.5 ea multiplicar e dividir em 1000
Cruncher

@Cruncher O piso é para definir a casa decimal em 0,3 casas. Estou reformulando agora e incluirei sua sugestão.

Há um hypot (a, b) que salvará três caracteres.

@YiminRong Cool!

2

Perl 6 (68 74 bytes)

{printf "The hypotenuse of this right triangle is %.3f
",sqrt [+] @_ X**2}

{}declara uma função lambda. [+]é operador de soma, X**é operador de potência cruzada (por exemplo, 1, 2 X+ 10, 2011, 21, 12, 22). Nesse caso, o operador de potência cruzada usa um argumento, portanto o resultado tem o mesmo comprimento que @_. @_contém todos os argumentos da função.

Se não for permitido ter uma função que possa levar um número errado de argumentos (inseguro), é possível substituir [+] @_ X**2 por $^a**2+$^b**2, onde $^ae $^bsão argumentos de espaço reservado.


2
Como você limitaria a 3 casas decimais?
Joachim Isaksson

@JoachimIsaksson: Falha na leitura. Deve ser corrigido agora.
Konrad Borowski

2

Javascript (97)

x=prompt;a=x(),b=x();x('The hypotenuse of this right triangle is '+Math.sqrt(a*a+b*b).toFixed(3))

.toFixed .. obrigado! Aprendi algo novo :)
micha

2

C, 100 caracteres (supera a outra solução C por 1!)

Um algoritmo ridiculamente ineficiente.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}

Desculpe, mas você escreveu "the" em vez de "this", portanto, se você corrigir que tem o mesmo comprimento, P
daniero

@daniero Ok, encontrada uma solução, agora ainda um carvão animal para baixo :)
user12205

No compilador Borland C não seria compilar ...
RosLuP

2

DELPHI / PASCAL

Com travessão (157)

program p;
{$APPTYPE CONSOLE}
var a,b:integer;
begin
     readln(a,b);
     writeln('the hypotenuse of this right triangle is',sqrt(b*b+a*a):2:3);
end.

1
ah cara, eu tinha exatamente o mesmo :(
Teun Pronk

até tarde para uma edição, então novamente .. Editar: você pode obter 2 caracteres alterando integerpara int16Você não precisa incluir as 2 primeiras linhas da sua resposta e pode remover o espaço em branco. fazendo tudo o que lhe dá 106 caracteres.
Teun Pronk

2

EcmaScript 6, 82 79

f=(a,b)=>"The hypotenuse of this right triangle is "+Math.hypot(a,b).toFixed(3)

Uso:

f(3, 5)
> "The hypotenuse of this right triangle is 5"

Atualização: Alterne paraMath.hypot()


2

Golfe ( 69 67 66 65)

Isso seria muito mais fácil se o ponto flutuante fosse realmente suportado sem recorrer a soluções alternativas ... :)

~'The hypotenuse of this right triangle is '@.*@.*+2-1??+.'.'?4+<

Um link para testá-lo .


por que você está fazendo 2.!~quando 2-1é mais curto?
21414 McKay

@ McKay Boa pergunta, eu sempre fico the difference between 2-1` e 2-1errado, então provavelmente estava temporariamente confuso :) Corrigido, obrigado.
Joachim Isaksson

2

Python 2 (79)

def p(a,b):print'The hypotenuse of this right triangle is %.3d'%((a*a+b*b)**.5)

Dispensar mathalgumas economias. (a*a+b*b)**.5
Steven Rumbalski

Como o corpo da sua função é uma instrução única, ele pode estar na mesma linha que defsalvar uma nova linha e um recuo.
Steven Rumbalski

1

AWK - 84 78 caracteres

awk '{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}'

Obrigado a Wasi por sugerir ^ operator e remover ()!

por exemplo

$ echo 3 4 | awk '{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}'
The hypotenuse of this right triangle is 5.000

Você pode golfe-lo ainda mais{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi

1

PowerShell: 111

Código de golfe

1..2|%{sv $_ (read-host)};"The hypotenuse of this right triangle is $("{0:N3}"-f[math]::sqrt($1/1*$1+$2/1*$2))"

Passo a passo

1..2|%{sv $_ (read-host)};Obtém duas entradas interativamente do usuário e as armazena em $ 1 e $ 2. Pode ser capaz de reduzir algum comprimento usando argumentos ou entradas de pipeline.

"The hypotenuse of this right triangle is Texto necessário na saída, de acordo com as especificações do desafio.

$(... O )"bloco de código encapsulado será processado como script antes de ser incluído na saída.

"{0:N3}"-f Formata a saída do próximo bit de código como um número com exatamente três dígitos após o ponto decimal.

[math]::sqrt(... )Obtém a raiz quadrada do valor encapsulado.

$1/1*$1+$2/1*$2Serve como nosso "a ^ 2 + b ^ 2". Multiplicar um número por si só é a maneira mais curta de quadrá-lo no PowerShell, mas as variáveis ​​precisam ser divididas por 1 primeiro para forçá-las a números inteiros. Caso contrário, eles são tratados como texto e 3 * 3 + 4 * 4 seria 3334444 em vez de 25.


1

JavaScript: 83

i=prompt,'The hypotenuse of this right triangle is '+Math.hypot(i(),i()).toFixed(3)

Atualmente, a implementação JS mais curta usando stdin: D
Funciona apenas no Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

Se pudermos usar apenas duas variáveis ​​(como muitos scripts fazem aqui):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)

whoooo ... hipoteca. Boa pegada!
Mica

1

dc, 55

3k?d*?d*+v[The hypotenuse of this right triangle is ]Pp

1

Java, 112

(Também imprime um erro No Such Method, embora não tenha certeza se isso é contra as regras)

class A{static{int a=1,b=1;System.out.printf("The hypotenuse of this right triangle is %.3f",Math.hypot(a,b));}}

Java, 149

(Sem erro)

class A{static{int a=1,b=1;System.out.printf("The hypotenuse of this right triangle is %.3f",Math.hypot(a,b));}public static void main(String[] a){}}

1

C #

Apenas método (114)

void H(double a, double b)
{
    Console.Write("The hypotenuse of this right triangle is {0:N3}", Math.Sqrt(a * a + b * b)); 
}

Programa completo (171)

using System;
class P
{        
   static void H(double a, double b)
   {
     Console.Write("The hypotenuse of this right triangle is {0:N3}", Math.Sqrt(a * a + b * b));
   }                
   static void Main()
   {
    H(3, 4);
   }
}

Programa completo (sem usar o método - 141)

using System;class P{static void Main(){double a=3,b=4;Console.Write("The hypotenuse of this right triangle is {0:N3}",Math.Sqrt(a*a+b*b));}}

1
Heres meu programa completo. 141 caracteres ... você pode salvar alguns caracteres usando a sobrecarga de gravação de formatos usando System; classe P {static void Main () {double a = 3, b = 4; Console.Write ("A hipotenusa deste triângulo retângulo é {0: N3} ", Math.Sqrt (a a + b b));}}
Tim Bailey

1
Você pode usar a formatação de seqüência de caracteres no Console.Write em vez de chamar ToString () para salvar 9 caracteres.
Rik

1

JavaScript 118 106 93

Diferentemente da solução de @ micha, a minha recebe duas variáveis ​​via função e envia o alerta do resultado.

function(a,b){m=Math;c=d=>d*d,e=1e3;alert("The hypotenuse of this right triangle is "+m.round(m.sqrt(c(a)+c(b))*e)/e)}

function(a,b){e=1e3;alert("The hypotenuse of this right triangle is "+Math.round(Math.sqrt(a*a+b*b)*e)/e)}

A seta gorda funciona para o resgate!

h=(a,b,e=1e3)=>"The hypotenuse of this right triangle is "+Math.round(Math.sqrt(a*a+b*b)*e)/e


1
Pode ser mais curto se você inline c(). O aliasing Mathnão salva bytes no seu caso.
Florent

@ Florent Ah, sim ... um segundo!
Wally West


1

R, 61 bytes

cat("The hypotenuse of this right triangle is",round(sqrt(sum(scan()^2)),3))

cat exibe seu conteúdo para STDOUT.

A scan()função recebe a entrada do usuário do teclado. Essa entrada existe como um vetor, no qual ^2é aplicada (a ^função é vetorizada) e sum()soma os elementos do vetor. sqrtgera a raiz quadrada, que é arredondada para 3 casas decimais porround(,3)

Agradecemos a @caird coinheringaahing por notar que a resposta anterior não foi arredondada.


Isso "Mantenha c com apenas três casas decimais"?
caird coinheringaahing

@cairdcoinheringaahing: faz agora! Obrigado !
Frédéric

1

ARBLE , 73 bytes

"The hypotenuse of this right triangle is "..floor(sqrt(a^2+b^2)*1e3)/1e3

Experimente online!


1
@ H.PWiz Devo dizer que, para um desafio que deveria ser sqrt(a^2+b^2), isso tem muitos clichês desnecessários.
ATaco 22/10

1

OML , 57 bytes

"The hypotenuse of this right triangle is "shnhn+A6`*N3eD

Experimente online!

Parte 1

Isso simplesmente gera a string

"The hypotenuse of this right triangle is "s

Parte 2

hnhn+A6`*N3eD
hn              take input and square it
  hn            take another input and square it
    +           add them
     A6`        push 10^6
        *       multiply the sum with that number
         N      take integer square root
          3eD   output with three places of precision
                implicit output

1

Gelatina , 32 caracteres

,²S½ær3µ,“¡ÆC⁷⁺ɱSoṿȤç½?⁶Ẏtḍỵŀ»ṚK

Experimente online!

Provavelmente existe uma melhor compactação de strings que me permite contornar a necessidade de me juntar a espaços, mas estava tendo problemas para encontrá-lo.

Explicação:

,²S½ær3µ,“...»ṚK    Example inputs: 3, 4
,                   Pair the inputs. Result: [3, 4]
 ²                  Square them. Result: [9, 16]
  S                 Sum them. Result: 25
   ½                Get the square root of the sum. Result: 5
    ær3             Round to 3 decimal places. Result: 5
       µ            Take the result of that... Result: 5
         “...»       ...and  the compressed string Result: "The hypotenuse of this right triangle is"
        ,           And put them into a pair. Result: [5, "The hypotenuse of this right triangle is"]
              Ṛ     Reverse that. Result: ["The hypotenuse of this right triangle is", 5]
               k    Join it with spaces. Result: "The hypotenuse of this right triangle is 5.0"
                    Implicit output.

Enquanto only three decimal placesmeios less than or equal to three decimal places, a saída parece boa.
Engineer Toast
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.