Il metodo più breve per implementare il teorema di Pitagora


14

Chi non ama il teorema di Pitagora a² + b² = c²? Scrivi il metodo più breve che puoi in qualsiasi lingua che comprenda il valore a e b e stampi "L'ipotenusa di questo triangolo rettangolo è" + c. Mantenere c solo con tre cifre decimali.


3
Questo si qualifica come un puzzle di programmazione?
DavidC,

1
@DavidCarraher Il problema in sé non è un puzzle di programmazione. Ma poiché l'obiettivo è quello di golf una soluzione per esso, allora è davvero un puzzle di programmazione.
Victor Stafusa,

3
il più corto in personaggi
Vik P

4
Il code-golftag dice esplicitamente "Code-golf è una competizione per risolvere un problema particolare con il minor numero di byte di codice sorgente". Vedi Punteggio golf (byte vs. caratteri) .
ris.

1
@res: risolto :-p
Timwi

Risposte:


15

APL (54)

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

Test:

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

Spiegazione:

  • ⎕*2: aumenta i valori nell'ingresso alla seconda potenza
  • +/: prendi la somma
  • .5*⍨: aumenta il risultato alla potenza 0.5
  • 3⍕: arrotondare al terzo decimale

Si tratta di imbattibile
Cruncher,

@ Cruncher: ho provato a codificare la stringa ma non sono riuscito a ottenere una routine di decodifica abbastanza piccola.
Marin

Secondo il principio del buco del piccione, penso che avresti avuto dei momenti davvero difficili (forse impossibile. Deve essere impossibile per almeno alcune stringhe) nel cercare di comprimere la corda. Forse se la stringa avesse uno schema logico, ma non sembra essere il caso. Sono interessato a vedere i tentativi fatti finora
Cruncher,

7
Correggere l'ortografia di "ipotenusa" per salvare un personaggio.
Tim S.

1
@ Cruncher: In realtà, l'ho battuto in Sclipting ...
Timwi

11

TI-BASIC, 76 55 53 52 byte

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

No, non è richiesta una parentesi chiusa. Inoltre, meno byte di quella risposta APL :)


