introduzione
Quando si costruisce un progetto di elettronica, uno schema può richiedere una resistenza di un valore insolito (diciamo, 510 ohm). Controlli il cestino delle parti e scopri di non avere resistori da 510 ohm. Ma hai molti valori comuni sopra e sotto questo valore. Combinando i resistori in parallelo e in serie, dovresti essere in grado di approssimare abbastanza bene il resistore da 510 ohm.
Compito
È necessario scrivere una funzione o un programma che accetta un elenco di valori di resistori (resistori disponibili) e un valore target (che si intende approssimare). Il programma deve considerare:
- Resistori individuali
- Due resistori in serie
- Due resistori in parallelo
Il programma dovrebbe calcolare tutte le possibili combinazioni di 1 e 2 resistori dall'elenco di serie (incluse due copie dello stesso valore di resistenza), calcolare le loro serie e resistenza parallela, quindi ordinare le configurazioni in base alla loro approssimazione al valore target.
Il formato di output dovrebbe essere una configurazione per riga, con una +
serie che |
indica e che indica il parallelo, e un po 'di spazio o un segno = prima della resistenza netta.
formule
- La resistenza di un resistore è
R1
- La resistenza netta di due resistori in serie è
R1 + R2
- La resistenza netta di due resistori in parallelo è
1 / (1/R1 + 1/R2)
- La distanza tra un valore approssimato resistenza e il valore obiettivo può essere calcolato come distanza pseudo-logaritmica, non lineare distanza:
dist = abs(Rapprox / Rtarget - 1)
. Ad esempio, 200 è più vicino a 350 che a 100. - Una misura di distanza migliore è la vera distanza logaritmica
dist = abs(log(Rapprox/Rtarget))
, ma poiché ciò non è stato specificato nella domanda originale, si è liberi di utilizzare entrambe le misurazioni.
punteggio
Il punteggio è misurato in caratteri di codice, secondo le normali regole del golf. Il punteggio più basso vince.
Esempio
Abbiamo in stock i seguenti resistori [100, 150, 220, 330, 470, 680, 1000, 1500, 2200, 3300, 4700]
e desideriamo puntare su 510
ohm. Il programma dovrebbe generare 143 configurazioni, approssimativamente come mostrato (è possibile modificare il formato, ma assicurarsi che il significato sia facilmente determinabile):
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.
In questo esempio, la migliore approssimazione di 510 ohm è data in parallelo dai resistori da 680 e 2200 ohm.
Il meglio di ogni lingua finora (1 giugno 2014):
- J - 70 caratteri
- APL - 102 caratteri
- Mathematica - 122 caratteri
- Rubino - 154 caratteri
- Javascript - 156 caratteri
- Julia - 163 caratteri
- Perl - 185 char
- Python - 270 caratteri