Das Ohmsche Gesetz besagt, dass der Strom (I) in Ampere, der durch einen Widerstand (R) in Ohm fließt, wenn eine Spannung (V) daran angelegt wird, wie folgt angegeben ist:
V = I / R
In ähnlicher Weise ist die Leistung (P) in Watt, die durch diesen Widerstand abgegeben wird, gegeben durch:
P = V * I
Durch Umlagerung und Substitution können Formeln abgeleitet werden, um zwei dieser Größen zu berechnen, wenn eine der beiden anderen gegeben ist. Diese Formeln sind wie folgt zusammengefasst (beachten Sie, dass dieses Bild E
anstelle von V
Volt verwendet wird):
Bei einer Eingabe von zwei dieser Größen in einer Zeichenfolge geben Sie die anderen beiden aus.
- Die eingegebenen Zahlen sind Dezimalzahlen in dem für Ihre Sprache geeigneten Format. Die Genauigkeit sollte mindestens 3 Dezimalstellen betragen. ( IEEE 754-2008-Binary32-Floats sind ausreichend.)
- Jede eingegebene Nummer wird mit einer Einheit versehen. Dies ist einer der
V A W R
Werte für Spannung, Stromstärke, Leistung und Widerstand (oder der entsprechende Kleinbuchstabe). Zusätzlich können SieΩ
anstelle von verwendenR
. Die Einheiten haben keine Dezimalpräfixe (Kilo-, Milli- usw.). - Die beiden Eingabegrößen werden in beliebiger Reihenfolge in einer Zeichenfolge angegeben, die durch ein einzelnes Leerzeichen getrennt ist.
- Eingabegrößen sind immer reelle Zahlen größer als 0.
- Die Ausgabe erfolgt im gleichen Format wie die Eingabe.
- Integrierte Funktionen zum Lösen von Gleichungen sind nicht zulässig.
Beispieleingaben
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Entsprechende Ausgänge
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Es sollte beachtet werden, dass Lösungen für diese Herausforderung effektiv invers sind. Mit anderen Worten, wenn Sie eine Lösung auf die Eingabe anwenden A B
und die Ausgabe abrufen C D
, und dann eine Lösung auf die Eingabe anwenden C D
, sollte die Ausgabe A B
erneut erfolgen, wenn auch möglicherweise nicht in Ordnung und aufgrund von FP-Rundungen gestört. Daher können Testein- und -ausgänge austauschbar verwendet werden.
quelle
Antworten:
Ruby 171 Bytes
Eingabe als Funktionsargument. Ausgabe auf stdout mit nachgestelltem Leerzeichen (kann bei Bedarf überarbeitet werden.)
Erläuterung
Alle Formeln können in der Form ausgedrückt werden, in der
b**x*d**y
b & d die beiden Eingabewerte und x & y Potenzen sind. Aus Golfgründen wurde der Ausdruck(b**x*d**y)**0.5
schließlich bevorzugt, da er bedeutet, dass x und y ganze Zahlen im Bereich von -4 bis 4 sind.Die folgende Tabelle zeigt die erforderlichen Ausdrücke (Eingaben werden alphabetisch sortiert angenommen) und die codierten Werte für die Potenzen. Wenn x und y die doppelten Potenzen sind, werden sie als
(x+4)+(y+4)*9+9
oder gleichwertig codiert(x+4)+(y+5)*9
. Dadurch werden alle Codierungen in den druckbaren ASCII-Bereich versetzt. Der Kürze halber sind in den Formeln die Netzbetreiber weggelassen.n
ist eine Art Prüfsumme, die aus den Symbolen der Eingabeeinheit gebildet wird; es kann die Werte 0,1,2,4,5,6 annehmen (3 wird nicht verwendet.)Ungolfed im Testprogramm
Ausgabe
quelle
Python 3,
329347343339326305267251249245237 BytesDas ist ziemlich aufgebläht. Es gibt definitiv noch viel zu golfen.
Bearbeiten:
Die Ausgabe wurde vorübergehend korrigiert. Aus irgendeinem Grundreturn' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
weigert sich, richtig zu arbeiten.Bearbeiten: Abgelegt
eval
.Diese Funktion leiht jetzt Teile der Antwort von Level River St aus . Ich habe das
ops
Wörterbuch zunächst in ein Wörterbuch mit modifizierten Exponentenexponent*2+4
für geändertb**((p-4)/2) * d**((q-4)/2)
, so dass jedesp
und jedeq
eine einstellige Zahl wäre. Zum Beispiel,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
und das Ergebnis wäre66
im Wörterbuch.Dann habe ich das Wörterbuch in eine Zeichenfolge
z
mit den geänderten Exponenten und den Einheiten umgewandelt, die in einer Zeile und in einer bestimmten Reihenfolge benötigt werden. Erstens ist der ASCII-Wert jedes Zeichens inARVW
Mod 105, 2, 6, 7
. Wenn zwei dieser Werte addiert werden, erhalten sie eine eindeutige Nummer mod 10. Somit kann jeder zweistelligen Kombination eine eindeutige Nummer(ord(x[0]) + ord(y[10] + 3) % 10
zugewiesen werdenAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(sehr ähnlich der Prüfsumme von Lever River St). Durch Anordnen der modifizierten Exponenten in dieser Reihenfolge[AR] [RV] [RW] [blank] [AV] [AW] [VW]
kannz
effizient (in Bytes) auf diese zugegriffen werden.Edit: Golfed das Listenverständnis unter
return
. Golfed die Definition vonm
.Code:
Ungolfed:
quelle
Python 3,
193187 BytesProbieren Sie es online aus
Konvertiert die Eingabe des Formulars
<value> <unit> <value> <unit>
in Zuweisungsanweisungen. Verwenden Sie danneval
für jede Formel,try/except
wobei Sie die Fehler derjenigen ignorieren, für die die Variablen nicht zugewiesen wurden.quelle