ピタゴラスの定理を実装する最短の方法


14

ピタゴラスの定理a²+b²=c²が嫌いな人はいますか?値aとbを取り込んで、「この直角三角形の斜辺は」+ cと出力する任意の言語で可能な最短の方法を記述します。cは小数点以下3桁までにしてください。


3
これはプログラミングパズルとして認められますか?
DavidC 14

1
@DavidCarraher問題自体はプログラミングのパズルではありません。しかし、目的はそのための解決策をゴルフにすることであるため、それは確かにプログラミングのパズルです。
ビクターStafusa 14

3
最短のキャラクター
ヴィックP 14

4
このcode-golfタグは、「Code-golfはソースコードの最小バイトで特定の問題を解決するための競争相手です」と明示しています。得点コードゴルフ(バイト対文字)を参照してください。
解像度14

1
@res:修正:-p
ティムウィ

回答:


15

APL(54)

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

テスト:

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

説明:

  • ⎕*2:入力の値を2乗します
  • +/:合計を取る
  • .5*⍨:結果を0.5乗します
  • 3⍕:小数点以下3桁に丸めます

これは無敵についてです
ランチャー14

@Cruncher:文字列をエンコードしようとしましたが、デコードルーチンを十分に小さくすることができませんでした。
マリヌス14

ピジョンホールの原理により、文字列を圧縮しようとするのは非常に困難です(不可能な場合があります。少なくとも一部の文字列では不可能でなければなりません)。文字列に何らかの論理パターンが含まれていたとしても、そうではないようです。私はあなたがこれまでにした試みを見ることに興味があります
ランチャー14

7
「hypotenuse」のスペルを修正してキャラクターを保存します。
ティムS. 14

1
@Cruncher:実は、私は... Scliptingでそれを打つ
Timwi

11

TI-BASIC、76 55 53 52バイト

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

いいえ、閉じ括弧は必要ありません。また、そのAPL回答よりも少ないバイト数:)


1
可能性がありますR▶Pr(A,B
リルトシアスト

3
提案を実装するのに2年、笑。
mbomb007

偉大さを運命づけられたと思う。そして、APLを打ち負かすためにさらに2バイト削りました!
ティムテック

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

を使用Inputして要求しXY一種の陽気です。それを許可する場合、斜辺の長さが1バイトで指定されるようPolarGCInput、beforeの設定も許可する必要がありますRか?確かに、とPolarGCの値XYもはやされて表示されていない私たちは周りにカーソルを移動すると、彼らはまだしている保存された適切な変数に。(その後、使用することはありませんが、それは重要です。)
ミシャラヴロフ

9

Python 2.7-76文字

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

説明

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

==> a 2 + b 2 = c 2

斜辺上のPJ

先生:「斜辺とは何ですか?」

LJ:「Hypotenuse、簡単な質問です。昨夜、知名度の高いパーティーがあり、新聞でそれを読んだら、High Party Newsと呼ばれます」


8

スクリプティング、46文字

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

入力は、スペースで区切られた2つの数値(小数でも構いません!)として期待されます。

これは、いくつかの不便なトリックを使用する必要があるにもかかわらず、APLよりも短いです。

説明

글坼 | 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はこれを92バイトのようにしないのですか?
ランチャー14

@Cruncher昨日の質問コメントで、バイト数ではなく文字数を数えました。
ヨアヒムイザクソン14

3

dc 54

APL回答の正接!

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

テスト:

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

本当にうまくいきません。dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'入力を待たずに、"dc: stack empty"3回印刷してから「この直角三角形の斜辺は2.000です」と出力します。
トマス14

1
@Tomasそれは一種の関数です; テストで示したように、最初にパラメーターをスタックに配置する必要dc -e '3 4 2^r2^+3kv[...があります。または、方法を呼び出したい場合は、3と4がパラメーターです。
daniero 14

3

C、77または99

入力が単に関数の引数になり得る場合は77文字:

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

99入力をstdinから読み取る必要がある場合:

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

@Yimin Rongに感謝します!


1
3つの文字を保存するhypot(a、b)があります。

この関数は...多分、コンパイラの正確なバージョンを1つの#includeヘッダを欠いており、タイトルに私はgccのTCC打ち鳴らす中のTiOを使用してコンパイルどんなコンパイルされない
RosLuP

3

パワーシェル

私ができるかどうかを見るために...

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
よくやった。私が自分のソリューションで忙しかったときにあなたがこれをしたように見えますが、これは約62文字でこれを打ち負かしています。将来の参考のために、Code Golfの回答は「ゴルフ」され、「スコア」が含まれることが期待されています。「ゴルフ」とは、ショートハンドエイリアス、構文トリック、および言語のルールを拡張する他の手段を使用して、文字の長さを短くするためにあらゆる努力を払う必要があることを意味します。また、可能な場合は不要な空白を削除する必要があります(ソリューションから削除できる空白が少なくとも3つあります)。この場合の「スコア」は、あなたのキャラクター数です-現在は173です。
Iszi14年

ここでは、ゴルフゴルフのwikiコード、ヘルプセンターのさまざまな部分、PowerShellのGolfing Tipsを読んで、ゴルフゴルフの課題に対する競争力のある答えを書く方法をよりよく理解することをお勧めします。
イッツィ14

また、スクリプトでエラーが発生します。「...パラメータ名『p』はあいまいです...」に関してRead-Host
イッツィ14

3

ルビー、 94 90 82文字

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

更新(コメントありがとう):

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

1
longyのa**0.5代わりに使用する場合、いくつかの文字を保存できますMath.sqrt(a)。また、その後のスペースpも削除できます。
ニックオライ14

1
また、括弧は必要ありません%(Math...)
ニックオライ14

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)いつできるa*a?私は確かに、私は1000で、床の目的と+.5と乗算や除算を理解していないにもよ
たけた

