ใช้กฎหมายของ Kirchhoff


15

กฎหมายของ Kirchhoffบอกว่าเมื่อคุณสรุปกระแสทั้งหมด (บวกสำหรับกระแสที่จะแยกและลบสำหรับกระแสออกจากทางแยก) คุณจะได้ผลลัพธ์ 0 เสมอ

ดูแผนภาพต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยกฎของ Kirchhoff คุณจะเห็นว่า i1 + i4 - i2 - i3 = 0 ดังนั้น i1 + i4 = i2 + i3

ให้สองรายการหนึ่งที่มีกระแสทั้งหมดเข้าทางแยกและอีกหนึ่งที่มีกระแสทั้งหมดออกจากทางแยกยกเว้นหนึ่งออกรายการสุดท้าย

Testcases:

[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 สามารถระบุได้อย่างง่ายดายโดยไม่มีกฎหมาย)
ghosts_in_the_code

5
กฎหมายปัจจุบันของ Kirchoff
Luis Mendo

ที่เกี่ยวข้อง
Stewie Griffin

คุณสามารถระบุได้หรือไม่ว่าเราสามารถสร้างฟังก์ชั่นที่ส่งคืนผลลัพธ์หรือพิมพ์ / ส่งคืนผลลัพธ์ได้
tpvasconcelos

คำตอบ:


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

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 ไบต์เพื่อเปลี่ยนลำดับอินพุตและเชื่อมทั้งสองอาร์เรย์เข้าด้วยกัน บางทีนั่นอาจนำไปใช้กับคำตอบของคุณเช่นกัน?
Luis Mendo

อ่าาฉันควรใช้ฟังก์ชั่นเชื่อมต่อกัน: p คำตอบที่ดีมาก! :)
Adnan


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

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)) ฉันใช้คำตอบของ 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)

,@ หยุดผลกระทบของ backquote (เพื่อให้ประเมิน (อ่าน)) และนำองค์ประกอบออกจากรายการ

(read) ขอให้ป้อนข้อมูล

#1# "โหลด" วัตถุ Lisp ที่บันทึกโดย #1=

#. การประเมินผลการเป็นตัวแทนพิมพ์ของวัตถุ Lisp

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.