ダイヤモンドパズル!


21

説明:

昨年の数学の授業では、宿題について、これらの非常にシンプルなものを時々取得しましたが、ダイヤモンドパズルと呼ばれる同様に迷惑な質問がありました。これらは基本的に私たちが合計を与える質問であり、製品は乗算されたときに製品を与え、加算されたときに合計を与える2つの数を見つけるように求められました。私はそれらを解決する方法を知っていた唯一の方法(代数I)で、製品の要因をリストし、合計するために追加された要因を確認するだけだったので、これらは夢中になりました。(当時Quadraticsを使用する方法を知らなかったので)言うまでもなく、彼らは数学に挑戦していませんでした。しかし、ちょうどプログラムを書いたほうがいいと思いました。それが今日のあなたの挑戦です!ダイヤモンドパズルを解決できるプログラムを作成します。

ここに画像の説明を入力してください ぼやけた画像についての謝罪、私が見つけることができる最高の。また、泡の中の数字は無視してください。菱形の上部は製品、下部は合計、左右は2つの数字です。回答は次のとおりです(これらはテストケースでもあります)。

  1. 9、-7
  2. -2、-1
  3. 5、8
  4. -9、-9

ルール:

  • これを実現する定義済みの関数またはクラスを使用することはできません。
  • あなたのコードは完全なプログラム、または答えが見つかったら返されるか出力する関数でなければなりません
  • 入力は合計と積であり、関数パラメーターまたはユーザー入力として入力されます

仕様:

  • 2つの数値、合計、および積は常に整数であると仮定します。
  • 2つの答えは両方とも-127から127の間です。
  • 入力は2つの整数(合計と製品)になります。

これはコードゴルフであるため、最短バイトカウントが優先されます。標準の##言語名、バイト数で回答にタイトルを付けてください

編集:また、ドアノブはこれが本質的に「x ^ 2 + bx + cの形の2次を因数分解する」ことを指摘しました。これは、この課題について考え、アプローチする別の方法です。:D


9
これは本質的に「フォームの2次を因数分解x^2 + bx + c」するのですか?
ドアノブ

1
b =-(x + y)、c =(x * y)
TheNumberOne

単純化(x + n)(x + m)するとx^2 + (n+m)x + (n*m)、が得られるので、2次関数は、この質問と基本的に同等です(正しく理解している場合)。
ドアノブ

@Doorknob冰ええ、あなたは正しいです。重複としてマークされようとしていると思います。:(
アシュウィングプタ

とにかく、「factor x ^ 2 + bx + c」の質問はまだないと思います。問題が非常に似ていることを指摘してください。
ドアノブ

回答:


18

ゼリー15 11 10バイト

Hð+,_ðH²_½

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

次のバイナリコードは、このバージョンのJellyインタープリターで機能します。

0000000: 48 98 2b 2c 5f 98 48 8a 5f 90  H.+,_.H._.

アイディア

これは、という事実に基づいています

式

コード

Hð+,_ðH²_½    Left input: s -- Right input: p

 ð   ð        This is a link fork. We define three links, call the left and right
              link with the input as arguments, then the middle link with the
              results as arguments.

H             Left link, dyadic. Arguments: s p

H             Halve the left input.

     ðH²_½    Right link, dyadic. Arguments: s p

      H       Halve the left input.
       ²      Square the result.
        _     Hook; subtract the right input from the result.
         ½    Apply square root to the difference.

 ð+,_         Middle link, dyadic. Arguments: (results of the previous links)

  +           Compute the sum of the results.
    _         Compute the difference of the results.
   ,          Pair.

1
これは非常に優れたオンラインコンパイラです。私は彼らがJavaのようなものを持っていたらいいのに。
アシュウィングプタ

2
@AshwinGupta Dennisは実際に自分で作成しました;)Javaには、常にIdeoneがあります。
ドアノブ

@Doorknob冰ええ、彼のオンラインコンパイラはとてもクールです。私はIdeoneを使用してきましたが、そのすべてが問題ではありませんが、マルチクラスサポートはありません。学校Dでもっと複雑なプログラムをテストする方法はありません。プラス、それは...それは我々が提供されているコンピューティングデバイスであるため、それを信じるかどうかiPadのブラウザのいずれかの作業を要求しなければならない
のAshwinグプタ

誰かが14を負かすことができなければ、あなたが勝ったと思います。
アシュウィングプタ

3
OK、ジェリーは今では公式にめちゃくちゃ短いです。私は頭をPythに包み終えた直後にこの言語を習得しなければなりません...
ETHproductions

