Kürzeste Methode zur Implementierung des Satzes von Pythagoras

14

Wer liebt nicht den pythagoreischen Satz a² + b² = c²? Schreiben Sie die kürzeste Methode, die Sie in einer Sprache verwenden können, die die Werte a und b berücksichtigt und "Die Hypotenuse dieses rechtwinkligen Dreiecks ist" + c ausgibt. Behalten Sie c nur drei Dezimalstellen bei.

Vik P
quelle
3
Ist dies ein Programmierpuzzle?
DavidC
1
@DavidCarraher Das Problem an sich ist kein Programmierpuzzle. Aber da das Ziel darin besteht, eine Lösung dafür zu finden, handelt es sich in der Tat um ein Programmierpuzzle.
Victor Stafusa
3
kürzeste Zeichen
Vik P
4
Der code-golfTag sagt ausdrücklich: "Code-Golf ist ein Wettbewerb, um ein bestimmtes Problem in den wenigsten Bytes des Quellcodes zu lösen ." Siehe Scoring Code Golf (Bytes vs. Zeichen) .
Res
1
@res: Fixed :-p
Timwi

Antworten:

15

APL (54)

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

Prüfung:

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

Erläuterung:

  • ⎕*2: Erhöhen Sie die Werte im Eingang auf die zweite Potenz
  • +/: nimm die Summe
  • .5*⍨: Erhöhen Sie das Ergebnis auf die 0,5-ste Potenz
  • 3⍕: auf 3 Dezimalstellen runden
Marinus
quelle
Dies ist etwa unschlagbar
Cruncher
@Cruncher: Ich habe versucht, die Zeichenfolge zu kodieren, konnte aber die Dekodierungsroutine nicht klein genug machen.
Marinus
Nach dem Pigeon-Hole-Prinzip würde es Ihnen sehr schwer fallen (vielleicht unmöglich. Zumindest für einige Saiten muss es unmöglich sein), die Saite zu komprimieren. Vielleicht, wenn der String ein logisches Muster hätte, aber das scheint nicht der Fall zu sein. Ich bin interessiert, die Versuche zu sehen, die Sie bisher hatten
Cruncher
7
Korrigieren Sie die Schreibweise von "Hypotenuse", um ein Zeichen zu speichern.
Tim S.
1
@ Cruncher: Eigentlich habe ich es in Sclipting geschlagen ...
Timwi
11

TI-BASIC, 76 55 53 52 Bytes

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

Nein, schließende Klammern sind nicht erforderlich. Auch weniger Bytes als diese APL-Antwort :)

