应用基尔霍夫定律


15

基尔霍夫定律说,当您对所有电流求和时(流向结点的电流为正,而离开结点的电流为负),您将始终得到结果0。

看下图:

在此处输入图片说明

使用基尔霍夫定律,您可以看到i1 + i4-i2-i3 = 0,所以i1 + i4 = i2 + i3。

给定两个列表,一个列出所有电流进入结点,另一个列出所有电流离开结点(除了一个),输出最后一个。

测试用例:

[1, 2, 3], [1, 2] = 3
[4, 5, 6], [7, 8] = 0
[5, 7, 3, 4, 5, 2], [8, 4, 5, 2, 1] = 6

第二个列表总是比第一个列表少一个项目。输出不能为负。最小的程序获胜。


1
如果您实际给出电阻和电流值,那么难题会更好。这个Q似乎就像您是同名律师一样介绍了法律。(无需法律就可以很容易地陈述Q)
ghosts_in_the_code

5
基尔霍夫(Kirchoff)当前的法律
路易斯·门多


您能指定的是,我们只能创建一个返回结果或实际打印/返回结果的函数。
tpvasconcelos

Answers:


14

果冻,2个字节

_S

在这里尝试!

在第一个参数中获取输入电流,在第二个参数中获取输出电流。_将它们成对减去,按原样保留较长列表中的单个元素,然后S对结果求和。


9

Haskell,14个字节

(.sum).(-).sum

用法示例:( (.sum).(-).sum ) [5,7,3,4,5,2] [8,4,5,2,1]-> 6

对每个列表求和并求差。


5

CJam,8个 6字节

q~.-:+

输入使用两个CJam样式的数组。

运行所有测试用例。(这可以一次读取多个测试用例,并包括一个框架来单独处理每一行,并丢弃来自输入的预期结果。)

说明

q~  e# Read and evaluate input.
.-  e# Elementwise difference.
:+  e# Get sum.

.-由于我们保证第一个列表始终比第二个列表长,因此可以可靠地工作。(否则,第二个列表的无关元素将添加到结果中,从而将它们添加到总和中而不是减去它们。)


1
恭喜,刚好80k!
ETHproductions's

4

MATL,3个4.0字节

_hs

输入是:先离开电流,然后再输入电流。

在线尝试!

_     % implicitly input array with leaving currents (except one). Negate
h     % implicitly input array with entering currents. Concatenate  
s     % sum of all elements in concatenated array

与我的解决方案完全相同,但字母不同哈哈+1
Adnan

我看到了@Adnan!(已+1)
Luis Mendo

@Adnan我减少到3个字节,以更改输入顺序并连接两个数组。也许这也可以应用于您的答案?
路易斯·门多

啊,我真的应该实现串联功能:p。很好的答案!:)
Adnan

3

Javascript,36个字节

(a,b)=>eval(a.join`+`+'-'+b.join`-`)


3

05AB1E,4个字节

码:

OEO-

说明:

O     # Take the sum of the input list
 E    # Evaluate input
  O   # Take the sum of the input list
   -  # Substract from each other

感谢Luis Mendo提醒我,我需要实现串联功能。如果我早点实现了它,那将是3个字节:

非竞争版本(3个字节):

第一个列表是离开当前列表,第二个列表是进入当前列表。码:

(«O

说明:

(    # Negate the list, e.g. [3, 4, 5] would become [-3, -4, -5]
 «   # Concatenate the second list to the first
  O  # Take the sum and implicitly output it

使用CP-1252编码。





2

Python 3,24个字节

lambda a,b:sum(a)-sum(b)

要么

Python 2,19个字节

print sum(a)-sum(b)

取决于我是否需要打印结果或只是创建一个返回结果的函数。


1

ES6,39个字节

(i,o)=>i.reduceRight((r,a,j)=>r+a-o[j])

因为我想用reduceRight



1

Pyth,6个字节

-.*sRQ

说明

       - autoassign Q = eval(input())
   sRQ - map(sum, Q)
-.*    - imp_print(minus(*^))

在这里尝试


1

K5,5个字节

-/+/'

-/)之差等于(+/)每个(')之和。

实际上:

  (-/+/')'((1 2 3;1 2);(4 5 6;7 8);(5 7 3 4 5 2;8 4 5 2 1))
3 0 6



0

通用Lisp REPL,SBCL 28 24字节

将此写入REPL:

#.`(-(+ #1=,@(read))#1#)

然后像这样写输入列表:

(2 3 4)
(2 3)

我希望可以使用这种列表格式(而不是例如'(2 3 4)),我使用coredump的答案作为解决方案的公式,然后以不同的方式实现了他的计算效果。

说明

e_1,...,e_n是第一个列表的元素f_1,...,f_{n-1}是第二列表的元素。我们要对表达式求值(-(+ e_1 e_2 ... e_n)f_1 f_2 ...f_{n-1}) ,这意味着要从第一个列表的元素总和中减去第二个列表的元素。所需的表达式构造如下:

backqoute停止评估

#1= 节省一些书写,记忆 ,@(read)

,@ 停止反引号的影响(以便将评估(读取))并将元素从列表中删除。

(read) 要求输入

#1# “加载”由Lisp保存的Lisp对象 #1=

#. 评估Lisp对象的打印表示形式

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.