Terapkan hukum Kirchhoff

15

Hukum Kirchhoff mengatakan bahwa ketika Anda menjumlahkan semua arus (positif untuk arus yang menuju persimpangan, dan negatif untuk arus yang meninggalkan persimpangan), Anda akan selalu mendapatkan hasilnya 0.

Lihatlah diagram berikut:

masukkan deskripsi gambar di sini

Menggunakan hukum Kirchhoff, Anda dapat melihat bahwa i1 + i4 - i2 - i3 = 0, jadi i1 + i4 = i2 + i3.

Diberikan dua daftar, satu dengan semua arus masuk persimpangan dan satu dengan semua arus meninggalkan persimpangan kecuali satu, menampilkan yang terakhir.

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

Daftar kedua selalu memiliki satu item kurang dari daftar pertama. Outputnya tidak boleh negatif. Program terkecil menang.

Enam puluh enam
sumber
1
Teka-teki akan lebih baik jika Anda benar-benar memberi nilai resistor dan saat ini. Q ini sepertinya Anda telah memperkenalkan hukum hanya sebagai senama. (Q bisa dengan mudah dinyatakan tanpa hukum)
ghosts_in_the_code
5
Hukum Kirchoff saat ini
Luis Mendo
Terkait .
Stewie Griffin
Bisakah Anda menentukannya? Kita hanya dapat membuat fungsi yang mengembalikan hasil atau benar-benar mencetak / mengembalikan hasilnya.
tpvasconcelos

Jawaban:

14

Jelly, 2 byte

_S

Coba di sini!

Mengambil arus yang masuk dalam argumen pertama, dan arus yang tersisa dalam argumen kedua. _kurangi mereka berpasangan, meninggalkan elemen tunggal dari daftar yang lebih lama apa adanya, dan Smenjumlahkan hasilnya.

Lynn
sumber
9

Haskell, 14 byte

(.sum).(-).sum

Contoh penggunaan: ( (.sum).(-).sum ) [5,7,3,4,5,2] [8,4,5,2,1]-> 6.

Jumlahkan setiap daftar dan ambil perbedaannya.

nimi
sumber
5

CJam, 8 6 byte

q~.-:+

Input menggunakan dua array gaya CJam.

Jalankan semua test case. (Ini membaca beberapa kasus uji sekaligus dan termasuk kerangka kerja untuk memproses setiap baris secara individual, membuang hasil yang diharapkan dari input.)

Penjelasan

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

.-berfungsi dengan baik karena kami dijamin bahwa daftar pertama selalu lebih panjang daripada yang kedua. (Kalau tidak, elemen asing dari daftar kedua akan ditambahkan ke hasil yang akan menambahkannya ke jumlah alih-alih mengurangkannya.)

Martin Ender
sumber
1
Selamat tepat 80rb!
ETHproduksi
4

MATL , 3 4.0 byte

_hs

Inputnya adalah: meninggalkan arus terlebih dahulu, kemudian memasuki arus.

Cobalah online!

_     % 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
Luis Mendo
sumber
Solusi yang sama persis dengan milik saya, tetapi dengan huruf yang berbeda haha, +1
Adnan
@ Adnan saya melihat! (Sudah +1)
Luis Mendo
@ Adnan Saya telah mengurangi menjadi 3 byte mengubah urutan input dan menggabungkan kedua array. Mungkin itu bisa diterapkan pada jawaban Anda juga?
Luis Mendo
Ahhh, saya harus benar-benar mengimplementasikan fungsi gabungan: hal. Jawaban yang sangat bagus! :)
Adnan
3

Javascript, 36 byte

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

dihapus
sumber
3

05AB1E , 4 byte

Kode:

OEO-

Penjelasan:

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

Terima kasih kepada Luis Mendo karena mengingatkan saya bahwa saya perlu menerapkan fungsi gabungan. Jika saya sudah menerapkannya lebih cepat, itu akan menjadi 3 byte:

Versi yang tidak bersaing (3 byte):

Daftar pertama adalah daftar meninggalkan saat ini, yang kedua adalah daftar masuk saat ini. Kode:

(«O

Penjelasan:

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

Menggunakan pengodean CP-1252.

Adnan
sumber
2

Mathematica, 17 11 byte

Tr@#-Tr@#2&

Cukup sederhana.

LegionMammal978
sumber
2

Gangguan Umum, 40

(lambda(x y)(-(reduce'+ x)(reduce'+ y)))
coredump
sumber
2

Perl 6 , 11 byte

*.sum-*.sum

Pemakaian:

# give it a lexical name
my &code = *.sum-*.sum;

say code [1, 2, 3], [1, 2]; # 3
say code [4, 5, 6], [7, 8]; # 0
say code [5, 7, 3, 4, 5, 2], [8, 4, 5, 2, 1]; # 6
Brad Gilbert b2gills
sumber
2

Python 3, 24 byte

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

atau

Python 2, 19 byte

print sum(a)-sum(b)

tergantung apakah saya harus mencetak hasilnya atau hanya membuat fungsi yang mengembalikannya.

tpvasconcelos
sumber
1

ES6, 39 byte

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

Karena saya ingin menggunakannya reduceRight.

Neil
sumber
1

Python 2, 30 byte

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

Pyth, 6 byte

-.*sRQ

Penjelasan

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

Coba di sini

Biru
sumber
1

K5, 5 byte

-/+/'

Selisih lebih dari ( -/) jumlah lebih dari ( +/) masing-masing (' ).

Beraksi:

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

Pyth, 5 byte

-FsMQ

Cobalah online. Suite uji.

Map sum pada kedua daftar input, lalu Fpengurangan lama ( -).

Ini juga dapat ditulis sebagai -sQsE, yang mengambil daftar pada dua baris.

PurkkaKoodari
sumber
0

𝔼𝕊𝕄𝕚𝕟, 5 karakter / 7 byte

⨭î-⨭í

Try it here (Firefox only).

Wut.

Penjelasan

sum(input1) - sum(input2)

Mama Fun Roll
sumber
0

Common Lisp REPL, SBCL 28 24 bytes

tulis ini ke dalam REPL:

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

kemudian tulis daftar input seperti ini:

(2 3 4)
(2 3)

Saya harap tidak apa-apa menggunakan format daftar seperti itu (alih-alih misalnya '(2 3 4)) saya menggunakan jawaban coredump sebagai formula untuk solusi saya dan kemudian mencapai efek perhitungannya dengan cara yang berbeda.

Penjelasan

Membiarkan e_1,...,e_nmenjadi elemen daftar pertama dan f_1,...,f_{n-1}menjadi elemen daftar kedua. Kami ingin mengevaluasi ekspresi. (-(+ e_1 e_2 ... e_n)f_1 f_2 ...f_{n-1}) Ini berarti mengurangi elemen dari daftar kedua dari jumlah elemen dari daftar pertama. Ekspresi yang dibutuhkan dikonstruksi seperti ini:

backqoute menghentikan evaluasi

#1= menghemat sedikit menulis, mengingat ,@(read)

,@ menghentikan efek backquote (sehingga (baca) akan dievaluasi) dan mengeluarkan elemen dari daftar.

(read) meminta input

#1# "memuat" Objek Lisp disimpan oleh #1=

#. melakukan evaluasi representasi cetak dari objek Lisp


sumber