Método más corto para implementar el teorema de Pitágoras

14

¿Quién no ama el teorema de Pitágoras a² + b² = c²? Escriba el método más corto que pueda en cualquier lenguaje que tome el valor a y b e imprima "La hipotenusa de este triángulo rectángulo es" + c. Mantenga c con solo tres decimales.

Vik P
fuente
3
¿Esto califica como un rompecabezas de programación?
DavidC
1
@DavidCarraher El problema per se no es un rompecabezas de programación. Pero dado que el objetivo es desarrollar una solución para el golf, es un rompecabezas de programación.
Victor Stafusa
3
más corto en caracteres
Vik P
44
La code-golfetiqueta dice explícitamente "Code-golf es una competencia para resolver un problema particular en la menor cantidad de bytes de código fuente". Ver código de puntuación golf (bytes vs.caracteres) .
res
1
@res: Corregido :-p
Timwi

Respuestas:

15

APL (54)

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

Prueba:

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

Explicación:

  • ⎕*2: eleva los valores en la entrada a la segunda potencia
  • +/: toma la suma
  • .5*⍨: elevar el resultado a la potencia 0.5
  • 3⍕: redondeado a 3 decimales
marinus
fuente
Esto es casi inmejorable
Cruncher
@Cruncher: Traté de codificar la cadena pero no pude obtener la rutina de decodificación lo suficientemente pequeña.
marinus
Por el principio del agujero de paloma, creo que lo pasarías muy mal (tal vez imposible. Tiene que ser imposible para al menos algunas cuerdas) intentar comprimir la cuerda. Tal vez si la cadena tuviera algún patrón lógico, pero ese no parece ser el caso. Sin embargo
Cruncher
77
Corrija la ortografía de "hipotenusa" para guardar un personaje.
Tim S.
1
@Cruncher: En realidad, lo gané en 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

No, no se requiere paréntesis de cierre. Además, menos bytes que esa respuesta APL :)

