Méthode la plus courte pour implémenter le théorème de Pythagore

14

Qui n'aime pas le théorème de Pythagore a² + b² = c²? Écrivez la méthode la plus courte possible dans n'importe quelle langue qui prend la valeur a et b et affiche "L'hypoténuse de ce triangle rectangle est" + c. Gardez c à seulement trois décimales.

Vik P
la source
3
Est-ce que cela peut être considéré comme un puzzle de programmation?
DavidC
1
@DavidCarraher Le problème en soi n'est pas un puzzle de programmation. Mais puisque l'objectif est de trouver une solution pour le golf, il s'agit en effet d'un puzzle de programmation.
Victor Stafusa
3
le plus court en caractères
Vik P
4
La code-golfbalise indique explicitement "Code-golf est une compétition pour résoudre un problème particulier dans le moins d' octets de code source." Voir Code de score golf (octets vs caractères) .
res
1
@res: Fixed
:-p

Réponses:

15

APL (54)

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

Tester:

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

Explication:

  • ⎕*2: augmenter les valeurs en entrée à la deuxième puissance
  • +/: prendre la somme
  • .5*⍨: élever le résultat à la 0,5e puissance
  • 3⍕: arrondi à 3 décimales
marinus
la source
C'est à peu près imbattable
Cruncher
@Cruncher: J'ai essayé de coder la chaîne mais je n'ai pas pu obtenir une routine de décodage suffisamment petite.
marinus
Selon le principe du pigeon hole, je pense que vous auriez beaucoup de mal (peut-être impossible. Cela doit être impossible pour au moins certaines cordes) à essayer de compresser la corde. Peut-être que si la chaîne avait un modèle logique, mais cela ne semble pas être le cas. Je suis intéressé de voir les tentatives que vous avez eues jusqu'à présent
Cruncher
7
Corrigez l'orthographe de "hypoténuse" pour enregistrer un caractère.
Tim S.
1
@Cruncher: En fait, je l'ai battu dans Sclipting ...
Timwi
11

TI-BASIC, 76 55 53 52 octets

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

Non, une parenthèse fermante n'est pas requise. En outre, moins d'octets que cette réponse APL :)

Timtech
la source
1
Ça pourrait l'être R▶Pr(A,B.
lirtosiast
3
2 ans pour mettre en œuvre une suggestion, lol.
mbomb007
Destiné à la grandeur, je suppose. Et je viens de raser deux octets de plus pour battre APL!
Timtech
-1 octet:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya
Utiliser Inputpour demander Xet Yc'est un peu hilarant. Si nous permettons cela, devrions-nous également autoriser le réglage PolarGCavant Input, de sorte que la longueur de l'hypoténuse soit donnée par un octet R? Certes, PolarGCles valeurs de Xet Yne sont plus affichées lorsque nous déplaçons le curseur, mais elles sont toujours stockées dans les variables appropriées. (Ce que nous n'utiliserions jamais, mais c'est la pensée qui compte.)
Misha Lavrov
9

Python 2.7 - 76 caractères

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

Explication

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

==> a 2 + b 2 = c 2

PJ sur l'hypoténuse

Enseignant: "Pouvez-vous me dire, qu'est-ce que l'hypoténuse?"

LJ: "Hypoténuse, une question facile. S'il y a une fête de haut niveau hier soir, et que vous la lisez dans le journal, elle s'appelle High Party News"

Abhijit
la source
8

Sclipting , 46 caractères

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

Attend l'entrée comme deux nombres (peut être fractionnaire!) Séparés par un espace.

C'est plus court que APL, malgré le fait d'avoir à utiliser quelques astuces gênantes.

Explication

글坼 | 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..."
Timwi
la source
2
Unicode ne fait-il pas cela comme 92 octets?
Cruncher
@Cruncher J'ai demandé hier dans les commentaires de la question, ce qui compte, c'est le nombre de caractères, pas le nombre d'octets.
Joachim Isaksson
3

dc 54

Tangente le score de la réponse APL!

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

Tester:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000
daniero
la source
ne fonctionne pas vraiment pour moi. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'n'attend aucune entrée, imprime "dc: stack empty"3 fois puis "L'hypoténuse de ce triangle rectangle est 2.000".
Tomas
1
@Tomas c'est une sorte de fonction aa; vous devez d'abord mettre les paramètres sur la pile, comme je le montre dans le test, ou si vous voulez invoquer votre chemin, ce serait dc -e '3 4 2^r2^+3kv[...où 3 et 4 sont les paramètres.
daniero
3

