正负多面体!


14

您的提交必须包含一个数字列表(以您的语言支持的任何列表格式,或使用多个功能/命令行参数),或一串数字,并用一个不是的字符分隔0123456789。用一种语言,它必须将所有语言相加并输出和。用另一种语言,它必须按顺序输出彼此相减的结果。例:

12
5
7
2

在一种语言中,它必须输出26,而在另一种语言中,它必须输出-2。请注意,所有输入的数字都是小于的正整数100。所20提供的数字将永远不会超过,因此您的输出将永远不会大于2000或小于-1899。任何问题?在下面发表评论!


输出中是否允许尾随空格?
Business Cat

是否允许使用同一语言的两个不同版本?参见HyperNeutrino
Xcoder先生17年

@ Mr.Xcoder是允许的。
程序员

2
@BetaDecay,您认为这是一个问题,请查看代码高尔夫球!
programmer5000

1
@ programmer5000你的意思是[code-golf] -[polyglot]
暴民埃里克(Erik the Outgolfer)'17年

Answers:


14

果冻 / 05AB1E,3个字节

00000000: c6 71 53                                         .qS

这是已提交程序的十六进制转储(xxd)。

在线尝试!

果冻:总和

Jelly使用Jelly代码页,因此会看到以下字符。

İqS

在线尝试!

怎么运行的

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E:差异

05AB1E使用Windows-1252,因此它看到以下字符。

ÆqS

在线尝试!

怎么运行的

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2 / 3,52个字节

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)1在Python 2中返回,因为1/2首先计算到0,然后是0 * 4 = 0

int(1-(1/2)*4)-1在Python 3中返回,因为它1/2先求到0.5,然后求int(0.5 * 4) = int(2.0) = 2


1
是否使用相同的语言,甚至允许使用其他版本?
Xcoder先生17年

3
@ Mr.Xcoder我不明白为什么不这样做,我已经看到其他语言使用不同版本的C,Java,Python和Befunge。我会在meta上询问,或者看看是否可以找到相关的meta帖子。
HyperNeutrino

不过,由于版本更改,可以很好地使用数学技巧。
Xcoder先生17年

1
@ Mr.Xcoder谢谢!我在这里问过关于meta的问题; 我希望早日得到答案。
HyperNeutrino

1
@ programmer5000整数除法。
HyperNeutrino

14

C和C ++(均来自GCC),81 75 73字节

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

获取指向数组和长度的指针。

说明: 仍然使用@Steadybox的说明:p在C中,auto d=.5使用自动存储类(默认值)声明一个整数变量,然后将其初始化为0,而在C ++ 11中,它声明一个double并进行初始化。到0.5。

C-加语言: 在线试用!

C ++-减语言: 在线尝试!


11

05AB1E / Jelly,5个字节

00000000: 4f71 7f5f 2f                             Oq._/

在线尝试!(05AB1E)
在线尝试!(果冻)

05AB1E看到

好吗?_ /
说明:

q __ / 1个隐式参数。
O取第一个输入项的总和。
 q退出。
  ?_ /不起作用。

果冻看到

q
_ /
说明:

_ /主链接。参数:z
_ /按顺序减去z的元素。

Oq Helper链接。无法运作。

这会使用Jelly代码页吗?
程序员

@ programmer5000这是原始字节流,它对05AB1E使用CP-1252,对Jelly使用JELLY。因此7f
Erik the Outgolfer

哦,没意识到!
programmer5000

8

实际上 / 果冻,4个字节

00000000: e4 81 5f 2f                                      .._/

这是已提交程序的十六进制转储(xxd)。不能在线进行原始形式的测试;TIO不支持CP437编码。

实际上:总和

实际上使用CP 437,因此它看到以下字符。

Σü_/

在线尝试!

怎么运行的

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

果冻:差异

Jelly使用Jelly代码页,因此会看到以下字符。

ỵ¹_/

在线尝试!

怎么运行的

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

我读为actually, Jelly.:)
程序员

您滥用了一个未定义角色的行为像这样的事实:)
Erik the Outgolfer

1
@EriktheOutgolfer或多或少。老实说,我不太确定无法识别的令牌会做什么。
丹尼斯

ü
再三

@ programmer5000是jelly, actually
Arjun


7

CJam / Jelly,6个字节

q~:-
S

贾姆

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

在线尝试!

果冻

(使用UTF-8,而不是Jelly代码页)

q~:-是帮助程序链接。由于它没有被调用,所以它的作用并不重要。S计算数组的总和。

在线尝试!


5
果酱和果冻。一起使用两个类似的东西是有意义的。
mbomb007 '17

