Metode terpendek untuk mengimplementasikan Teorema Pythagoras

14

Siapa yang tidak menyukai teorema pythagoras a² + b² = c²? Tulis metode terpendek yang Anda bisa dalam bahasa apa pun yang mengambil nilai a dan b dan cetak "The miring dari segitiga siku-siku ini adalah" + c. Simpan c hingga hanya tiga tempat desimal.

Vik P
sumber
3
Apakah ini memenuhi syarat sebagai teka-teki pemrograman?
DavidC
1
@ Davidvider Masalahnya adalah tidak ada teka-teki pemrograman. Tetapi karena tujuannya adalah untuk golf solusi untuk itu, maka itu memang teka-teki pemrograman.
Victor Stafusa
3
karakter terpendek
Vik P
4
The code-golftag secara eksplisit mengatakan "Kode-golf adalah kompetisi untuk memecahkan suatu masalah tertentu dalam paling sedikit byte dari source code." Lihat Golf kode skor (byte vs karakter) .
res
1
@res: Diperbaiki :-p
Timwi

Jawaban:

15

APL (54)

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

Uji:

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

Penjelasan:

  • ⎕*2: naikkan nilai dalam input ke kekuatan kedua
  • +/: ambil jumlahnya
  • .5*⍨: naikkan hasilnya ke kekuatan ke-0,5
  • 3⍕: bulat ke 3 tempat desimal
marinus
sumber
Ini tentang yang tidak ada
duanya
@Cruncher: Saya mencoba untuk menyandikan string tetapi tidak bisa mendapatkan rutin decoding yang cukup kecil.
marinus
Dengan prinsip lubang merpati, saya pikir Anda akan memiliki waktu yang sangat sulit (mungkin tidak mungkin. Itu harus mustahil untuk setidaknya beberapa string) mencoba mengompresi string. Mungkin jika string memiliki beberapa pola logis, tetapi sepertinya tidak demikian. Saya tertarik untuk melihat upaya yang telah Anda lakukan sejauh ini
Cruncher
7
Perbaiki ejaan "sisi miring" untuk menyimpan karakter.
Tim S.
1
@Cruncher: Sebenarnya, saya mengalahkannya di 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

Tidak, tanda kurung tutup tidak diperlukan. Juga, lebih sedikit byte dari jawaban APL itu :)