14

ユニコーン4650 2982 1874 1546

[ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 2 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 4 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ]

ヤギ、虹、そして輝きで!

できればJavaよりも短くしてください。


で適用できるカスタムエンコーディングを使用しますApplyEncoding

説明

これはどのように作動しますか???ユニコーンの魔法(および小さなコード)。

UnicornはJavaScriptにコンパイルされます

各セクションはスペースで区切られ、各セクションはJavaScriptコード内の文字を表します。

セクションにユニコーンが含まれる場合、セクションのキャラクターはセクションの長さで、文字コードに変換されます(例:32個のユニコーンはスペースになります)

セクションにヤギが含まれる場合、セクションの長さは2倍になり、文字コードに変換されます。


プログラムの特殊文字が表示されない場合は、次の図をご覧ください。

ここに画像の説明を入力してください


このチャレンジが投稿された後にUnicornが作成されたため、これは競合しません。


1
ここで一体何が起こっているのですか?箱だけが見えます。;-;
リン

誰もが、それは栄光だ見ることができるように@Mauris AWW :(私は、番組の画像を投稿します
Downgoat

3
大丈夫です、これはとても長いので受け入れられませんが、これは私のお気に入りです。
アシュウィングプタ

4
「願わくばJavaよりも短い」あなたはそのためだけに+10に値します;)
ETHproductions

1
@Doᴡɴɢᴏᴀᴛ、失望して申し訳ありません。Javaはそれよりも約18倍短いです。
タモフナチョードリー

8

JavaScriptのES6、45の 39 37 *バイト

(q,p)=>[x=p/2+Math.sqrt(p*p/4-q),p-x]

*デニスに感謝します!


2
これは私が実際に理解できる最初の答えであるため、+ 1します(並べ替え)。LOL
アシュウィングプタ

4

TeaScript、22バイト30 31

[d=y/2+$s(y*y/4-x),y-d

ないという悪いです。ユニコーンユニコードショートカットなど、いくつかのゴルフ機能をより早く完成させることができれば、もっと短くなります。

オンラインで試す


「ユニコーンのショートカット」その音が好きです!;)
ETHproductions

ユニコーンのショートカットが面白いかもしれないのに... P:オートコレクトた@ETHproductionsハハ、
Downgoat

3

MATL、33バイト

-100:100t!2$t+i=bb*i=&2#2$1fv101-

2つの異なる行に2つの数値を出力します。ソリューションが存在しない場合、出力は生成されません。複数のソリューションが存在する場合、1つのソリューションに対応する数値のペアのみが生成されます。

以下は、現在のコンパイラのGitHubコミットでOctaveで実行されました。

>> matl -r '-100:100t!2$t+i=bb*i=&2#2$1fv101-'
> 2
> -63
 9
-7

説明

-100:100           % row vector -100, -99, ..., 100
t!                 % duplicate and transpose into column vector
2$t                % duplicate the two vectors
+                  % sum with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
bb                 % move the two vectors to top
*                  % multiply with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
&                  % logical "and"
2#2$1f             % find row and column of the first "true" value in logical matrix
v101-              % concatenate vertically and subtract 101

好奇心から、「説明」形式のプログラムは実際にMATLコンパイラで実行されますか?構文はひどく分割されています。
アシュウィングプタ

はい、説明からリストをコピーするなど、プログラムを別々の行に貼り付けることができます。あなたはタイプmatlと「Enter」キーを押します。その後、プログラムを貼り付けて、空白行で終了します。構文がひどく分割されているとはどういう意味ですか?MATLはリバースポリッシュ(後置)表記を使用します。
ルイスメンドー

3

ジュリア、46 44 32バイト

f(b,c)=(x=b+√(b^2-4c))/2,b-x/2

合計を取得してから製品を取得する関数f。

最初のジュリアの答え。@AlexA。、あなたは私を誇りに思うべきです。

@Dennisと@Alex Aに感謝します。44を消すことができました。:P


40バイト:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
アレックスA.

@AlexA。-あなたは...この1に改善を提案してミームが起こるようになるだろう
ダレル・ホフマン

34バイト:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
アレックスA.

32バイト:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
デニス

2
それはちょうど私たちがほんの赤ちゃんだったので、私たちの頭に打ちのめされている通常の二次式のようです。
アレックスA.

3

dc、16

?ddd*?4*-v+2/p-p

STDINの個別の行から合計を読み取り、次に製品を読み取ります。-ve番号は、マイナス記号ではなくアンダースコアで入力する必要があります。例えば

