创建不同的总和


10

您应该编写一个程序或函数,该程序或函数接收一个整数作为输入,然后输出或返回两个总和为第一个整数的整数。

还有另一个要求:对于两个不同的输入,没有数字可以成为输出的一部分

细节

  • 您应该至少能够处理该范围-32768 .. 32767(包括该范围)的输入。
  • 如果您的数据类型不能处理任意整数,那很好,但是从理论上讲,您的算法应适用于任意大小数。

例子

每个块以的格式显示正确或不正确解决方案的一部分input => output

1 => 6 -5
2 => -2 4
15 => 20 -5

Incorrect, as `-5` is used in two outputs.

-5 => -15 10
0 => 0 0
1 => 5 6
2 => -5 7

Incorrect, as `5 + 6` isn't `1`.

-1 => -1 0
0 => 6 -6
2 => 1 1

Can be correct if other outputs doesn't collide.

这是代码高尔夫球,因此最短的入场券获胜。


您可以将输入范围限制为-32768 .. 32767,以便我们不必使用17位整数吗?
FUZxxl

@FUZxxl我的错,那是我的意图。固定。
randomra 2015年

输出可以是包含两个整数的列表/数组/元组/集合/等吗?(例如,f(1)=> [2,-1])
单极

似乎有几种解决方案从根本上依赖于有限的整数大小-例如,通过将输入乘以一个大的正数和一个大的负数。在我看来,这样的解决方案未能满足“理论上您的算法应适用于任意大小的数字”的要求。我是在看错问题吗?
mathmandan

Answers:


9

Pyth,8个字节

_J^Q3+QJ

示范。等效于Python 2代码:

Q=input()
J=Q**3
print -J
print Q+J

因此,输出具有形式 (-n**3, n+n**3)

一些输出:

-5 (125, -130)
-4 (64, -68)
-3 (27, -30)
-2 (8, -10)
-1 (1, -2)
 0 (0, 0)
 1 (-1, 2)
 2 (-8, 10)
 3 (-27, 30)
 4 (-64, 68)
 5 (-125, 130)

这些是不同的,因为立方体足够远隔开,添加nn**3不足以越过间隙至下一个立方体:n**3 < n+n**3 < (n+1)**3为阳性n,并对称地为负n


,一开始不需要,似乎允许两行。
Maltysen

@Maltysen我尝试将其删除,但仅打印第二个数字。也许J作业抑制了打印?
xnor

哦,是的,对不起。
Maltysen

-在pyth中,它不是一元否定运算符_,因此它_J^Q3+QJ按预期工作。
马蒂森(Maltysen)2015年

@Maltysen实际上,那行得通,我只需要J不要在外面。感谢您为此给我打招呼。
xnor

8

雪人0.1.0,101个字符

}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP

在STDIN上输入,在STDOUT上以空格分隔的输出。

这使用与isaacg答案相同的方法。

带换行符的注释版本,表示“可读性”:

}vg0aa          // get input, take the first char
@@*45,eQ.       // check if it's a 45 (ASCII for -) (we also discard the 0 here)
// this is an if-else
:               // (if)
  ?}0AaG        // remove first char of input (the negative sign)
  0`NdE`        // store a -1 in variable e, set active vars to beg
;
:               // (else)
  ?}1           // store a 1 in variable e, set active vars to beg
;bI             // active variables are now guaranteed to be beg
%10sB           // parse input as number (from-base with base 10)
%nM             // multiply by either 1 or -1, as stored in var e earlier
2np`*`          // raise to the power of 2 (and discard the 2)
%.              // now we have the original number in b, its square in d, and
                //   active vars are bdg
*#NaBna!*+#     // add abs(input number) to the square (without modifying the
                //   input variable, by juggling around permavars)
@~%@0nG\]       // active vars are now abcfh, and we have (0>n) in c (where n is
                //   the input number)
:.;:;bI         // if n is negative, swap d (n^2) and g (n^2+n)
~0-NdEnM        // multiply d by -1 (d is n^2 if n is positive, n^2+n otherwise)
tSsP            // print d
" "sP           // print a space
.tSsP           // print g

关于PPCG的第一个Snowman解决方案的评论:我认为我的设计目标已达到使我的语言尽可能混乱的目的。

这实际上本来可以短很多,但是我是个白痴,忘了为字符串->数字解析实现负数。因此,我必须手动检查是否有-第一个字符,如果是,请删除它。


1
比Brainfuck更好。
阶段

1
鸵鸟对此感觉如何?;)
Kade

6

Pyth,15个 11字节

4个字节感谢@Jakube

*RQ,hJ.aQ_J

示范。

映射如下:

0  -> 0, 0
1  -> 2, -1
-1 -> -2, 1
2  -> 6, -4
-2 -> -6, 4

依此类推,总是包含n^2n^2 + n,加号或减号。


5

APL,15个字节

{(-⍵*3)(⍵+⍵*3)}

这将创建一个未命名的单子函数,该函数返回对-n ^ 3(-⍵*3),n + n ^ 3(⍵+⍵*3)。

您可以在线尝试



2

O17 15 9字节

使用O的一些新功能。

Q3 ^ .Q + p_p

旧版

[i#.Z3 ^ * \ Z3 ^)_ *] o

1
我开始喜欢这些O答案,但是如果解释器不是用Java编写的,我会更喜欢...;)
kirbyfan64sos 2015年

@ kirbyfan64sos虽然不及Pyth小,但在某些情况下可以击败CJam和GolfScript。它非常强大,可以击败与数组有关的任何事情。
阶段

1

Python 3、29 27

编辑:不符合第二个“详细信息”项目符号中的要求

奖励:从-99998到99998(含)


lambda n:[99999*n,-99998*n]

这将创建一个匿名函数*,您可以通过将其括在方括号中,然后将参数放在方括号中来使用,如下所示:

(lambda n:[99999*n,-99998*n])(arg)

*感谢@ vioz-提出建议。


输入/输出示例:

>>> (lambda n:[99999*n,-99998*n])(1)
[99999, -99998]
>>> (lambda n:[99999*n,-99998*n])(2)
[199998, -199996]
>>> (lambda n:[99999*n,-99998*n])(0)
[0, 0]
>>> (lambda n:[99999*n,-99998*n])(-1)
[-99999, 99998]
>>> (lambda n:[99999*n,-99998*n])(-2)
[-199998, 199996]
>>> (lambda n:[99999*n,-99998*n])(65536)
[6553534464, -6553468928]

1
好贴!众所周知,您可以删除f=并将其保留为匿名函数,但这仍然是有效的答案。然后,您可以将字节数减少到27 :)
Kade

1
“ ...您的算法在理论上应该适用于任意大小的数字。” 显然(lambda n:[99999*n,-99998*n])(99999)(lambda n:[99999*n,-99998*n])(-99998)它将在理论上和实践上发生冲突。
mathmandan

@mathmandan您说得对,我将编辑我的帖子以明确表明它不符合要求。我会尝试编写和测试新代码,但是我在远离计算机的移动设备上使用。
monopole 2015年

0

Haskell,16个字节

我无耻地复制了@xnor的方法。可能没有比这更好的了。

f x=(-x^3,x^3+x)
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.