C, 77 ou 99

77 caractères si l'entrée ne peut être que les arguments de la fonction:

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

99 si l'entrée doit être lue depuis stdin:

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

Un grand merci à @Yimin Rong!

Josh
la source
1
Il y a un hypot (a, b) qui vous fera économiser trois personnages.
Cette fonction ne compile pas la compilation que j'utilise gcc tcc clang dans tio ... manque peut-être d'un en-tête #include et dans le titre la version précise du compilateur
RosLuP
3

Powershell

Juste pour voir si je pouvais ...

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))
Brandon
la source
1
Bon travail. On dirait que vous avez fait cela alors que j'étais occupé avec ma propre solution, qui bat environ 62 caractères. Pour référence future, les réponses de Code Golf devraient être "jouées" et leur "score" inclus. "Golf" signifie que vous devez faire tout votre possible pour réduire la longueur des caractères en utilisant des alias abrégés, des astuces de syntaxe et d'autres moyens d'étirer les règles du langage. Vous devez également supprimer les espaces inutiles dans la mesure du possible (il y a au moins trois espaces qui peuvent être supprimés de votre solution). Le "score", dans ce cas, est votre nombre de personnages - actuellement 173.
Iszi
Je suggère de lire le wiki des balises de golf de code, diverses parties du centre d'aide et le fil de conseils de golf pour PowerShell pour mieux comprendre comment écrire une réponse compétitive aux défis de golf de code ici.
Iszi
De plus, je reçois une erreur avec votre script. "... le nom du paramètre 'p' est ambigu ..." en ce qui concerne Read-Host.
Iszi
3

Rubis, 94 90 82 caractères

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

Mise à jour (merci pour les commentaires):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5
epson121
la source
1
Vous pouvez enregistrer quelques caractères si vous utilisez a**0.5au lieu de longs Math.sqrt(a). Et l'espace après ppeut également être supprimé.
Nik O'Lai
1
Et vous n'avez pas besoin de parenthèses %(Math...).
Nik O'Lai
2

MATLAB 79 74

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

Python 2.7 - 80 caractères

print'The hypotenuse of this right triangle is %.3f'%(input()**2+input()**2)**.5
Andrea Ciceri
la source
Je ne pense pas que cela fasse 3 décimales ...?
Joachim Isaksson
C'est ma faute, je l'ai corrigée, merci.
Andrea Ciceri
2

C ++ - 90

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

la source
pow(a,2)quand tu peux faire a*a? Je ne suis pas sûr non plus de comprendre le but du plancher et le +.5 et le multiplier et diviser par 1000
Cruncher
@Cruncher L'étage consiste à définir la décimale à 0,3 place. Je suis en train de le retravailler en ce moment et inclurai votre suggestion.
Il y a un hypot (a, b) qui vous fera économiser trois personnages.
@YiminRong Cool!
2

Perl 6 (68 74 octets)

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

{}déclare une fonction lambda. [+]est l'opérateur somme, X**est l'opérateur de puissance croisée (par exemple, 1, 2 X+ 10, 20donne 11, 21, 12, 22). Dans ce cas, l'opérateur de puissance croisée prend un argument, le résultat a donc la même longueur que @_. @_contient tous les arguments de fonction.

S'il est interdit d'avoir une fonction qui peut prendre un nombre incorrect d'arguments (dangereux), il est possible de le remplacer [+] @_ X**2par $^a**2+$^b**2, où $^aet $^bsont des arguments d'espace réservé.

Konrad Borowski
la source
2
Comment limiteriez-vous à 3 décimales?
Joachim Isaksson
@JoachimIsaksson: J'échoue à lire. Devrait être corrigé maintenant.
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))
élixénide
la source
.toFixed .. thank you! learned something new :)
micha
2

C, 100 chars (beats the other C solution by 1!)

A ridiculously inefficient algorithm.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}
user12205
la source
Sorry, but you've written "the" instead of "this", so if you correct that it's the same length ;P
daniero
@daniero Ok, found a fix, now still one char down :)
user12205
In the Borland C compiler it would not compile...
RosLuP
2

DELPHI / PASCAL