@Cruncherフロアでは、小数点以下の桁数を.3桁に設定します。私は今それを作り直しており、あなたの提案を含めます。

3つの文字を保存するhypot(a、b)があります。

@YiminRongクール!

2

Perl 6(68 74バイト)

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

{}ラムダ関数を宣言します。[+]は合計演算子、X**クロスパワー演算子です(たとえば、1, 2 X+ 10, 20ギブス11, 21, 12, 22)。この場合、クロスベキ演算子は引数を1つ取るため、結果の長さはと同じになります@_@_すべての関数引数が含まれます。

(危険な)引数の数が間違っかかる場合があります機能を持つことが許可されていないなら、それは交換することが可能だ[+] @_ X**2$^a**2+$^b**2、どこ$^a$^bプレースホルダ引数です。


2
小数点以下3桁にどのように制限しますか?
ヨアヒム・イザクソン14

@JoachimIsaksson:読書に失敗します。今すぐ修正する必要があります。
コンラッドボロウスキ14

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 ..ありがとう!新しい何かを学んだ:)
micha 14

2

C、100文字(他のCソリューションに1勝った!)

途方もなく非効率的なアルゴリズム。

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

申し訳ありませんが、「this」ではなく「the」と書いているので、同じ長さであることを修正する場合は、P
daniero 14

@danieroわかりました、修正が見つかりました、今でも1文字下がっています:)
user12205 14

Borland Cコンパイラーではコンパイルできません
...-RosLuP

2

デルフィ/パスカル

インデント付き(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
ああ男、私はまったく同じを持っていた:(
Teun Pronk 14

編集に遅刻するので、もう一度。.編集:回答に最初の2行を含める必要はありませんに変更integerするint16ことで2文字を取得できます。また、空白を削除できます。すべてを行うと、106文字が得られます。
テウンプロンク14

2

ECMAScriptの6、82 79

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

使用法:

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

更新:に切り替えMath.hypot()


2

Golfscript(69 67 66 65)

回避策に頼らずに浮動小数点が実際にサポートされている場合、これははるかに簡単になります... :)

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

それをテストするためのリンク


なぜあなたがやっている2.!~時に2-1短いのですか?
マッケイ14

@McKay良い質問です、私は常に2-1 the difference between 2-1間違っていますので、おそらく一時的に混乱していたでしょう:)修正、ありがとう。
ヨアヒム・イザクソン14


