pengantar
Ketika membangun sebuah proyek elektronik, sebuah skema mungkin memerlukan resistor dengan nilai yang tidak biasa (katakanlah, 510 ohm). Anda memeriksa nampan bagian Anda dan menemukan bahwa Anda tidak memiliki resistor 510-ohm. Tetapi Anda memiliki banyak nilai umum di atas dan di bawah nilai ini. Dengan menggabungkan resistor secara paralel dan seri, Anda harus dapat memperkirakan resistor 510-ohm dengan cukup baik.
Tugas
Anda harus menulis fungsi atau program yang menerima daftar nilai-nilai resistor (resistor yang Anda stok) dan nilai target (yang Anda perkirakan merupakan perkiraan). Program harus mempertimbangkan:
- Resistor individu
- Dua resistor secara seri
- Dua resistor secara paralel
Program harus menghitung semua kombinasi yang mungkin dari resistor 1 dan 2 dari daftar stok (termasuk dua salinan dari nilai resistor yang sama), menghitung hambatan seri dan paralelnya, kemudian mengurutkan konfigurasi berdasarkan seberapa baik mereka memperkirakan nilai target.
Format output harus berupa satu konfigurasi per baris, dengan +
seri yang |
menunjukkan dan paralel yang menunjukkan, dan beberapa spasi atau tanda = sebelum resistansi bersih.
Formula
- Resistansi satu resistor adalah
R1
- Resistansi bersih dari dua resistor secara seri adalah
R1 + R2
- Resistansi bersih dua resistor secara paralel adalah
1 / (1/R1 + 1/R2)
- Jarak antara nilai resistansi didekati dan nilai target dapat dihitung sebagai jarak pseudo-logaritmik, tidak linear jarak:
dist = abs(Rapprox / Rtarget - 1)
. Misalnya, 200 lebih dekat ke 350 daripada ke 100. - Ukuran jarak yang lebih baik adalah jarak logaritmik yang sebenarnya
dist = abs(log(Rapprox/Rtarget))
, tetapi karena ini tidak ditentukan dalam pertanyaan asli, Anda bebas untuk menggunakan pengukuran mana pun.
Mencetak gol
Skor diukur dalam karakter kode, per aturan golf biasa. Skor terendah menang.
Contoh
Kami memiliki resistor berikut dalam stok [100, 150, 220, 330, 470, 680, 1000, 1500, 2200, 3300, 4700]
dan ingin menargetkan 510
ohm. Program harus menghasilkan 143 konfigurasi, kira-kira seperti yang ditunjukkan (Anda dapat mengubah format, tetapi pastikan artinya mudah ditentukan):
680 | 2200 519.444
1000 | 1000 500.
150 + 330 480.
220 + 330 550.
470 470
680 | 1500 467.89
680 | 3300 563.819
100 + 470 570.
220 + 220 440.
100 + 330 430.
470 | 4700 427.273
680 | 4700 594.052
1000 | 1500 600.
470 | 3300 411.406
680 | 1000 404.762
150 + 470 620.
...
many more rows
...
2200 + 4700 6900.
3300 + 4700 8000.
4700 + 4700 9400.
Dalam contoh ini, perkiraan terbaik 510 ohm diberikan oleh resistor 680- dan 2200-ohm secara paralel.
Terbaik dari setiap bahasa sejauh ini (1 Juni 2014):
- J - 70 char
- APL - 102 char
- Mathematica - 122 char
- Ruby - 154 char
- Javascript - 156 char
- Julia - 163 char
- Perl - 185 char
- Python - 270 char