Timtech
quelle
1
Könnte sein R▶Pr(A,B.
Lirtosiast
3
2 Jahre, um einen Vorschlag umzusetzen, lol.
mbomb007
Für Größe bestimmt, denke ich. Und ich habe gerade zwei weitere Bytes abgeschabt, um APL zu schlagen!
Timtech
-1 Byte:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya
Mit Inputfragen Xund Yist eine Art urkomisch. Wenn wir das zulassen, sollten wir dann auch PolarGCvorher zulassen Input, dass die Länge der Hypotenuse durch das Ein-Byte gegeben ist R? Zwar werden PolarGCdie Werte von Xund Ynicht mehr angezeigt, wenn wir den Cursor bewegen, sie werden jedoch weiterhin in den entsprechenden Variablen gespeichert . (Was wir dann nie verwenden würden, aber es ist der Gedanke, der zählt.)
Misha Lawrow
9

Python 2.7 - 76 Zeichen

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

Erläuterung

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

==> a 2 + b 2 = c 2

PJ auf Hypotenuse

Lehrer: "Können Sie mir sagen, was Hypotenuse ist?"

LJ: Hypotenuse, eine einfache Frage. Wenn es gestern Abend eine hochkarätige Party gibt und Sie sie in der Zeitung lesen, heißt sie High Party News.

Abhijit
quelle
8

Sclipting , 46 Zeichen

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

Erwartet die Eingabe als zwei durch ein Leerzeichen getrennte Zahlen (können Brüche sein!).

Dies ist kürzer als APL, obwohl Sie einige unbequeme Tricks anwenden müssen.

Erläuterung

글坼 | 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
quelle
2
macht Unicode das nicht zu 92 Bytes?
Cruncher
@Cruncher Ich habe gestern in den Fragenkommentaren gefragt, was zählt, ist die Anzahl der Zeichen, nicht die Anzahl der Bytes.
Joachim Isaksson
3

dc 54

Tangenten die Punktzahl der APL-Antwort!

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

Prüfung:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000
daniero
quelle
funktioniert nicht wirklich für mich. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'wartet nicht auf Eingaben, druckt "dc: stack empty"dreimal und dann "Die Hypotenuse dieses rechtwinkligen Dreiecks ist 2.000".
Tomas
1
@Tomas es ist sozusagen eine Funktion; Sie müssen die Parameter zuerst auf den Stapel legen, wie ich im Test gezeigt habe, oder wenn Sie Ihren Weg aufrufen möchten, sind dc -e '3 4 2^r2^+3kv[...dort 3 und 4 die Parameter.
Daniero
3

C 77 oder 99

77 Zeichen, wenn die Eingabe nur die Funktionsargumente sein kann:

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

99 wenn die Eingabe von stdin gelesen werden muss:

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

Ein großes Dankeschön an @Yimin Rong!

Josh
quelle
1
Es gibt einen Hypot (a, b), mit dem Sie drei Zeichen speichern können.
Diese Funktion kompiliert nicht, was auch immer ich kompiliere, ich benutze gcc tcc clang in tio ... vielleicht fehlt ein # include-Header und im Titel die genaue Version des Compilers
RosLuP
3

Power Shell

Nur um zu sehen, ob ich könnte ...

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
quelle
1
Gute Arbeit. Sieht so aus, als hätten Sie dies getan, als ich mit meiner eigenen Lösung beschäftigt war, die dies um etwa 62 Zeichen übertrifft. Zum späteren Nachschlagen wird erwartet, dass die Antworten von Code Golf "Golf" sind und ihre "Punktzahl" enthalten. "Golfen" bedeutet, dass Sie alle Anstrengungen unternehmen sollten, um die Zeichenlänge zu verringern, indem Sie Aliase, Syntaxtricks und andere Mittel verwenden, um die Regeln der Sprache zu erweitern. Sie sollten auch unnötige Leerzeichen entfernen, sofern dies möglich ist (es können mindestens drei Leerzeichen aus Ihrer Lösung entfernt werden). Die "Punktzahl" in diesem Fall ist Ihre Zeichenanzahl - derzeit 173.
Iszi
Ich empfehle, das Code-Golf-Tag-Wiki, verschiedene Teile des Hilfezentrums und den PowerShell-Thread „Golftipps“ zu lesen, um ein besseres Gefühl dafür zu bekommen, wie Sie hier eine wettbewerbsfähige Antwort auf Code-Golf-Herausforderungen schreiben können.
Iszi
Außerdem erhalte ich eine Fehlermeldung mit Ihrem Skript. "... der Parametername 'p' ist nicht eindeutig ..." in Bezug auf Read-Host.
Iszi
3

Rubin, 94 90 82 Zeichen

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

Update (danke für die Kommentare):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5
epson121
quelle
1
Sie könnten ein paar Zeichen sparen, wenn Sie a**0.5statt langwierig verwenden Math.sqrt(a). Und der Raum danach pkann auch entfernt werden.
Nik O'Lai
1
Und Sie brauchen keine Klammern in %(Math...).
Nik O'Lai
2

MATLAB 79 74

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

Python 2.7 - 80 Zeichen

print'The hypotenuse of this right triangle is %.3f'%(input()**2+input()**2)**.5
Andrea Ciceri
quelle
Ich glaube nicht, dass dies 3 Dezimalstellen bedeutet ...?
Joachim Isaksson
Es ist meine Schuld, ich habe korrigiert, danke.
Andrea Ciceri
2

C ++ - 90

void h(int a,int b){printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}
Hosch250
quelle
pow(a,2)wenn Sie tun können a*a? Ich bin mir auch nicht sicher, ob ich den Zweck des Floors und des +.5 sowie das Multiplizieren und Dividieren durch 1000 verstehe
Cruncher
@Cruncher Der Boden ist die Dezimalstelle auf 0,3 Stellen zu setzen. Ich überarbeite es gerade und werde Ihren Vorschlag aufnehmen.
Hosch250
Es gibt einen Hypot (a, b), mit dem Sie drei Zeichen speichern können.
@YiminRong Cool!
Hosch250
2

Perl 6 (68 74 Bytes)

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

{}deklariert eine Lambda-Funktion. [+]sum Operator ist, X**ist Kreuzleistungs Operator (beispielsweise 1, 2 X+ 10, 20gibt 11, 21, 12, 22). In diesem Fall verwendet der Cross-Power-Operator ein Argument, sodass das Ergebnis dieselbe Länge wie hat @_. @_enthält alle Funktionsargumente.

Wenn es nicht erlaubt ist Funktion zu haben , die falsche Anzahl von Argumenten (unsicher) nehmen kann, ist es möglich , zu ersetzen , [+] @_ X**2mit $^a**2+$^b**2, wo $^aund $^bsind Platzhalter Argumente.

Konrad Borowski
quelle
2
Wie würden Sie auf 3 Dezimalstellen begrenzen?
Joachim Isaksson
@JoachimIsaksson: Ich kann nicht lesen. Sollte jetzt behoben sein.
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))
Elixenid
quelle
.toFixed .. danke! etwas neues gelernt :)
micha
2

