Einführung
Bei der Erstellung eines Elektronikprojekts kann ein Schaltplan einen Widerstand mit einem ungewöhnlichen Wert (z. B. 510 Ohm) erfordern. Sie überprüfen Ihren Teilebehälter und stellen fest, dass Sie keine 510-Ohm-Widerstände haben. Aber Sie haben viele gemeinsame Werte über und unter diesem Wert. Wenn Sie Widerstände parallel und in Reihe schalten, sollten Sie in der Lage sein, den 510-Ohm-Widerstand ziemlich gut anzunähern.
Aufgabe
Sie müssen eine Funktion oder ein Programm schreiben, die bzw. das eine Liste von Widerstandswerten (Widerständen, die Sie auf Lager haben) und einen Zielwert (den Sie approximieren möchten) akzeptiert. Das Programm muss berücksichtigen:
- Einzelwiderstände
- Zwei Widerstände in Reihe
- Zwei Widerstände parallel
Das Programm sollte alle möglichen Kombinationen von 1 und 2 Widerständen aus der Bestandsliste berechnen (einschließlich zweier Kopien desselben Widerstandswerts), deren Reihen- und Parallelwiderstand berechnen und die Konfigurationen danach sortieren, wie gut sie sich dem Zielwert annähern.
Das Ausgabeformat sollte eine Konfiguration pro Zeile sein, wobei eine +
Reihe und eine |
Parallele sowie ein Leerzeichen oder ein Vorzeichen vor dem Nettowiderstand angegeben werden.
Formeln
- Der Widerstand eines Widerstands ist
R1
- Der Nettowiderstand zweier in Reihe geschalteter Widerstände beträgt
R1 + R2
- Der Nettowiderstand von zwei Widerständen parallel ist
1 / (1/R1 + 1/R2)
- Der Abstand zwischen einem angenäherten Widerstandswert und dem Sollwert kann als pseudo-logarithmische Abstand berechnet wird, nicht lineare Entfernung:
dist = abs(Rapprox / Rtarget - 1)
. Zum Beispiel ist 200 näher an 350 als an 100. - Ein besseres Entfernungsmaß ist die echte logarithmische Entfernung
dist = abs(log(Rapprox/Rtarget))
. Da dies jedoch in der ursprünglichen Frage nicht angegeben wurde, können Sie beide Messungen verwenden.
Wertung
Die Punktzahl wird gemäß den üblichen Golfregeln in Code-Zeichen gemessen. Die niedrigste Punktzahl gewinnt.
Beispiel
Wir haben die folgenden Widerstände auf Lager [100, 150, 220, 330, 470, 680, 1000, 1500, 2200, 3300, 4700]
und möchten 510
Ohm ansteuern. Das Programm sollte ungefähr wie gezeigt 143 Konfigurationen ausgeben (Sie können das Format ändern, aber sicherstellen, dass die Bedeutung leicht zu bestimmen ist):
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 diesem Beispiel wird die beste Annäherung von 510 Ohm durch 680- und 2200-Ohm-Widerstände parallel gegeben.
Bisher beste Sprache (1. Juni 2014):
- J - 70 Zeichen
- APL - 102 Zeichen
- Mathematica - 122 Zeichen
- Rubin - 154 Zeichen
- Javascript - 156 Zeichen
- Julia - 163 char
- Perl - 185 Zeichen
- Python - 270 Zeichen