1

AWK — 84 78文字

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

^演算子を提案して()を削除してくれたWasiに感謝します!

例えば

$ 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

さらにゴルフをすることができます{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
ワシ14

1

PowerShell:111

ゴルフコード

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

ウォークスルー

1..2|%{sv $_ (read-host)};ユーザーからインタラクティブに2つの入力を取得し、$ 1と$ 2に保存します。代わりに引数またはパイプライン入力を使用して、長さをある程度短縮できる場合があります。

"The hypotenuse of this right triangle is チャレンジ仕様ごとの出力に必要なテキスト。

$(... )"カプセル化されたコードブロックは、出力に含まれる前にスクリプトとして処理されます。

"{0:N3}"-f コードの次のビットからの出力を、小数点以下3桁の数字としてフォーマットします。

[math]::sqrt(... )カプセル化された値の平方根を取得します。

$1/1*$1+$2/1*$2「a ^ 2 + b ^ 2」として機能します。PowerShellで数値を自乗するのが最も簡単な方法ですが、整数に強制するには変数を1で割る必要があります。それ以外の場合、テキストとして扱われ、3 * 3 + 4 * 4は25ではなく3334444になります。


1

JavaScript:83

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

現在、stdin:D を使用した最短のJS実装
はFirefox 27.0+(EcmaScript 6)でのみ動作します

JavaScript:78

2つの変数のみを使用できる場合(多くのスクリプトがここで行うように):

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

whoooo .. .hypot。良いキャッチ!
ミカ14


1

Java、112

(このようなルールに違反しているかどうかはわかりませんが、No Such Methodエラーも出力します)

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

(エラーなし)

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#

メソッドのみ(114)

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

完全なプログラム(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);
   }
}

完全なプログラム(メソッドを使用しない-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
これが私の完全なプログラムです。141文字... System; class P {static void Main(){double a = 3、b = 4; Console.Write( "この直角三角形の斜辺は{0:N3} "、Math.Sqrt(a a + b b));}}
ティムベイリー14

1
9文字を保存するために、ToString()を呼び出す代わりに、Console.Writeで文字列フォーマットを使用できます。
リック14

1

JavaScript 118 106 93

@michaのソリューションとは異なり、私のものは関数を介して2つの変数を受け取り、結果のアラートを送信します。

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

太い矢印が機能します!

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


1
インラインにすると短くなる可能性がありますc()。エイリアスを作成Mathしても、バイトは節約されません。
フローレント14

@Florentああ、そう... 1秒!
WallyWest 14


1

R、61 76バイト

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

cat STDOUTにコンテンツを表示します。

このscan()関数は、キーボードからユーザーの入力を受け取ります。この入力はベクトルとして存在し、その上に^2が適用され(^関数はベクトル化されます)、ベクトルsum()の要素を合計します。sqrt平方根を出力します。これは、小数点以下3桁に丸められますround(,3)

前の回答が丸められなかったことに気付いてくれた@caird coinheringaahingに感謝します。


これは「cを小数点以下3桁のみに保ちますか?」
コイナーリンガーリング

@cairdcoinheringaahing:それは今!ありがとう!
フレデリック


1

OML、57バイト

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

オンラインでお試しください!

パート1

これは単に文字列を出力します

"The hypotenuse of this right triangle is "s

パート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

ゼリー、32文字

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

オンラインでお試しください!

おそらく、スペースで結合する必要があるのを回避できるより良い文字列圧縮がありますが、それを見つけるのに苦労していました。

説明:

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

only three decimal placesという意味less than or equal to three decimal placesであれば、出力は正常に見えます。
エンジニアトースト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.