Kto nie lubi twierdzenia Pitagorasa a² + b² = c²? Napisz najkrótszą możliwą metodę w dowolnym języku, który przyjmuje wartość aib i wypisuje „Przeciwprostokąt tego prawego trójkąta to” + c. Zachowaj c do tylko trzech miejsc po przecinku.
14
code-golf
Tag wyraźnie mówi „Code-golf jest konkurencja w celu rozwiązania konkretnego problemu w jak najmniejszej liczbie bajtów kodu źródłowego.” Zobacz punktacja golfa (bajty vs. znaki) .Odpowiedzi:
APL (54)
Test:
Wyjaśnienie:
⎕*2
: podnieś wartości na wejściu do drugiej mocy+/
: weź sumę.5*⍨
: podnieś wynik do 0,5 potęgi3⍕
: zaokrąglić do 3 miejsc po przecinkuźródło
TI-BASIC,
76555352 bajtyNie, nawiasy zamykające nie są wymagane. Ponadto mniej bajtów niż ta odpowiedź APL :)
źródło
R▶Pr(A,B
.Fix 3:R►Pr(X,Y
Input
prosićX
iY
jest trochę zabawne. Jeśli pozwolimy na to, czy powinniśmy również zezwolić na ustawieniePolarGC
wcześniejInput
, aby długość przeciwprostokątnej była podana w jednym bajcieR
? Trzeba przyznać, że zPolarGC
wartościamiX
iY
nie są już wyświetlane, gdy przesuwamy kursor, ale nadal są przechowywane w odpowiednich zmiennych. (Z czego nigdy byśmy nie skorzystali, ale liczy się myśl).Python 2.7 - 76 znaków
Wyjaśnienie
| a + ib | = √ (a 2 + b 2 ) = c
==> a 2 + b 2 = c 2
PJ na przeciwprostokątnej
źródło
Sclipting , 46 znaków
Oczekuje danych wejściowych w postaci dwóch liczb (może być ułamkowych!) Oddzielonych spacją.
Jest to krótszy niż APL, pomimo konieczności użycia kilku niewygodnych sztuczek.
Wyjaśnienie
źródło
dc 54
Styczne do wyniku odpowiedzi APL!
Test:
źródło
dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'
nie czeka na żadne dane, drukuje"dc: stack empty"
3 razy, a następnie „Przeciwprostokąt tego prawego trójkąta wynosi 2.000”.dc -e '3 4 2^r2^+3kv[...
gdzie 3 i 4 są parametrami.C, 77 lub 99
77 znaków, jeśli dane wejściowe mogą być tylko argumentami funkcji:
99, jeśli dane wejściowe należy odczytać ze standardowego wejścia:
Ogromne podziękowania dla @Yimin Rong!
źródło
Powershell
Just to see if i could...
źródło
Read-Host
.Rubin,
949082 znakiAktualizacja (dzięki za komentarze):
źródło
a**0.5
instead of lengthyMath.sqrt(a)
. And the space afterp
can also be removed.%(Math...)
.MATLAB
7974źródło
Python 2.7 - 80 chars
źródło
C++ - 90
źródło
pow(a,2)
when you can doa*a
? I'm also not sure I understand the purpose of the floor and the +.5 and the multiply and divide by 1000Perl 6 (
6874 bytes){}
declares a lambda function.[+]
is sum operator,X**
is cross power operator (for example,1, 2 X+ 10, 20
gives11, 21, 12, 22
). In this case, cross power operator takes one argument, so the result has the same length as@_
.@_
contains all function arguments.If it's disallowed to have function that may take wrong number of arguments (unsafe), it's possible to replace
[+] @_ X**2
with$^a**2+$^b**2
, where$^a
and$^b
are placeholder arguments.źródło
Javascript (97)
źródło
C, 100 chars (beats the other C solution by 1!)
A ridiculously inefficient algorithm.
źródło
DELPHI / PASCAL
With indent (157)
źródło
integer
toint16
You dont have to include the first 2 lines for your answer, and you can remove whitespace. doing all that gives you 106 characters.EcmaScript 6,
8279Usage:
Update: Switch to
Math.hypot()
źródło
Golfscript (
69 67 6665)This would be much easier if floating point was actually supported without resorting to workarounds... :)
A link to test it.
źródło
2.!~
when2-1
is shorter?the difference between
2- 1` and2-1
wrong, so was probably temporarily confused :) Fixed, thanks.Python 2 (79)
źródło
math
for some savings.(a*a+b*b)**.5
def
saving a newline and an indent.AWK —
8478 charactersThanks to Wasi for suggesting ^ operator and removing ()!
e.g.
źródło
{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
PowerShell: 111
Golfed Code
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.źródło
JavaScript: 83
Currently the shortest JS implementation using
stdin
:DWorks only on Firefox 27.0+ (EcmaScript 6)
JavaScript: 78
If we can use just two variables (as lot of scripts do here):
źródło
dc, 55
źródło
Java, 112
(Also prints out a No Such Method error, though I'm not sure if this is against the rules)
Java, 149
(No error)
źródło
C#
Method Only (114)
Complete Program (171)
Complete Program (without using method - 141)
źródło
JavaScript
11810693Unlike @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
źródło
c()
. AliasingMath
doesn't save bytes in your case.c64 basic v2,
6066 bytesScreenshot:
How to try it.
źródło
R,
6176 bytescat
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 thesum()
sums the elements of the vector.sqrt
outputs the square-root, which is rounded to 3 decimal places byround(,3)
Thanks to @caird coinheringaahing for noticing that the previous answer didn't round.
źródło
ARBLE, 73 bytes
Try it online!
źródło
sqrt(a^2+b^2)
, this has a lot of unnecessary boilerplate.OML, 57 bytes
Try it online!
Part 1
This simply outputs the string
Part 2
źródło
Jelly, 32 characters
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:
źródło
only three decimal places
meansless than or equal to three decimal places
, the output looks fine.