$ { echo 2; echo _63; } | dc -e'?ddd*?4*-v+2/p-p'
9
-7
$ 

説明:

sum = a + bおよびに対する同じ基本的な二次解product = a * b。これにより、ソリューションが次のaように計算されます。

a = [ sum + √( sum² - 4 * product ) ] / 2

そして、ソリューションbを次のように計算します。

b = sum - a

拡張:

?                   # push sum to stack
 ddd                # duplicate 3 times (total 4 copies)
    *               # sum squared
     ?              # push product to stack
      4*            # multiply by 4
        -           # subtract (4 * product) from (sum squared)
         v          # take square root of (sum squared) - (4 * product)
          +         # add sum to square root of (sum squared) - (4 * product)
           2/       # divide by 2 to give solution a
             p      # print with newline and without pop
              -     # subtract solution a from sum to give solution b
               p    # print with newline and without pop

損失の精度を防ぐために、2で割るのは遅くなります。より早く2で除算することもできますが、これにはより多くの文字が必要な小数精度が必要です。


2
待って、何?これは、APL、Pyth CJam よりも短くなりました??? やったー!
デジタル外傷

3

Pyth、21 18バイト

@Dennisのおかげで3バイト節約

,J/+@-^Q2*4E2Q2-QJ

テストスイート

私の2番目のPythプログラムなので、おそらくビルトインでゴルフすることができます。提案を歓迎します!

使い方

,J/+@-^Q2*4E2Q2-QJ   Implicit: Q = first line of input
,                    Create and output a list of these items:
 J                     Set variable J to the result of these operations:
      ^Q2                Square Q.
     -   *4E             Subtract 4*(next line of input).
    @       2            Take the square root.
   +         Q           Add Q.
  /           2          Divide by 2.
                       The list is currently [J].
               -QJ     Push Q-J; the list is now [J, Q-J].
                     EOF; list is sent to output.

(この説明は100%正確ではないかもしれません。私はPythにあまり詳しくありません。)

これ/は整数除算であることに注意してください。をに置き換えることでc、整数以外の入力でもこの作業を行うことができます。


1バイトでbyteられました:P切り替えを検討する必要があります; D
nicael

この説明は100%正しいとは限りません ... ???
デジタル外傷

@DigitalTrauma私はそれがどのように機能するか(特にJ)を100%確信していませんが、ドキュメントを読んで集めたものです。
ETHproductions

1
はい、J自動割り当て変数であり、最初に使用されるときに設定されます。正しくないように思われる唯一の部分は、リストは現在[J]です。 ,正確に2つの引数を取り、それらをリストに結合します。
デニス

3

Java、82(69λ)バイト、2次式(127(114λ)バイトのブルートフォース)

ブルートフォース:(Vanilla、Java 7)