Timtech
fuente
1
Podría ser R▶Pr(A,B.
lirtosiast
3
2 años para implementar una sugerencia, lol.
mbomb007
Destinado a la grandeza, supongo. ¡Y acabo de eliminar dos bytes más para vencer a APL!
Timtech
-1 byte:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya
Usar Inputpara pedir Xy Yes algo gracioso. Si permitimos eso, ¿deberíamos permitir también la configuración PolarGCanterior Input, de modo que la longitud de la hipotenusa esté dada por un byte R? Es cierto que PolarGClos valores de Xy Yya no se muestran cuando movemos el cursor, pero todavía se almacenan en las variables apropiadas. (Que entonces nunca usaríamos, pero es el pensamiento lo que cuenta.)
Misha Lavrov
9

Python 2.7 - 76 caracteres

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

Explicación

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

==> a 2 + b 2 = c 2

PJ en hipotenusa

Maestra: "¿Puedes decirme qué es la hipotenusa?"

LJ: "Hipotenusa, una pregunta fácil. Si hay una fiesta de alto perfil anoche y la lees en el periódico, se llama High Party News"

Abhijit
fuente
8

Sclipting , 46 caracteres

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

Espera la entrada como dos números (¡pueden ser fraccionarios!) Separados por un espacio.

Esto es más corto que APL, a pesar de tener que usar algunos trucos inconvenientes.

Explicación

글坼 | 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
fuente
2
¿Unicode no hace esto como 92 bytes?
Cruncher
@Cruncher pregunté ayer en los comentarios de las preguntas, lo que cuenta es el recuento de caracteres, no el recuento de bytes.
Joachim Isaksson
3

dc 54

Tangentes el puntaje de la respuesta APL!

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

Prueba:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000
daniero
fuente
realmente no funciona para mí dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'no espera ninguna entrada, imprime "dc: stack empty"3 veces y luego "La hipotenusa de este triángulo rectángulo es 2.000".
Tomás
1
@Tomas es una especie de función; primero debe poner los parámetros en la pila, como lo muestro en la prueba, o si desea invocar a su manera, sería dc -e '3 4 2^r2^+3kv[...donde 3 y 4 son los parámetros.
daniero
3

C, 77 o 99

77 caracteres si la entrada puede ser solo el argumento de la función:

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

99 si la entrada debe leerse desde stdin:

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

¡Muchas gracias a @Yimin Rong!

Josh
fuente
1
Hay un hipot (a, b) que le ahorrará tres caracteres.
Esa función no compila cualquier compilación que uso gcc tcc clang en tio ... tal vez carezca de un encabezado #include y en el título la versión precisa del compilador
RosLuP
3

Potencia Shell

Solo para ver si podía ...

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
fuente
1
Buen trabajo. Parece que hiciste esto mientras estaba ocupado con mi propia solución, que supera esto por unos 62 caracteres. Para referencia futura, se espera que las respuestas de Code Golf sean "golfizadas" e incluyan su "puntaje". "Jugar al golf" significa que debe hacer todo lo posible para reducir la longitud de los caracteres mediante el uso de alias de mano corta, trucos de sintaxis y otros medios para estirar las reglas del lenguaje. También debe eliminar los espacios en blanco innecesarios cuando sea posible (hay al menos tres espacios que pueden eliminarse de su solución). La "puntuación", en este caso, es el recuento de tu personaje - actualmente 173.
Iszi
Sugiero leer el wiki de la etiqueta de código de golf, varias porciones del Centro de ayuda y los consejos de Golf para el hilo de PowerShell para tener una mejor idea de cómo escribir una respuesta competitiva para los desafíos de código de golf aquí.
Iszi
Además, recibo un error con su script. "... el nombre del parámetro 'p' es ambiguo ..." con respecto a Read-Host.
Iszi
3

Rubí, 94 90 82 caracteres

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

Actualización (gracias por los comentarios):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5
epson121
fuente
1
Podría guardar algunos caracteres si los usa en a**0.5lugar de largos Math.sqrt(a). Y el espacio posterior ptambién se puede eliminar.
Nik O'Lai
1
Y no necesitas paréntesis %(Math...).
Nik O'Lai
2

MATLAB 79 74

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

Python 2.7 - 80 caracteres

print'The hypotenuse of this right triangle is %.3f'%(input()**2+input()**2)**.5
Andrea Ciceri
fuente
No creo que esto tenga 3 decimales ...?
Joachim Isaksson
Es mi culpa, lo he corregido, gracias.
Andrea Ciceri
2

C ++ - 90

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

fuente
pow(a,2)cuando puedes hacer a*a? Tampoco estoy seguro de entender el propósito del piso y el +.5 y la multiplicación y división por 1000
Cruncher
@Cruncher El piso es establecer el lugar decimal a .3 lugares. Lo estoy reelaborando en este momento e incluiré su sugerencia.
Hay un hipot (a, b) que le ahorrará tres caracteres.
@YiminRong Cool!
2

Perl 6 (68 74 bytes)

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

{}declara una función lambda. [+]es operador de suma,X** es operador de potencia cruzada (por ejemplo, 1, 2 X+ 10, 20da 11, 21, 12, 22). En este caso, el operador de potencia cruzada toma un argumento, por lo que el resultado tiene la misma longitud que @_. @_contiene todos los argumentos de la función.

Si no se permite tener una función que pueda tomar un número incorrecto de argumentos (inseguro), es posible reemplazarlo [+] @_ X**2con $^a**2+$^b**2, donde $^ay $^bson argumentos de marcador de posición.

Konrad Borowski
fuente
2
¿Cómo limitarías a 3 decimales?
Joachim Isaksson
@JoachimIsaksson: No puedo leer. Debería arreglarse ahora.
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))
elixenida
fuente
.toFixed .. gracias! aprendí algo nuevo :)
micha
2

C, 100 caracteres (¡supera la otra solución C por 1!)

Un algoritmo ridículamente ineficiente.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}
usuario12205
fuente
Lo sentimos, pero ha escrito "el" en lugar de "esto", así que si corrige que tiene la misma longitud, P
daniero
@daniero Ok, encontré una solución, ahora aún
queda
En el compilador Borland C no sería compilar ...
RosLuP
2

DELPHI / PASCAL