C, 100 Zeichen (schlägt die andere C-Lösung um 1!)

Ein lächerlich ineffizienter Algorithmus.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}
user12205
quelle
Entschuldigung, aber Sie haben "the" anstelle von "this" geschrieben. Wenn Sie also korrigieren, dass es die gleiche Länge hat, ist P
Daniero
@daniero Ok, habe einen Fix gefunden, jetzt noch einen Char down :)
user12205
Im Borland C-Compiler würde es nicht kompilieren ...
RosLuP
2

DELPHI / PASCAL

Mit Einzug (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
quelle
1
ah man, ich hatte genau das gleiche :(
Teun Pronk
für eine Bearbeitung auf spät, also wieder .. Edit: Sie können 2 Zeichen bekommen , indem integerauf int16Sie müssen nicht die ersten 2 Linien für die Antwort enthalten, und Sie Leerzeichen entfernen können. Wenn Sie das alles tun, haben Sie 106 Zeichen.
Teun Pronk
2

EcmaScript 6, 82 79

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

Verwendung:

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

Update: Wechseln Sie zuMath.hypot()

Florent
quelle
2

Golfscript ( 69 67 66 65)

Dies wäre viel einfacher, wenn Floating Point tatsächlich unterstützt würde, ohne auf Problemumgehungen zurückzugreifen ... :)

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

Ein Link zum Testen .

Joachim Isaksson
quelle
warum machst du 2.!~wann 2-1ist kürzer
McKay
@McKay Gute Frage, ich bekomme immer the difference between 2- 1` und 2-1falsch, war also wohl vorübergehend verwirrt :) Behoben, danke.
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
quelle
Verzichten Sie mathauf einige Einsparungen. (a*a+b*b)**.5
Steven Rumbalski
Da der Hauptteil Ihrer Funktion eine einzelne Anweisung ist, kann er sich in derselben Zeile befinden wie das defSpeichern einer neuen Zeile und eines Einzugs.
Steven Rumbalski
1

AWK - 84 78 Zeichen

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

Vielen Dank an Wasi, der den Operator ^ vorgeschlagen und () entfernt hat!

z.B

$ 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

quelle
Sie können weiter Golf spielen{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi
1

PowerShell: 111

Golf Code

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

Komplettlösung

1..2|%{sv $_ (read-host)};Ruft zwei Eingaben interaktiv vom Benutzer ab und speichert sie in $ 1 und $ 2. Könnte in der Lage sein, durch die Verwendung von Argumenten oder Pipeline-Eingaben einiges an Länge zu sparen.

"The hypotenuse of this right triangle is Erforderlicher Text in der Ausgabe gemäß den Herausforderungsspezifikationen.

$(... )"Eingekapselter Codeblock wird als Skript verarbeitet, bevor er in die Ausgabe einbezogen wird.

"{0:N3}"-f Formatiert die Ausgabe des nächsten Codebits als Zahl mit genau drei Nachkommastellen.

[math]::sqrt(... )Ermittelt die Quadratwurzel des eingekapselten Wertes.

$1/1*$1+$2/1*$2Dient als unser "a ^ 2 + b ^ 2". Das Multiplizieren einer Zahl mit sich selbst ist der kürzeste Weg, um sie in PowerShell zu quadrieren. Die Variablen müssen jedoch zuerst durch 1 geteilt werden, um sie zu Ganzzahlen zu zwingen. Andernfalls werden sie als Text behandelt und 3 * 3 + 4 * 4 wäre 3334444 anstelle von 25.

Iszi
quelle
1

JavaScript: 83

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

Derzeit kürzeste JS-Implementierung mit stdin: D
Funktioniert nur unter Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

Wenn wir nur zwei Variablen verwenden können (wie es viele Skripte hier tun):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)
Fez Vrasta
quelle
whoooo .. .hypot. Guter Fang!
Micha
1

dc, 55

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

Java, 112

(Gibt auch den Fehler "Keine solche Methode" aus, obwohl ich nicht sicher bin, ob dies gegen die Regeln verstößt.)

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

(Kein Fehler)

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
quelle
1

C #

Nur Methode (114)

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

Gesamtes Programm (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);
   }
}

Vollständiges Programm (ohne Methode - 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
quelle
1
Hier ist mein komplettes Programm. 141 Zeichen ... Sie können einige Zeichen mit der Formatstring-Überladung von write mit System; class P {static void Main () {double a = 3, b = 4; Console.Write ("Die Hypotenuse dieses rechtwinkligen Dreiecks ist {0: N3} ", Math.Sqrt (a a + b b));}}
Tim Bailey
1
Sie können die Zeichenfolgenformatierung in Console.Write verwenden, anstatt ToString () aufzurufen, um 9 Zeichen zu speichern.
Rik
1

JavaScript 118 106 93

Im Gegensatz zu @ michas Lösung nimmt mine zwei Variablen per Funktion auf und sendet den Alert des Ergebnisses.

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

Fettpfeil dient zur Rettung!

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

WallyWest
quelle
1
Könnte kürzer sein, wenn du inline bist c(). Durch Aliasing werden Mathin Ihrem Fall keine Bytes gespeichert .
Florent
@Florent Ah, ja ... eine Sekunde!
WallyWest
1

c64 basic v2, 60 66 bytes

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

Bildschirmfoto:

Bildbeschreibung hier eingeben

Wie man es probiert.

Peterh: Setzen Sie Monica wieder ein
quelle
sollte sagen "Die Hypotenuse dieses rechtwinkligen Dreiecks ist"
Skidsdev
@ Mayube Sad :-( +6 Byte :-( Beitrag behoben.
Peter - Wiedereinsetzung Monica
1

R 61 76 Bytes

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

cat zeigt seinen Inhalt STDOUT an.

Die scan()Funktion nimmt Benutzereingaben von der Tastatur entgegen. Diese Eingabe existiert als ein Vektor, auf den ^2angewendet wird ( ^Funktion wird vektorisiert) und der sum()die Elemente des Vektors summiert. sqrtgibt die Quadratwurzel aus, die durch auf 3 Dezimalstellen gerundet wirdround(,3)

Vielen Dank an @caird coinheringaahing für das Bemerken, dass die vorherige Antwort nicht rund war.

Frédéric
quelle
Enthält dieses "c nur drei Dezimalstellen"?
Caird Coinheringaahing
@cairdcoinheringaahing: das tut es jetzt! Vielen Dank !
Frédéric
1

ARBLE , 73 Bytes

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

Probieren Sie es online!

Ein Taco
quelle
1
@ H.PWiz Ich muss sagen, für eine Herausforderung sollte das gerade sein sqrt(a^2+b^2) , hat dies eine Menge unnötiger Boilerplate.
ATaco
1

OML , 57 Bytes

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

Probieren Sie es online!

Teil 1

Dies gibt einfach den String aus

"The hypotenuse of this right triangle is "s

Teil 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
quelle
1

Gelee , 32 Zeichen

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

Probieren Sie es online!

Es gibt wahrscheinlich eine bessere Komprimierung für Zeichenfolgen, die es mir ermöglicht, herumzukommen und mich mit Leerzeichen zu verbinden, aber ich hatte Probleme, sie zu finden.

Erläuterung:

,²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.
Genosse SparklePony
quelle
Solange das only three decimal placesheißt less than or equal to three decimal places, sieht die Ausgabe gut aus.
Ingenieur Toast