钻石拼图!


21

说明:

去年在数学课上,我们有时会在作业上获得这些极为简单的问题,尽管这些问题同样令人讨厌,它们被称为“钻石拼图”。这些基本上是问题,我们将在其中得到一个总和,然后要求乘积找到两个数字,当相乘时得出两个数字,相加时得出和。这些使我发疯,因为我知道如何解决它们的唯一方法(在代数I中)是只列出乘积的因子,然后查看添加哪些因子来求和。(由于当时我不知道如何使用二次方)更不用说,它们并不是对数学的完全挑战。但是,我刚想到我应该写一个程序。这就是您今天的挑战!编写一个可以解决钻石难题的程序。

示例 在此处输入图片说明 为模糊的图像致歉,这是我能找到的最好的。另外,也不要理会气泡中的数字。菱形的顶部是乘积,底部是和,底部和右侧是两个数字。答案如下:(这些也是您的测试用例)

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

规则:

  • 您不得使用任何预定义的函数或类来帮助您完成此任务。
  • 您的代码必须是完整的程序或函数,一旦找到它们,它们将返回或打印答案
  • 输入是总和和乘积,它们是作为功能参数或用户输入输入的

规格:

  • 假定两个数字,总和和乘积将始终是整数。
  • 这两个答案都将在-127至127之间。
  • 您的输入将是两个整数(总和和乘积)。

请记住,这是代码高尔夫球,因此最短的字节数为准。请用标准的##语言名称,字节数为答案命名

编辑:此外,Doorknob指出,这实际上是“分解形式为x ^ 2 + bx + c的二次项”。这是思考和应对这一挑战的另一种方式。:D


9
这本质上是“因式二次方x^2 + bx + c”,对吗?
门把手

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

简化(x + n)(x + m)会给您x^2 + (n+m)x + (n*m),因此将二次方分解为因子就基本上等于这个问题(如果我正确理解的话)。
门把手

@Doorknob冰是的,您是正确的。我猜我将被标记为重复。:(
阿什温·古普塔2015年

好吧,我认为我们仍然没有一个“因数x ^ 2 + bx + c”的问题。只是指出问题非常相似。
门把手

Answers:


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。
Ashwin Gupta 2015年

2
@AshwinGupta Dennis自己说的;)对于Java,总是有Ideone
门把手

@Doorknob冰是的,我知道他的在线编译器很棒。我一直在使用Ideone,它的优点以及所有优点,但是它没有多类支持,这是一个问题。我没有办法在学校D:测试我更复杂的程序。另外,它不能在iPad浏览器上运行,因为无论它认为不是必需的,因为这是我们提供的计算设备……
Ashwin Gupta 2015年

除非有人能击败14岁,否则我认为您赢了。
Ashwin Gupta 2015年

3
好吧,果冻现在正式疯了。我必须学习这门语言,我完成我的包裹周围Pyth头之后...
ETHproductions

14

独角兽4650 2982 1874 1546

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

现在有了山羊,彩虹和火花!

希望比Java短。


使用自定义的编码可以与被施加ApplyEncoding

说明

这是如何运作的???拥有独角兽的魔力(还有一点代码)。

独角兽被编译成JavaScript

每个部分用空格隔开,每个部分代表JavaScript代码中的一个字符。

如果该部分包含独角兽,则该部分的字符是该部分的长度,并转换为字符代码(例如32个独角兽将是一个空格)

如果该部分包含山羊,则将其长度加倍,然后转换为字符代码。


如果程序的特殊字符不显示,则为以下图片:

在此处输入图片说明


这是非竞争性的,因为独角兽是在发布此挑战后制作的。


1
这到底是怎么回事?我只看到盒子。;-;
林恩

@Mauris aww :(我将发布该程序的图像,以便每个人都可以看到它的荣耀
Downgoat 2015年

3
大声笑好吧,这是我的最爱,尽管我接受不了,因为它太长了。
Ashwin Gupta,2015年

4
“希望比Java短。” 您应该为此而获得+10的
收益

1
@Doᴡɴɢᴏᴀᴛ,很抱歉让您失望。Java比这短18倍。
Tamoghna Chowdhury 2015年

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

不是不好。如果我可以更早完成一些高尔夫功能,例如独角兽 unicode快捷键,它将大大缩短

在线尝试


“独角兽捷径”我喜欢那声音!;)
ETHproductions 2015年

@ETHproductions哈哈,这是自动更正的:尽管独角兽快捷方式可能很有趣……
Downgoat 2015年

3

MATL,33字节

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

在两个不同的行中输出两个数字。如果不存在解决方案,则不会产生任何输出。如果存在多个解,则仅产生对应于一个解的一对数字。

在编译器的当前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编译器上运行?语法被完全拆分。
Ashwin Gupta 2015年