With indent (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.
bela
la source
1
ah man, i had the exact same :(
Teun Pronk
to late for an edit, so again.. Edit: You can get 2 characters off by changing integer to int16 You dont have to include the first 2 lines for your answer, and you can remove whitespace. doing all that gives you 106 characters.
Teun Pronk
2

EcmaScript 6, 82 79

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

Usage:

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

Update: Switch to Math.hypot()

Florent
la source
2

Golfscript (69 67 66 65)

This would be much easier if floating point was actually supported without resorting to workarounds... :)

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

A link to test it.

Joachim Isaksson
la source
why are you doing 2.!~ when 2-1 is shorter?
McKay
@McKay Good question, I always getthe difference between 2- 1` and 2-1 wrong, so was probably temporarily confused :) Fixed, thanks.
Joachim Isaksson
2

Python 2 (79)

def p(a,b):print'The hypotenuse of this right triangle is %.3d'%((a*a+b*b)**.5)
nyuszika7h
la source
Dispense with math for some savings. (a*a+b*b)**.5
Steven Rumbalski
Since the body of your function is a single statement, it can be on the same line as the def saving a newline and an indent.
Steven Rumbalski
1

AWK — 84 78 characters

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

Thanks to Wasi for suggesting ^ operator and removing ()!

e.g.

$ 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

la source
You can golf it further {printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi
1

PowerShell: 111

Golfed Code

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

Walkthrough

1..2|%{sv $_ (read-host)}; Gets two inputs interactively from the user, and stores them in $1 and $2. Might be able to cut some length by using arguments or pipeline inputs instead.

"The hypotenuse of this right triangle is Required text in the output, per the challenge specifications.

$(...)" Encapsulated code block will be processed as script before being included in the output.

"{0:N3}"-f Formats output from the next bit of code as a number with exactly three digits after the decimal point.

[math]::sqrt(...) Gets the square root of the encapsulated value.

$1/1*$1+$2/1*$2 Serves as our "a^2+b^2". Multiplying a number by itself is the shortest way to square it in PowerShell, but the variables need to be divided by 1 first to force them to integers. Otherwise, they are treated as text and 3*3+4*4 would be 3334444 instead of 25.

Iszi
la source
1

JavaScript: 83

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

Currently the shortest JS implementation using stdin :D
Works only on Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

If we can use just two variables (as lot of scripts do here):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)
Fez Vrasta
la source
whoooo .. .hypot. Good catch!
micha
1

dc, 55

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

Java, 112

(Also prints out a No Such Method error, though I'm not sure if this is against the rules)

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

(No error)

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){}}
James Webster
la source
1

C#

Method Only (114)

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

Complete Program (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);
   }
}

Complete Program (without using method - 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));}}
Merin Nakarmi
la source
1
Heres my complete program. 141 chars...you can save a few chars using the formatstring overload of write 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(aa+bb));}}
Tim Bailey
1
You can use string formatting in the Console.Write instead of calling ToString() to save 9 characters.
Rik
1

JavaScript 118 106 93

Unlike @micha's solution, mine takes in two variables via function and sends the alert of the result.

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)}

Fat arrow functions to the rescue!

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

WallyWest
la source
1
Could be shorter if you inline c(). Aliasing Math doesn't save bytes in your case.
Florent
@Florent Ah, yes... one sec!
WallyWest
1

c64 basic v2, 60 66 bytes

0inputa,b:?"The hypotenuse of this right triangle is";sQ(a*a+b*b)

Screenshot:

enter image description here

How to try it.

peterh - Reinstate Monica
la source
should say "The hypotenuse of this right triangle is"
Skidsdev
@Mayube Sad :-( +6 byte :-( Post fixed.
peterh - Reinstate Monica
1

R, 61 76 bytes

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

cat displays its content to STDOUT.

The scan() function takes user's input from keyboard. This input exists as a vector, on which the ^2 is applied (^function is vectorized), and the sum() sums the elements of the vector. sqrt outputs the square-root, which is rounded to 3 decimal places by round(,3)

Thanks to @caird coinheringaahing for noticing that the previous answer didn't round.

Frédéric
la source
Does this "Keep c to only three decimal places."?
caird coinheringaahing
@cairdcoinheringaahing : it does now ! Thanks !
Frédéric
1

ARBLE, 73 bytes

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

Try it online!

ATaco
la source
1
@H.PWiz I must say, for a challenge that should just be sqrt(a^2+b^2), this has a lot of unnecessary boilerplate.
ATaco
1

OML, 57 bytes

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

Try it online!

Part 1

This simply outputs the string

"The hypotenuse of this right triangle is "s

Part 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
Conor O'Brien
la source
1

Jelly, 32 characters

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

Try it online!

There is probably a better string compression that allows me to get around needing to join with spaces but I was having trouble finding it.

Explanation:

,²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.
Comrade SparklePony
la source
So long as only three decimal places means less than or equal to three decimal places, the output looks fine.
Engineer Toast