1
Potrebbe essere R▶Pr(A,B.
lirtosiast,

3
2 anni per attuare un suggerimento, lol.
mbomb007,

Destinato alla grandezza, immagino. E ho appena rasato altri due byte per battere APL!
Timtech,

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

Usare Inputper chiedere Xed Yè abbastanza divertente. Se lo consentiamo, dovremmo anche consentire l'impostazione PolarGCprima Input, in modo che la lunghezza dell'ipotenusa sia data dal byte singolo R? Certo, con PolarGCi valori di Xe Ynon vengono più visualizzati quando spostiamo il cursore, ma vengono comunque memorizzati nelle variabili appropriate. (Che non useremmo mai, ma è il pensiero che conta.)
Misha Lavrov,

9

Python 2.7 - 76 personaggi

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

Spiegazione

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

==> a 2 + b 2 = c 2

PJ in ipotenusa

Insegnante: "Puoi dirmi, che cos'è l'ipotenusa?"

LJ: "Ipotena, una domanda facile. Se ieri sera c'è stata una festa di alto profilo e l'hai letta sul giornale, si chiama High Party News"


8

Sclipting , 46 caratteri

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

Si aspetta l'ingresso come due numeri (può essere frazionario!) Separati da uno spazio.

Questo è più breve di APL, nonostante debba usare alcuni trucchi scomodi.

Spiegazione

글坼 | 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 non rende questo come 92 byte?
Cruncher,

@Cruncher Ho chiesto ieri nei commenti alla domanda, ciò che conta è il conteggio dei caratteri, non il conteggio dei byte.
Joachim Isaksson,

3

dc 54

Tangenti il ​​punteggio della risposta APL!

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

Test:

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

non funziona davvero per me. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'non aspetta input, stampa "dc: stack empty"3 volte e quindi "L'ipotenusa di questo triangolo rettangolo è 2.000".
Tomas,

1
@Tomas è una specie di funzione; devi prima mettere i parametri nello stack, come mostrerò nel test, o se vuoi invocare la tua strada, sarebbe dc -e '3 4 2^r2^+3kv[...dove 3 e 4 sono i parametri.
daniero,

3

C, 77 o 99

77 caratteri se l'input può essere solo l'argomento della funzione:

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

99 se l'input deve essere letto dallo stdin:

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

Un grande grazie a @Yimin Rong!


1
C'è un ipotesi (a, b) che ti farà risparmiare tre personaggi.

Quella funzione non compila qualunque compilazione io uso gcc tcc clang in tio ... forse manca un'intestazione #include e nel titolo la versione precisa del compilatore
RosLuP

3

PowerShell

Solo per vedere se potessi ...

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
Bel lavoro. Sembra che tu l'abbia fatto mentre ero impegnato con la mia soluzione, che batte questo di circa 62 caratteri. Per riferimento futuro, le risposte di Code Golf dovrebbero essere "giocate a golf" e avere il loro "punteggio" incluso. "Giocare a golf" significa che dovresti fare ogni sforzo per ridurre la lunghezza del personaggio usando alias a mano corta, trucchi di sintassi e altri mezzi per allungare le regole della lingua. Dovresti anche rimuovere gli spazi bianchi non necessari ove possibile (ci sono almeno tre spazi che possono essere rimossi dalla tua soluzione). Il "punteggio", in questo caso, è il conteggio dei personaggi - attualmente 173.
Iszi

Suggerisco di leggere il wiki del codice golf tag, varie parti del Centro assistenza e il thread Suggerimenti golf per PowerShell per avere un'idea migliore di come scrivere una risposta competitiva alle sfide del codice golf qui.
Iszi,

Inoltre, viene visualizzato un errore con il tuo script. "... il nome del parametro 'p' è ambiguo ..." per quanto riguarda Read-Host.
Iszi,

3

Rubino, 94 90 82 caratteri

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

Aggiornamento (grazie per i commenti):

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

1
È possibile salvare alcuni caratteri se si utilizza a**0.5invece di lunghi Math.sqrt(a). E lo spazio dopo ppuò anche essere rimosso.
Nik O'Lai,

1
E non è necessaria la parentesi %(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 puoi fare a*a? Inoltre non sono sicuro di aver capito lo scopo del piano e il +.5 e il moltiplicare e dividere per 1000
Cruncher,

@Cruncher Il piano deve impostare la posizione decimale su 0,3 posizioni. Lo sto rielaborando proprio ora e includerò il tuo suggerimento.

C'è un ipotesi (a, b) che ti farà risparmiare tre personaggi.

@YiminRong Cool!

2

Perl 6 (68 74 byte)

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

{}dichiara una funzione lambda. [+]è un operatore somma, X**è un operatore cross power (ad esempio, 1, 2 X+ 10, 2011, 21, 12, 22). In questo caso, l'operatore cross power accetta un argomento, quindi il risultato ha la stessa lunghezza di @_. @_contiene tutti gli argomenti delle funzioni.

Se non è possibile avere una funzione che può contenere un numero errato di argomenti (non sicuri), è possibile sostituire [+] @_ X**2con $^a**2+$^b**2, dove $^ae $^bsono argomenti segnaposto.


2
Come limiteresti a 3 cifre decimali?
Joachim Isaksson,

@JoachimIsaksson: non riesco a leggere. Ora dovrebbe essere risolto.
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 .. grazie! imparato qualcosa di nuovo :)
Micha,

2

C, 100 caratteri (batte l'altra soluzione C di 1!)

Un algoritmo ridicolmente inefficiente.

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

Scusa, ma hai scritto "il" invece di "questo", quindi se correggi che è della stessa lunghezza; P
daniero

@daniero Ok, ho trovato una soluzione, ora ancora un carattere in meno :)
user12205

Nel compilatore Borland C non si compila ...
RosLuP

2

DELPHI / PASCAL

Con trattino (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 amico, ho avuto lo stesso identico :(
Teun Pronk,

fino a tardi per una modifica, quindi di nuovo. Modifica: è possibile ottenere 2 caratteri disattivati ​​cambiando integerin int16Non è necessario includere le prime 2 righe per la risposta e rimuovere gli spazi bianchi. facendo tutto ciò che ti dà 106 caratteri.
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"

Aggiornamento: passa aMath.hypot()


2

Golfscript ( 69 67 66 65)

Ciò sarebbe molto più semplice se il floating point fosse effettivamente supportato senza ricorrere a soluzioni alternative ... :)

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

Un link per testarlo .


perché lo fai 2.!~quando 2-1è più corto?
McKay,

@McKay Buona domanda, ricevo sempre the difference between 2- 1` e 2-1sbaglio, quindi probabilmente sono stato temporaneamente confuso :) Risolto, grazie.
Joachim Isaksson,

2

Python 2 (79)

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

Eliminare mathper alcuni risparmi. (a*a+b*b)**.5
Steven Rumbalski,

Poiché il corpo della tua funzione è una singola istruzione, può trovarsi sulla stessa riga del defsalvataggio di una nuova riga e di un rientro.
Steven Rumbalski,

1

AWK - 84 78 caratteri

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

Grazie a Wasi per aver suggerito ^ operatore e rimuovere ()!

per esempio

$ 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

Puoi giocare a golf ulteriormente{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi,

1

PowerShell: 111

Codice Golfed

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

Procedura dettagliata

1..2|%{sv $_ (read-host)};Ottiene due input in modo interattivo dall'utente e li memorizza in $ 1 e $ 2. Potrebbe essere in grado di tagliare un po 'di lunghezza usando invece argomenti o input di pipeline.

"The hypotenuse of this right triangle is Testo richiesto nell'output, secondo le specifiche della sfida.

$(... Il )"blocco di codice incapsulato verrà elaborato come script prima di essere incluso nell'output.

"{0:N3}"-f Formatta l'output dal prossimo bit di codice come un numero con esattamente tre cifre dopo il punto decimale.

[math]::sqrt(... )Ottiene la radice quadrata del valore incapsulato.

$1/1*$1+$2/1*$2Serve come "a ^ 2 + b ^ 2". Moltiplicare un numero da solo è il modo più breve per quadrarlo in PowerShell, ma le variabili devono prima essere divise per 1 per forzarle a numeri interi. Altrimenti, vengono trattati come testo e 3 * 3 + 4 * 4 sarebbe 3334444 anziché 25.


1

JavaScript: 83

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

Attualmente l'implementazione JS più breve con stdin: D
Funziona solo su Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

Se possiamo usare solo due variabili (come fanno molti script qui):

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

whoooo .. .hypot. Buona pesca!
Micha,

1

dc, 55

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

1

Java, 112

(Stampa anche un errore No Such Method, anche se non sono sicuro che sia contrario alle regole)

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

(Nessun errore)

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 #

Solo metodo (114)

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

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

Programma completo (senza utilizzare il metodo - 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
Ecco il mio programma completo. 141 caratteri ... puoi salvare alcuni caratteri usando il sovraccarico di formattazione della scrittura usando System; class P {static void Main () {double a = 3, b = 4; Console.Write ("L'ipotenusa di questo triangolo rettangolo è {0: N3} ", Math.Sqrt (a a + b b));}}
Tim Bailey

1
È possibile utilizzare la formattazione delle stringhe in Console.Write invece di chiamare ToString () per salvare 9 caratteri.
Rik

1

JavaScript 118 106 93

A differenza della soluzione di @ micha, la mia accetta due variabili tramite la funzione e invia un avviso del risultato.

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

La freccia grassa funziona in soccorso!

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


1
Potrebbe essere più breve se in linea c(). L'aliasing Mathnon salva i byte nel tuo caso.
Florent,

@Florent Ah, sì ... un secondo!
WallyWest,


1

R, 61 76 byte

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

cat visualizza il suo contenuto su STDOUT.

La scan()funzione prende l'input dell'utente dalla tastiera. Questo input esiste come vettore, sul quale ^2viene applicata (la ^funzione viene vettorializzata) e sum()somma gli elementi del vettore. sqrtgenera la radice quadrata, che viene arrotondata al terzo decimale diround(,3)

Grazie a @caird coinheringaahing per aver notato che la risposta precedente non ha arrotondato.


Questo "Mantiene c solo con tre cifre decimali."?
caird coinheringaahing il

@cairdcoinheringaahing: lo fa ora! Grazie !
Frédéric,

1

ARBLE , 73 byte

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

Provalo online!


1
@ H.PWiz Devo dire che, per una sfida che dovrebbe essere sqrt(a^2+b^2), questo ha un sacco di scaldavivande inutili.
ATaco,

1

OML , 57 byte

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

Provalo online!

Parte 1

Questo semplicemente genera la stringa

"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

Jelly , 32 personaggi

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

Provalo online!

Probabilmente esiste una migliore compressione delle stringhe che mi consente di aggirare la necessità di unirmi agli spazi, ma ho avuto problemi a trovarlo.

Spiegazione:

,²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.

So long as only three decimal places means less than or equal to three decimal places, the output looks fine.
Engineer Toast
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.