Timtech
sumber
1
Bisa jadi R▶Pr(A,B.
lirtosiast
3
2 tahun untuk mengimplementasikan saran, lol.
mbomb007
Ditakdirkan untuk kebesaran, kurasa. Dan saya baru saja memotong dua byte lagi untuk mengalahkan APL!
Timtech
-1 byte:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya
Menggunakan Inputuntuk meminta Xdan Yagak lucu. Jika kita mengizinkan itu, haruskah kita juga mengizinkan pengaturan PolarGCsebelumnya Input, sehingga panjang sisi miring diberikan oleh satu-byte R? Memang, dengan PolarGCnilai-nilai Xdan Ytidak lagi ditampilkan ketika kita memindahkan kursor, tetapi mereka masih disimpan ke variabel yang sesuai. (Yang kemudian tidak akan pernah kita gunakan, tetapi pemikiran itulah yang penting.)
Misha Lavrov
9

Python 2.7 - 76 Karakter

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

Penjelasan

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

==> a 2 + b 2 = c 2

PJ pada sisi miring

Guru: "Bisakah Anda memberi tahu saya, apa itu miring?"

LJ: "Hypotenuse, pertanyaan mudah. ​​Jika ada pesta profil tinggi tadi malam, dan Anda membacanya di surat kabar, itu disebut High Party News"

Abhijit
sumber
8

Sclipting , 46 karakter

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

Mengharapkan input sebagai dua angka (bisa pecahan!) Dipisahkan oleh spasi.

Ini lebih pendek dari APL, meskipun harus menggunakan beberapa trik yang tidak nyaman.

Penjelasan

글坼 | 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
sumber
2
tidakkah unicode membuat ini seperti 92 byte?
Cruncher
@Cruncher Saya bertanya kemarin di komentar pertanyaan, yang penting adalah jumlah karakter, bukan jumlah byte.
Joachim Isaksson
3

dc 54

Tangen skor jawaban APL!

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

Uji:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000
daniero
sumber
tidak benar-benar bekerja untuk saya. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'tidak menunggu input apa pun, mencetak "dc: stack empty"3 kali dan kemudian "Sisi miring dari segitiga siku-siku ini adalah 2.000".
Tomas
1
@ Thomas ini semacam fungsi; Anda harus meletakkan parameter pada tumpukan terlebih dahulu, seperti yang saya perlihatkan dalam tes, atau jika Anda ingin menggunakan cara Anda, itu akan menjadi dc -e '3 4 2^r2^+3kv[...tempat 3 dan 4 adalah parameter.
daniero
3

C, 77 atau 99

77 karakter jika input hanya bisa menjadi argumen fungsi:

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

99 jika input harus dibaca dari stdin:

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

Terima kasih banyak untuk @Yimin Rong!

Josh
sumber
1
Ada hipot (a, b) yang akan menghemat tiga karakter.
Fungsi itu tidak mengkompilasi kompilasi apa pun yang saya gunakan gcc tcc dentang di tio ... mungkin tidak memiliki satu header #include dan dalam judul versi yang tepat dari kompiler
RosLuP
3

Powershell

Hanya untuk melihat apakah aku bisa ...

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
sumber
1
Kerja bagus. Sepertinya Anda melakukan ini ketika saya sedang sibuk dengan solusi saya sendiri, yang mengalahkan ini sekitar 62 karakter. Untuk referensi di masa mendatang, jawaban Code Golf diharapkan "golf" dan memasukkan "skor" mereka. "Bermain golf" berarti Anda harus melakukan segala upaya untuk mengurangi panjang karakter dengan menggunakan alias tangan pendek, trik sintaksis, dan cara lain untuk memperluas aturan bahasa. Anda juga harus menghapus spasi putih yang tidak perlu jika memungkinkan (setidaknya ada tiga ruang yang dapat dihapus dari solusi Anda). "Skor", dalam hal ini, adalah jumlah karakter Anda - saat ini 173.
Iszi
Saya sarankan membaca wiki tag golf kode, berbagai bagian dari Pusat Bantuan, dan utas Tip Golf untuk PowerShell untuk mendapatkan perasaan yang lebih baik tentang bagaimana menulis jawaban kompetitif untuk tantangan golf kode di sini.
Iszi
Juga, saya mendapatkan kesalahan dengan skrip Anda. "... nama parameter 'p' ambigu ..." berkaitan dengan Read-Host.
Iszi
3

Rubi, 94 90 82 karakter

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

Perbarui (terima kasih atas komentarnya):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5
epson121
sumber
1
Anda bisa menyimpan beberapa karakter jika Anda menggunakan a**0.5bukan panjang Math.sqrt(a). Dan ruang sesudahnya pjuga bisa dihilangkan.
Nik O'Lai
1
Dan Anda tidak perlu tanda kurung di %(Math...).
Nik O'Lai
2

MATLAB 79 74

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

Python 2.7 - 80 karakter

print'The hypotenuse of this right triangle is %.3f'%(input()**2+input()**2)**.5
Andrea Ciceri
sumber
Saya tidak berpikir ini tempat 3 desimal ...?
Joachim Isaksson
Ini salah saya, saya sudah memperbaiki, terima kasih.
Andrea Ciceri
2

C ++ - 90

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

sumber
pow(a,2)kapan kamu bisa melakukannya a*a? Saya juga tidak yakin saya mengerti tujuan lantai dan +5 dan kalikan dan bagi dengan 1000
Cruncher
@Cruncher Lantai ini untuk mengatur tempat desimal menjadi 0,3 tempat. Saya sedang mengerjakan ulang sekarang, dan akan memasukkan saran Anda.
Ada hipot (a, b) yang akan menghemat tiga karakter.
@YiminRong Keren!
2

Perl 6 (68 74 byte)

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

{}mendeklarasikan fungsi lambda. [+]adalah jumlah operator, X**adalah operator lintas daya (misalnya, 1, 2 X+ 10, 20memberi 11, 21, 12, 22). Dalam hal ini, operator lintas daya mengambil satu argumen, sehingga hasilnya memiliki panjang yang sama dengan @_. @_berisi semua argumen fungsi.

Jika tidak diizinkan memiliki fungsi yang dapat mengambil jumlah argumen yang salah (tidak aman), dimungkinkan untuk mengganti [+] @_ X**2dengan $^a**2+$^b**2, di mana $^adan $^bmerupakan argumen placeholder.

Konrad Borowski
sumber
2
Bagaimana Anda membatasi hingga 3 tempat desimal?
Joachim Isaksson
@ JoachimIsaksson: Saya gagal membaca. Harus diperbaiki sekarang.
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))
elixenide
sumber
.toFixed .. terima kasih! belajar sesuatu yang baru :)
micha
2