1
这是无效的。果冻的换行符为0x7f,换行符为0x0a。在Jelly中,这实际上与相同q~:-½S。遗憾的是,修复(q~:-e#\x7fS)较大。在线尝试!(CJam)在线尝试!,每个人都有自己的编码来测试自己。
暴民埃里克(Erik the Outgolfer)'17年

2
另外,您可以对Jelly使用UTF-8编码,这样可以使它保持当前的状态,但是请指定它。
暴民埃里克(Erik the Outgolfer)'17

5

JavaScript / Cubix,36个字节

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

尝试一下!

可以使用下面的代码片段测试JavaScript函数,可以在此处测试Cubix程序。

这是如何运作的?

的JavaScript

第一行是JavaScript的行注释,因为它以两个斜杠开头,因此JavaScript仅看到最下面的行(a=>eval(a.join`-`)),该行将数组作为输入,将其与中间的减号连接起来,然后将其作为代码运行,从而数组中所有元素的减法。

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

库比克斯

Cubix看到以下多维数据集(请注意,Cubix会忽略所有空白):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

起点

IP从第三行开始,指向东方。它命中该'I'命令,该命令从输入中获取一个数字,并将其压入堆栈。然后,将其重定向'^'到sum-loop中。

求和环

我删除了不属于sum循环的所有字符,并用no-ops('.')替换了它们。IP最初到达第二行,指向东。

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

首先,'!'命令检查顶部元素。如果是0(即,我们已经到达输入的末尾),'v'则执行下一条指令(),从而将IP反映在循环之外。如果尚未到达输入的末尾,则将前两项相加('+',第二项是该点的总和,前一项是新输入)。然后,IP绕到立方体的另一面,变成'u'字符,这使IP掉头并执行'I'命令(读取另一个输入整数),同时指向北。IP回绕到顶部,跳过('$')删除指令(';'),然后再次掉头,回到我们开始的位置。

结束

如果IP反映在循环之外,则执行以下字符:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

这些指令删除顶部元素(为零),然后将顶部元素(总和)输出为整数。然后到达'@'命令,因此程序结束。



4

JS(ES6),CGL(CGL高尔夫语言)32 26字节

 x=>eval(x.join`-`)
//-⨥

JS进行减法,CGL进行加法。

JS:

x=>eval(x.join`-`)

一个匿名函数,它使用减去数组中的每个元素Array#reduce

//-⨥

一条评论。

CGL

 x=>eval(x.join`-`)

第一行中的空格实际上是一个不间断的空格,这是CGL中的注释。第一行被忽略。

//-⨥

/就做什么。该-所以它指向输入递减当前堆栈指针。将当前堆栈(输入)加在一起,将其推入下一个堆栈,并递增当前堆栈。它是隐式输出的。


1
您可以通过使用来缩短JS版本,并x=>eval(x.join`-`)保存5B
Luke


@Adám,您是对的。固定。
programmer5000

4

JavaScript(ES6)/ QBasic,84 83字节

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

评论黑客的另一种解决方案!

JavaScript计算总和。它接受一个包含数字的数组作为输入。输出为函数return。您可以像这样调用函数alert(f([10,20,30]))

QBasic计算差异。反复要求输入。一旦输入值,它将输出您输入的所有数字的差值,直到击中时间为止,Enter然后再次要求输入。继续做同样的事情,直到一切结束。


它是如何工作的?

在QBasic(结构化BASIC系列语言;不需要行号)中,'标记注释的开始,一直到行尾。而在JavaScript中,它标记字符串的开头。因此,整个第一行在QBasic中被标记为注释,但在JavaScript中,该行被执行(并且该行包含JavaScript部分,该部分添加了数字以及/*在末尾开始注释以隐藏其余部分的a)来自JavaScript解释器的QBasic代码。)

从第二行到倒数第二行的代码包含QBasic代码,用于计算所有输入数字的差(该代码非常不言自明)。

最后一行包含'*/'导致QBasic解释器将以下代码解释为注释,而在JavaScript中,它是注释的一部分(在第一行的末尾开始),因此没有任何作用。以下代码(*/)使JavaScript结束在第一行中开始的注释,但由于QBasic认为它是注释的一部分,因此未在QBasic中执行。


测试用例

JavaScript(添加):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic(减):

这个网站。将以下代码复制粘贴到其文本编辑器中:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

需要行号的原因是我提到的网站仅支持非结构化BASIC语言。该网站是我所能找到的唯一一个不错的在线BASIC解释器。但是,运行在文章顶部的代码(无行号的代码)在任何支持结构化BASIC的良好QBasic解释器中都可以正常工作,并且可以'作为注释启动器(尽管很少,大多数都可以)。


笔记

  • 这是我的第一篇帖子!我希望这是一个好人!
  • 不需要代码的QBasic部分,END因为解释器永远不会到达它!(它将永远卡在无限循环中;总是要求更多输入。)

3

Brain-Flak / Brain-Fueue,20字节

({}<([({{}})]){}>{})

在线尝试!(脑筋)(加)

在线尝试!(脑筋)(减)

说明

Brain-Flak和Brain-Flueue之间的唯一区别是Brain-Flueue用两个队列(先进先出)代替了Brain-Flak中使用的两个堆栈(后进先出)。当然,该程序使用了这种差异。

带注释的代码

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
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.