Dalam fisika, muatan listrik seperti mengusir, dan muatan yang tidak seperti menarik.
Energi potensial antara dua satuan muatan yang dipisahkan oleh jarak d
adalah 1/d
untuk muatan sejenis dan -1/d
untuk muatan tidak sama. Energi potensial dari sistem muatan adalah jumlah energi potensial di antara semua pasangan muatan.
Tantangan
Tentukan energi potensial sistem muatan unit yang diwakili oleh string.
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
Memasukkan
Sebuah multiline string yang tak kosong, hanya terdiri dari +
, -
,
dan baris baru, dengan setiap baris lebar konstan. The +
dan -
mewakili tuduhan +1 dan -1 masing-masing. Misalnya, string berikut:
+ -
+
(mempertimbangkan kiri atas sebagai asal) mewakili sistem dengan muatan positif pada (4,0) dan (1, -1) dan muatan negatif pada (6,0).
Atau, Anda dapat mengambil input sebagai daftar baris.
Keluaran
Bilangan real yang ditandatangani mewakili energi potensial dari sistem biaya. Keluaran harus benar untuk empat angka penting atau 10 -4 , mana yang lebih longgar.
Kasus uji:
-
Haruskah output 0
. Tidak ada pasangan biaya untuk mengusir atau menarik, dan ruang putih tidak mengubah apa pun.
+
-
Hanya ada dua tuduhan; mereka 1 unit jauhnya dalam arah vertikal dan 2 unit jauhnya dalam arah horizontal, sehingga jarak mereka adalah sqrt (5). Output harus -1 / sqrt (5) = -0.447213595
.
+ -
- +
Harus memberi -2.001930531
.
- -- -+ - - -+-++-+
+-- + +-- + ++-++ -
---++-+-+- -+- - +-
-- - -++-+ --+ +
- + --+ ++-+ +-
-- ++- + + -+--+
+ +++-+--+ +--+++ +
-+- +-+-+-+ -+ +--+
- +-+- + ---+
- - ++ -+- --+--
Harus memberi -22.030557890
.
---+--- ++-+++- -+ +
-+ ---+++-+- +- + +
---+-+ - ---- +-- -
- + +--+ -++- - -
--+ - --- - -+---+ -
+---+----++ - + +
-+ - ++-- ++- -+++
+----+- ++-+-+ -
++- -+ -+---+ -- -+
+-+++ ++-+-+ -+- +-
Harus memberi 26.231088767
.
Jawaban:
Pyth, 34 byte
Demonstrasi
Pertama, kami mengonversi setiap karakter menjadi +1 untuk
+
, -1 untuk-
, dan 0 untuk. Kemudian, setiap angka dianotasi dengan posisinya dalam matriks. Pada titik ini, kami memiliki matriks yang terlihat seperti:
Kode yang mencapai titik ini adalah
.e+RkCUBxL" +"b.z
Kemudian, kami meratakan matriks ini ke dalam daftar dan mengambil semua pasangan yang memungkinkan, dengan
.cs ... 2
.Kemudian, ia menemukan jarak antara pasangan dengan
.atMd
, dan tanda potensi dengan*FhMd
, bagi, dan jumlah.sumber
CJam, 51 karakter
Menghitung semua pasangan, memfilter
Inf/NaN
dan membaginya menjadi dua:Atau, filter koordinat terlebih dahulu sehingga kami menghitung setiap pasangan satu kali dan tidak mengalami
Inf/NaN
:Penjelasan (lama)
sumber
Haskell,
149144 byteContoh penggunaan:
f
adalah daftar semua tiga kali lipat(x-coord, y-coord, unit charge)
.g
menghitung energi potensial untuk semua kombinasi dari dua kali lipat seperti yang tidak sama, menjumlahkannya dan membagi hasilnya dengan2
.sumber
Ruby, 133
Mempertahankan susunan biaya sebelumnya dalam bentuk tupel
[charge, location(complex number)]
dan membandingkan setiap tagihan baru dengan daftar ini, sebelum menambahkannya ke daftar.Semua spasi di input diganti dengan koma. Ini memungkinkan penugasan berikut dengan mengurangi 44 dari kode ascii mereka:
Fakta bahwa program dianggap
+
sebagai -1 dan-
menjadi +1 tidak ada bedanya dengan hasil akhir. Fakta bahwa program ini berupaya menghitung pengaruh biaya 0 untuk spasi tidak ada bedanya, selain memperlambatnya sedikit :-)Tidak digabungkan dalam program uji
sumber
MATL , 39
42byteBekerja dalam rilis saat ini (5.1.0) . Kompiler berjalan di Matlab atau Oktaf.
Setiap baris adalah input terpisah. Akhir ditandai dengan memasukkan garis kosong.
Contohnya
Penjelasan
sumber
Lua,
293255246228 BytesAduh, 228 byte ... Saya mungkin bisa bermain golf ini secara signifikan, tapi saya akan mempostingnya di sini untuk saat ini. Mungkin perbarui nanti malam dengan beberapa renungan lagi dan (semoga) beberapa perbaikan panjangnya.
Tidak disatukan
Perbarui 255 Bytes: Dihapus dua bawah lama untuk loop, pemrosesan sekarang dilakukan sebagai string ditambahkan ke array string
Perbarui 246 Bytes: Diganti
c=="+"or"-"==c
denganc>" "
sesuai saran nimi. Ide bagus, terima kasih!Perbarui 228 Bytes: Jika pernyataan bisa dihapus sepenuhnya dengan memasukkan dalam tabel setelah untuk loop, menyimpan beberapa byte.
sumber
Mathematica 223 byte
Masih bermain golf.
Kasus uji terakhir:
sumber