是的,您可以将程序粘贴在单独的行中,例如,复制说明中的清单。您键入matl并按“输入”;然后粘贴程序并以空白行结束。您的意思是语法被完全分割了吗?MATL使用反向修饰(后缀)表示法,也许这使您感到困惑?
Luis Mendo

3

朱莉娅46 44 32字节

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

函数f求和,然后求和。

朱莉娅的第一个答案。@AlexA。,你应该为我感到骄傲。

感谢@Dennis和@Alex A.的所有帮助。我要去掉44。


40个字节:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
Alex A.

@AlexA。-您将通过建议对此内容进行改进来使之产生模因
Darrel Hoffman

34个字节:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
Alex A.

32个字节:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
丹尼斯

2
就像常规的二次方公式一样,因为我们还只是婴儿,所以一直被我们抛在脑后。
Alex A.

3

直流电,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 + bproduct = 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 短吗???oo!
Digital Trauma 2015年

3

Pyth,21 18字节

@Dennis节省了3个字节

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

测试套件

我有史以来第二个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,我们也可以使用非整数输入。


打败你一个字节:P您应该考虑切换; D
nicael

这种解释可能不是100%正确的 ... ???
Digital Trauma 2015年

@DigitalTrauma我不是100%地确定它是如何工作的(特别是J),但这是我从阅读文档中学到的。
ETHproductions 2015年

1
是的,J是一个自动分配变量,在第一次使用时会被设置。唯一看起来不太正确的部分是列表当前为[J]。 ,正好接受两个参数并将它们组合在一个列表中。
丹尼斯

3

Java,82(69λ)字节,具有二次公式(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;}

增强的λ:(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;}

将lambda分配给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};}

增强的λ:(Java 8) (s,p)-> {int x = s +(int)Math.sqrt(s * s-4 * p);返回新的int [] {x / 2,sx / 2} ;}

(用于上面的蛮力λ)。

参数和返回条件与上述蛮力解决方案相同。

使用这里几乎所有其他答案使用的良好的旧式二次方程式,除非有人在这里帮助我,否则不能进一步深入研究。很明显,所以我不包括非高尔夫版本。

基于完整二次方程的程序位于ideone.com上,此处带有λ版本。


AHHA是的,谢谢。我在等待Java答案。另外,我正在等待有人使用循环和强力因素。我想我两笔交易达成了。+1
Ashwin Gupta

1
Java击败了独角兽:(我想+1,但是我已经使用了每日投票限制
Downgoat

2

Japt28 22 21 20字节

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

输入形式为-63 2

说明:

  • UV是两个输入(-632在第一种情况下)
  • ² 平方数
  • q 提取平方根

我只是为此写一个答案。也就是说,直到我看到你的为止。干得好!通过重新安排第一部分并使用更多的Unicode快捷方式,我们可以实现21个字节:[X=ºV²-4*U ¬+V)/2V-X]没有快捷方式:在下一版本中,[X=((V²-4*U q +V)/2V-X]我真的应该使尾部]不必要...
ETHproductions 2015年

@Eth好吧,¬是一件好事。
nicael

2

APL,27 21字节

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

这是二元函数列,它接受左右的整数并返回一个数组。要调用它,请将其分配给变量。

取消高尔夫:

                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

在线尝试

感谢Dennis,节省了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节省了一些字节。
丹尼斯

@丹尼斯哎呀,你是对的。固定并打高尔夫球。
Sherlock15年

1

MathCAD 15. 38字节

在此处输入图片说明

通过数学公式,使用MathCAD进行编程很容易。该语言甚至旨在轻松处理复数。但是,有较短的语言可以解决此问题。



0

PHP,62字节

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

这可能很长,但却是功能齐全的PHP网络“程序”。通过“ get”请求接受参数。

演示


0

TI-BASIC,20字节

需要QAns,并PPrompt。打电话喜欢P:prgmNAME

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

非常好。对于Prompt这么长时间的陈述来说太可笑了。我不知道TI-BASIC,但是如果您将代码放入函数中并将P作为参数传递,则可能会更短。
Ashwin Gupta

实际上,TI-BASIC分为“令牌”。每个的Prompt P/2+√(²4-Ans,和{是一个令牌,并且每个这些令牌是一个字节。此外,TI-BASIC不具有功能。这可能是最短的方法。
科纳·奥布莱恩

哦,那很有趣,我没有意识到。但是从技术意义上来说每个字符不是一个字节吗?就像我将其复制粘贴到文本文档中一样,我得到了36个字节。还是使用特殊的Unicode字符?
Ashwin Gupta

TI-BASIC是一种计算器语言,因此这就是人们所看到的。它被键入计算器,而不是文本文档等。这是一字节的令牌。
科纳·奥布莱恩

好的,我知道了。凉。我只是很好奇。
Ashwin Gupta
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.