C, 100 karakter (mengalahkan solusi C lainnya dengan 1!)

Algoritma yang sangat tidak efisien.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}
pengguna12205
sumber
Maaf, tetapi Anda telah menulis "the" bukannya "this", jadi jika Anda benar bahwa panjangnya sama; P
daniero
@daniero Ok, menemukan perbaikan, sekarang masih satu karakter :)
user12205
Dalam kompiler Borland C, ia tidak dapat dikompilasi ...
RosLuP
2

DELPHI / PASCAL

Dengan indentasi (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 diri
sumber
1
ah man, aku punya yang sama persis :(
Teun Pronk
untuk terlambat mengedit, jadi sekali lagi .. Edit: Anda bisa mendapatkan 2 karakter dengan mengubah integerke int16Anda tidak harus menyertakan 2 baris pertama untuk jawaban Anda, dan Anda dapat menghapus spasi. melakukan semua yang memberi Anda 106 karakter.
Teun Pronk
2

EcmaScript 6, 82 79

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

Pemakaian:

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

Pembaruan: Beralih keMath.hypot()

Florent
sumber
2

Golfscript ( 69 67 66 65)

Ini akan jauh lebih mudah jika floating point benar-benar didukung tanpa menggunakan solusi ... :)

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

Tautan untuk mengujinya .

Joachim Isaksson
sumber
mengapa kamu lakukan 2.!~ketika 2-1lebih pendek?
McKay
@McKay Pertanyaan bagus, saya selalu mendapat the difference between 2- 1` dan 2-1salah, jadi mungkin untuk sementara bingung :) Tetap, terima kasih.
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
sumber
Buang mathsedikit tabungan. (a*a+b*b)**.5
Steven Rumbalski
Karena isi dari fungsi Anda adalah satu pernyataan, itu bisa berada pada baris yang sama dengan defmenyimpan baris baru dan indentasi.
Steven Rumbalski
1

AWK - 84 78 karakter

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

Terima kasih kepada Wasi karena telah menyarankan ^ operator dan menghapus ()!

misalnya

$ 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

sumber
Anda dapat bermain golf lebih jauh{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi
1

PowerShell: 111

Kode Golf

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

Panduan

1..2|%{sv $_ (read-host)};Mendapat dua input secara interaktif dari pengguna, dan menyimpannya dalam $ 1 dan $ 2. Mungkin dapat memotong beberapa panjang dengan menggunakan argumen atau input pipa sebagai gantinya.

"The hypotenuse of this right triangle is Teks yang diperlukan dalam output, sesuai spesifikasi tantangan.

$(... )"Blok kode enkapsulasi akan diproses sebagai skrip sebelum dimasukkan dalam output.

"{0:N3}"-f Memformat keluaran dari bit kode berikutnya sebagai angka dengan tepat tiga digit setelah titik desimal.

[math]::sqrt(... )Mendapat akar kuadrat dari nilai yang dienkapsulasi.

$1/1*$1+$2/1*$2Berfungsi sebagai "a ^ 2 + b ^ 2" kami. Mengalikan angka dengan sendirinya adalah cara terpendek untuk mengisinya dalam PowerShell, tetapi variabel-variabel tersebut perlu dibagi dengan 1 terlebih dahulu untuk memaksa mereka menjadi bilangan bulat. Kalau tidak, mereka diperlakukan sebagai teks dan 3 * 3 + 4 * 4 akan menjadi 3334444 bukan 25.

Iszi
sumber
1

JavaScript: 83

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

Saat ini implementasi JS terpendek menggunakan stdin: D Hanya
bekerja di Firefox 27.0+ (EcmaScript 6)

JavaScript: 78

Jika kita dapat menggunakan hanya dua variabel (seperti banyak skrip lakukan di sini):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)
Fez Vrasta
sumber
whoooo .. .hypot. Tangkapan yang bagus!
micha
1

dc, 55

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

Jawa, 112

(Juga mencetak kesalahan Metode Tidak Seperti Ini, meskipun saya tidak yakin apakah ini melanggar aturan)

class A{static{int a=1,b=1;System.out.printf("The hypotenuse of this right triangle is %.3f",Math.hypot(a,b));}}

Jawa, 149

(Tidak ada kesalahan)

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

C #

Hanya Metode (114)

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

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

Program Lengkap (tanpa menggunakan metode - 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
sumber
1
Inilah program lengkap saya. 141 karakter ... Anda dapat menyimpan beberapa karakter menggunakan formatstring overload dari menulis menggunakan System; class P {static void Main () {double a = 3, b = 4; Console.Write ("Titik miring dari segitiga siku-siku ini adalah {0: N3} ", Math.Sqrt (a + b b));}}
Tim Bailey
1
Anda dapat menggunakan pemformatan string di Konsol. Menulis alih-alih memanggil ToString () untuk menyimpan 9 karakter.
Rik
1

JavaScript 118 106 93

Tidak seperti solusi @ micha, milik saya mengambil dua variabel melalui fungsi dan mengirimkan peringatan hasil.

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

Panah gemuk berfungsi untuk menyelamatkan!

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

WallyWest
sumber
1
Bisa lebih pendek jika Anda sebaris c(). Mengasingkan Mathtidak menyimpan byte dalam kasus Anda.
Florent
@Florent Ah, ya ... satu detik!
WallyWest
1

c64 basic v2, 60 66 byte

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

Tangkapan layar:

masukkan deskripsi gambar di sini

Cara mencobanya.

peterh - Pasang kembali Monica
sumber
harus mengatakan "The miring ini benar segitiga adalah"
Skidsdev
@Mayube Sad :-( +6 byte :-( Posting diperbaiki.
peterh
1

R, 61 76 byte

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

cat menampilkan kontennya ke STDOUT.

The scan()Fungsi mengambil input pengguna dari keyboard. Input ini ada sebagai vektor, di mana ^2diterapkan ( ^fungsi adalah vektor), dan sum()menjumlahkan elemen-elemen dari vektor. sqrtmenghasilkan akar kuadrat, yang dibulatkan ke 3 tempat desimal olehround(,3)

Terima kasih kepada @caird coinheringaahing karena memperhatikan bahwa jawaban sebelumnya tidak membulatkan.

Frédéric
sumber
Apakah ini "Simpan c hingga hanya tiga angka desimal."?
caird coinheringaahing
@cairdcoinheringaahing: sekarang! Terima kasih!
Frédéric
1

ARBLE , 73 byte

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

Cobalah online!

ATaco
sumber
1
@ H.PWiz Saya harus mengatakan, untuk tantangan yang seharusnya sqrt(a^2+b^2), ini memiliki banyak boilerplate yang tidak perlu.
ATaco
1

OML , 57 byte

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

Cobalah online!

Bagian 1

Ini hanya menghasilkan string

"The hypotenuse of this right triangle is "s

Bagian 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
sumber
1

Jeli , 32 karakter

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

Cobalah online!

Mungkin ada kompresi string yang lebih baik yang memungkinkan saya untuk berkeliling perlu bergabung dengan spasi tetapi saya kesulitan menemukannya.

Penjelasan:

,²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.
Kamerad SparklePony
sumber
Selama only three decimal placessarana less than or equal to three decimal places, output terlihat baik-baik saja.
Engineer Toast