キルヒホッフの法則を適用する


15

キルヒホッフの法則によれば、すべての電流を合計すると(ジャンクションに流れる電流は正、ジャンクションを出る電流は負)、結果は常に0になります。

次の図をご覧ください。

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

キルヒホッフの法則を使用すると、i1 + i4-i2-i3 = 0であるため、i1 + i4 = i2 + i3であることがわかります。

2つのリストがあり、1つはジャンクションに入るすべての電流を含むリスト、もう1つはジャンクションを出るすべての電流を含むリストを1つを除いて、最後のリストを出力します。

テストケース:

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

2番目のリストには、常に最初のリストより1つ少ない項目があります。出力を負にすることはできません。最小のプログラムが勝ちます。


1
あなたが実際に抵抗と電流値を与えたなら、パズルはもっと良かったでしょう。このQは、あなたが同名のように法律を導入したようです。(Qが法律なしで簡単に述べられた可能性があります)
-ghosts_in_the_code

5
キルコフの現在の法律
ルイスメンドー


指定できるのは、結果を返す関数を作成するか、実際に結果を出力/返すだけです。
tpvasconcelos

回答:


14

ゼリー、2バイト

_S

ここで試してみてください!

最初の引数に入力電流を取り、2番目の引数に出力電流を取ります。_長いリストから単一の要素をそのまま残して、それらをペアごとに減算し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~.-:+

入力は2つのCJamスタイルの配列を使用します。

すべてのテストケースを実行します。(これは一度に複数のテストケースを読み取り、各行を個別に処理するフレームワークを含み、入力から期待される結果を破棄します。)

説明

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

.-最初のリストは常に2番目のリストよりも長いことが保証されているため、確実に機能します。(それ以外の場合、2番目のリストの無関係な要素が結果に追加され、それらを減算する代わりに合計に追加します。)


1
ちょうど80kおめでとうございます!
ETHproductions

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入力順序の変更と両方の配列の連結を3バイトに減らしました。たぶんそれはあなたの答えにも適用できますか?
ルイスメンドー

ああ、私は本当に連結関数を実装する必要があります:p。とてもいい答えです!:)
アドナン

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バイト):

最初のリストは現在のリストを離れ、2番目のリストは現在のリストを入力します。コード:

(«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

Python 2、30バイト

a,b=map(sum,input());print a-b


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

Common Lisp REPL、SBCL 28 24バイト

これをREPLに書きます:

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

次に、次のような入力リストを作成します。

(2 3 4)
(2 3)

私はコアダンプの答え'(2 3 4)を使用しました(例えばの代わりに)そのようなリスト形式を使用してもいいことを願っていますをソリューションの式としてし、異なる方法で計算効果を達成しました。

説明

ましょうe_1,...,e_n最初のリストのf_1,...,f_{n-1}要素と2番目のリストの要素になります。式を評価したい(-(+ e_1 e_2 ... e_n)f_1 f_2 ...f_{n-1}) 最初のリストの要素の合計から2番目のリストの要素を引くことを意味します。必要な式は次のように構築されます。

backqouteは評価を停止します

#1= 覚えておくのに少しの書き込みを保存します ,@(read)

,@ バッククォートの効果を停止し((読み取り)が評価されるように)、リストから要素を取り出します。

(read) 入力を求めます

#1# によって保存されたLispオブジェクトを「ロード」する #1=

#. Lispオブジェクトの印刷表現の評価を行います

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.