Con sangría (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
fuente
1
ah hombre, tuve exactamente lo mismo :(
Teun Pronk
demasiado tarde para una edición, así que de nuevo ... Editar: puede quitar 2 caracteres cambiando integera int16No tiene que incluir las primeras 2 líneas para su respuesta, y puede eliminar espacios en blanco. haciendo todo lo que te da 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"

Actualización: cambiar aMath.hypot()

Florent
fuente
2

Golfscript ( 69 67 66 65)

Esto sería mucho más fácil si el punto flotante fuera realmente compatible sin recurrir a soluciones ... :)

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

Un enlace para probarlo .

Joachim Isaksson
fuente
¿Por qué haces 2.!~cuando 2-1es más corto?
McKay
@McKay Buena pregunta, siempre obtengo the difference between 2-1` y me 2-1equivoco, por lo que probablemente me confundí temporalmente :) Solucionado, gracias.
Joachim Isaksson
2

Pitón 2 (79)

def p(a,b):print'The hypotenuse of this right triangle is %.3d'%((a*a+b*b)**.5)
nyuszika7h
fuente
Prescindir mathde algunos ahorros. (a*a+b*b)**.5
Steven Rumbalski
Dado que el cuerpo de su función es una sola declaración, puede estar en la misma línea que defguardar una nueva línea y una sangría.
Steven Rumbalski
1

AWK - 84 78 caracteres

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

¡Gracias a Wasi por sugerir ^ operador y eliminar ()!

p.ej

$ 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

fuente
Puedes jugar más golf{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi
1

PowerShell: 111

Código de golf

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

Tutorial

1..2|%{sv $_ (read-host)};Obtiene dos entradas interactivas del usuario y las almacena en $ 1 y $ 2. Es posible que pueda cortar algo de longitud utilizando argumentos o entradas de canalización.

"The hypotenuse of this right triangle is Texto requerido en la salida, según las especificaciones del desafío.

$(...)" El bloque de código encapsulado se procesará como secuencia de comandos antes de incluirse en la salida.

"{0:N3}"-f Los formatos salen del siguiente bit de código como un número con exactamente tres dígitos después del punto decimal.

[math]::sqrt(... )Obtiene la raíz cuadrada del valor encapsulado.

$1/1*$1+$2/1*$2Sirve como nuestro "a ^ 2 + b ^ 2". Multiplicar un número por sí mismo es la forma más corta de cuadrarlo en PowerShell, pero las variables deben dividirse por 1 primero para forzarlas a números enteros. De lo contrario, se tratan como texto y 3 * 3 + 4 * 4 sería 3334444 en lugar de 25.

Iszi
fuente
1

JavaScript: 83

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

Actualmente, la implementación JS más corta que utiliza stdin: D
funciona solo en Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

Si podemos usar solo dos variables (como hacen muchos scripts aquí):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)
Fez Vrasta
fuente
whoooo .. .hypot. ¡Buena atrapada!
micha
1

dc, 55

3k?d*?d*+v[The hypotenuse of this right triangle is ]Pp
Tomás
fuente
1

Java, 112

(También imprime un error de No tal método, aunque no estoy seguro de si esto va en contra de las reglas)

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 hay 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
fuente
1

C#

Solo 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 (sin usar el 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));}}
Merin Nakarmi
fuente
1
Aquí está mi programa completo. 141 caracteres ... puede guardar algunos caracteres utilizando la sobrecarga de la cadena de formato de escritura utilizando Sistema; clase P {vacío estático Principal () {doble a = 3, b = 4; Console.Write ("La hipotenusa de este triángulo rectángulo es {0: N3} ", Math.Sqrt (a a + b b));}}
Tim Bailey
1
Puede usar el formato de cadena en la consola. Escriba en lugar de llamar a ToString () para guardar 9 caracteres.
Rik
1

JavaScript 118 106 93

A diferencia de la solución de @ micha, la mía toma dos variables a través de la función y envía la alerta del 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)}

¡Flecha gorda funciona al rescate!

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

WallyWest
fuente
1
Podría ser más corto si está en línea c(). El alias Mathno guarda bytes en su caso.
Florent
@ Florent Ah, sí ... un segundo!
WallyWest
1

c64 básico v2, 60 66 bytes

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

Captura de pantalla:

ingrese la descripción de la imagen aquí

Cómo probarlo

peterh - Restablece a Monica
fuente
debe decir: "La hipotenusa de este derecho triángulo es"
Skidsdev
@Mayube Sad :-( +6 byte :-(
Publicación
1

R, 61 76 bytes

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

cat muestra su contenido a STDOUT.

La scan()función toma la entrada del usuario desde el teclado. Esta entrada existe como un vector, sobre el cual ^2se aplica (la ^función está vectorizada), y sum()suma los elementos del vector. sqrtgenera la raíz cuadrada, que se redondea a 3 decimales porround(,3)

Gracias a @caird coinheringaahing por notar que la respuesta anterior no fue completa.

Frédéric
fuente
¿Esto "mantiene c a solo tres lugares decimales"?
caird coinheringaahing
@cairdcoinheringaahing: ¡lo hace ahora! Gracias !
Frédéric
1

ARBLE , 73 bytes

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

Pruébalo en línea!

Un taco
fuente
1
@ H.PWiz Debo decir que, para un desafío que debería ser sqrt(a^2+b^2), esto tiene muchas repeticiones innecesarias.
ATaco
1

OML , 57 bytes

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

Pruébalo en línea!

Parte 1

Esto simplemente genera la cadena

"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
Conor O'Brien
fuente
1

Gelatina , 32 caracteres

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

Pruébalo en línea!

Probablemente haya una mejor compresión de cadenas que me permita desplazarme y unirme con espacios, pero tuve problemas para encontrarla.

Explicación:

,²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.
Camarada SparklePony
fuente
Siempre que los only three decimal placesmedios less than or equal to three decimal places, la salida se ve bien.
Ingeniero Brindis