int[] n(int s,int p){for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

λ-enhanced:(Java 8)

(s,p)->{for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

にラムダを割り当て、java.util.function.BiFunction<Integer, Integer, int[]>を呼び出しますapply()

昔ながらの総当たり的なアプローチ。作業関数だけがここにあり、Javaは複数の値を返すことができないためint、必要な数の2要素配列を返します。

完全なブルートフォースアプローチベースのプログラムは、ここideone.comにあり、λバージョンはこちらです。

これをゴルフにかけるには、不要なブレースをすべて削除する必要がありました。

ゴルフをしていない:

int[] n(int s,int p){//sum and product as function parameters,in that order
    for(int a=-100;a<=100;a++){//iterate first no. from -100 to 100
        for(int b=-100;b<=100;b++){//iterate second no. from -100 to 100
            //if the 2 nos. satisfy the diamond-puzzle condition, 
            //pack them in an int array and return them
            if(a+b==s&&a*b==p)return new int[]{a,b};}
     }//if no such pair exists, return null
return null;}

二次アプローチ:(Vanilla、Java 7)

int[] n(int s,int p){int x=s+(int)Math.sqrt(s*s-4*p);return new int[]{x/2,s-x/2};}

λ-enhanced:(Java 8) (s、p)-> {int x = s +(int)Math.sqrt(s * s-4 * p); return new int [] {x / 2、sx / 2} ;}

(上記のブルートフォースλの使用法)。

パラメーターと戻り条件は、上記のブルートフォースソリューションと同じです。

ここで他のほとんどすべての回答で使用されている古き良き二次式を使用し、誰かがここで私を助けてくれない限り、これ以上ゴルフを続けることはできません。それはかなり明確なので、私は未ゴルフバージョンを含めていません。

完全な二次アプローチに基づくプログラムはideone.comにあり、λバージョンはこちらにあります。


AHHAはい、ありがとうございます。Javaの回答を待っていました。また、私は誰かがループとブルートフォースに使用するのを待っていました。私は1つの取引で2つを得たと思います。+1
アシュウィングプタ

1
Javaはユニコーンビート:(私は+1をいただきたいが、私は私の毎日の投票制限使用してきました
Downgoat

2

Japt28 22 21 20バイト

[X=V/2+(V²/4-U ¬V-X]

入力はの形式で行われ-63 2ます。

説明:

  • UそしてV二つの入力である(-63そして2最初の場合)
  • ² 数の二乗
  • q 平方根を抽出します

私はこれに対する答えを書いていました。つまり、私があなたのものを見るまでです。よくやった!最初の部分を再配置し、より多くのUnicodeのショートカットをカップルを使用することにより、我々は、21のバイトを達成することができます:[X=ºV²-4*U ¬+V)/2V-X]ショートカットがなければ:[X=((V²-4*U q +V)/2V-X]私は本当に、末尾にする必要があり]、次のバージョンでは不要なの...
ETHproductions

@Eth OK、¬は素晴らしいことです。
ニカエル

2

APL、27 21バイト

h(+,-).5*⍨⊣-⍨h×h←.5×⊢

これは、左右の整数を受け入れ、配列を返す2項関数列です。呼び出すには、変数に割り当てます。

ゴルフをしていない:

                h←.5×⊢       ⍝ Define a train h for halving the input
              h×             ⍝ b^2/4
          ⊣-⍨                ⍝ b^2/4 - c
      .5*⍨                   ⍝ sqrt(b^2/4 - c)
h(+,-)                       ⍝ Return the halved pair

オンラインで試す

デニスのおかげで6バイト節約されました!


2

CJam、18バイト

q~2d/_2#@-mq_2$+p-

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

使い方

q~                  e# Read an evaluate all input. STACK: product sum
  2d/               e# Divide the sum by 2.0.
     _              e# Push a copy of the result.
      2#            e# Square the copy.
        @-          e# Rotate the product on top and subtract it from the square.
          mq        e# Apply square root.
            _2$     e# Push copies of the root and the halved sum.
               +p   e# Add and print.
                 -  e# Subtract the originals.

2

Pythonの3、49の 44バイト

おそらくこれをさらに下にゴルフするいくつかの方法がありますが、これはそのままでかなり良く見えます。

def f(s,p):s/=2;d=(s*s-p)**.5;return s+d,s-d

差の符号は正しくありません。あるはずですs/2-d。また、d=(s*s/4-p)**.5数バイトを節約します。
デニス

@デニスおっと、あなたは正しい。固定およびゴルフ。
Sherlock9

1

MathCAD 15. 38バイト

ここに画像の説明を入力してください

数式を使用すると、MathCADでのプログラミングが簡単になります。この言語は、複雑な数値も簡単に処理できるように設計されています。ただし、問題を解決できる短い言語があります。



0

PHP、62バイト

<?=($x=($p=$_GET[p])/2+sqrt($p*$p/4-$q=$_GET[q]))." ".($p-$x);

これはかなり長くなる可能性がありますが、フル機能のPHP Web「プログラム」です。「get」リクエストを介して引数を受け入れます。

デモ


0

TI-BASIC、20バイト

テイクQからAns、そしてPからPrompt。のように呼び出しP:prgmNAMEます。

Prompt P
P/2+√(P²/4-Ans
{Ans,P-Ans

非常に素晴らしい。そのPrompt声明がとても長いのは残念です(笑)。TI-BASICを知りませんが、関数にコードを入れてPをパラメーターとして渡すと短くなる可能性があります。
アシュウィングプタ

実際、TI-BASICは「トークン」に分割されています。それぞれPrompt P/2+√(²4-Ans、および{トークン1であり、これらのトークンのそれぞれが1バイトです。また、TI-BASICには機能がありません。これはおそらく最短の方法です。
コナーオブライエン

まあ、それは興味をそそる、私はそれを実現しませんでした。しかし、各文字はまだ技術的な意味でバイトではありませんか?これをコピーしてテキストドキュメントに貼り付けると、36バイトになります。または、これは特殊なUnicode文字を使用しますか?
アシュウィングプタ

TI-BASICは電卓言語なので、これが見られるものです。テキストドキュメントなどではなく、計算機にキー入力されます。これが1バイトのトークンです。
コナーオブライエン

わかった。クール。興味がありました。
アシュウィングプタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.