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.


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


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.


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.


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.)


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

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`-`)


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.



2

Gangguan Umum, 40

(lambda(x y)(-(reduce'+ x)(reduce'+ y)))

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

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.


1

ES6, 39 byte

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

Karena saya ingin menggunakannya reduceRight.


1

Python 2, 30 byte

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

1

Pyth, 6 byte

-.*sRQ

Penjelasan

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

Coba di sini


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



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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.