Hukum Ohm memberi tahu kita bahwa arus (I) dalam amp yang mengalir melalui resistansi (R) dalam ohm ketika tegangan (V) diterapkan melaluinya diberikan sebagai berikut:
V = I / R
Demikian pula daya (P) dalam watt yang dihamburkan oleh hambatan itu diberikan oleh:
P = V * I
Dengan penataan ulang dan penggantian, rumus dapat diturunkan untuk menghitung dua dari jumlah ini ketika salah satu dari dua lainnya diberikan. Rumus ini diringkas sebagai berikut (perhatikan gambar ini menggunakan E
bukan V
untuk volt):
Diberikan input dari dua kuantitas ini dalam sebuah string, output dua lainnya.
- Nomor input akan berupa desimal dalam format apa pun yang sesuai untuk bahasa Anda. Ketelitian harus minimal 3 angka desimal. ( IEEE 754-2008 binary32 float sudah cukup.)
- Setiap nomor input akan diakhiri dengan unit. Ini akan menjadi salah satu dari
V A W R
untuk Voltage, Ampere, Daya dan Perlawanan (atau huruf kecil setara) Selain itu, Anda dapat menggunakanΩ
bukanR
. Unit tidak akan memiliki awalan desimal (Kilo, mili-, dll). - Dua kuantitas input akan diberikan dalam urutan apa pun dalam satu string, dipisahkan oleh spasi tunggal.
- Jumlah input akan selalu bilangan real lebih besar dari 0.
- Output akan berada dalam format yang sama dengan input.
- Batasan penyelesaian persamaan dilarang.
Contoh Input
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Output yang Sesuai
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Perlu dicatat bahwa solusi untuk tantangan ini secara efektif adalah inversi sendiri. Dengan kata lain, jika Anda menerapkan solusi untuk input A B
dan mendapatkan output C D
, kemudian menerapkan solusi untuk input C D
, maka output harus A B
lagi, meskipun mungkin rusak dan terganggu karena pembulatan FP. Jadi, uji input dan output dapat digunakan secara bergantian.
sumber
Jawaban:
Ruby 171 byte
Input sebagai argumen fungsi. Output ke stdout dengan trailing space (dapat direvisi jika perlu.)
Penjelasan
Semua rumus dapat diekspresikan dalam bentuk di
b**x*d**y
mana b & d adalah dua nilai input dan x & y adalah kekuatan. Untuk alasan bermain golf, ekspresi(b**x*d**y)**0.5
akhirnya disukai karena itu berarti x dan y menjadi bilangan bulat dalam rentang -4 hingga 4.Tabel berikut menunjukkan ekspresi yang diperlukan (input diasumsikan diurutkan berdasarkan abjad) dan nilai yang dikodekan untuk kekuatan. Di mana x dan y adalah kekuatan dua kali lipat, mereka dikodekan sebagai
(x+4)+(y+4)*9+9
atau setara(x+4)+(y+5)*9
. Ini menempatkan semua pengkodean dalam rentang ASCII yang dapat dicetak. Operator listrik dihilangkan dari formula untuk singkatnya.n
adalah semacam checksum yang dibuat dari simbol unit input; dapat mengambil nilai 0,1,2,4,5,6 (3 tidak digunakan.)Tidak digabungkan dalam program uji
Keluaran
sumber
Python 3,
329347343339326305267251249245237 byteIni sangat kembung. Pasti masih banyak golf yang harus dilakukan.
Sunting:
Memperbaiki sementara output. Untuk beberapa alasan,return' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
menolak untuk bekerja dengan benar.Edit: Dijatuhkan
eval
.Fungsi ini sekarang meminjam bagian dari jawaban Tingkat Sungai St ini . Saya mengubah
ops
kamus, pertama ke kamus eksponen dimodifikasiexponent*2+4
untukb**((p-4)/2) * d**((q-4)/2)
, sehingga setiapp
danq
akan menjadi nomor satu digit. Misalnya,,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
dan hasilnya akan ada66
di kamus.Kemudian, saya mengubah kamus menjadi string
z
dengan eksponen yang dimodifikasi dan unit yang diperlukan dalam garis dan dalam urutan tertentu. Pertama, nilai ASCII dari setiap karakter diARVW
mod 10 adalah5, 2, 6, 7
. Ketika salah satu dari dua nilai ini ditambahkan, mereka memberikan angka unik mod 10. Dengan demikian, setiap kombinasi dua karakter dapat diberi nomor unik dengan(ord(x[0]) + ord(y[10] + 3) % 10
pemberianAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(sangat mirip dengan checksum Lever River St). Mengatur eksponen yang dimodifikasi agar berada dalam urutan ini, yaitu[AR] [RV] [RW] [blank] [AV] [AW] [VW]
, memungkinkanz
untuk diakses secara efisien (dalam hal byte).Sunting: Memotong pemahaman daftar di bawah
return
. Golf definisim
.Kode:
Tidak Disatukan:
sumber
Python 3,
193187 byteCobalah online
Mengubah input formulir
<value> <unit> <value> <unit>
menjadi pernyataan penugasan. Kemudian, gunakaneval
pada setiap rumus, dengantry/except
mengabaikan kesalahan dari yang variabelnya belum ditetapkan.sumber