Herausforderung
Bei einer Liste von SI-Basiseinheiten, einer Liste von Gleichungen und einem Ziel müssen Sie die Einheiten des Ziels nur unter Verwendung der Basiseinheiten ableiten.
Abgeleitete Einheiten
Aus Wikipedia:
Das Internationale Einheitensystem (SI) legt einen Satz von sieben Basiseinheiten fest, von denen alle anderen SI-Maßeinheiten abgeleitet werden. Jede dieser anderen Einheiten (SI-abgeleitete Einheiten) ist entweder dimensionslos oder kann als Produkt der Potenzen einer oder mehrerer Basiseinheiten ausgedrückt werden.
Beispielsweise ist die vom SI abgeleitete Flächeneinheit der Quadratmeter (m 2 ) und die vom SI abgeleitete Dichteeinheit das Kilogramm pro Kubikmeter (kg / m 3 oder kg m –3 ).
Die sieben SI-Basiseinheiten sind:
- Ampere, A.
- Candela, cd
- Kelvin, K.
- Kilogramm, kg
- Meter, m
- Mol , Mol
- Zweitens s
Beispiel
Eingang
Basiseinheiten:
d [m]
m [kg]
t [s]
Gleichungen:
v = d/t
a = v/t
F = m*a
E = F*d
Ziel:
E
Ausgabe
E [kg*m*m/s/s]
Eingang
Basiseinheiten:
G [cd]
L [m]
y [A]
a [K]
Gleichungen:
T = y*y/L
A = T*G
Ziel:
A
Ausgabe
A [cd*A*A/m]
Regeln
Die Einheiten werden immer in der Form angegeben
a [b]
Wo a
wird ein einzelner alphabetischer Groß- oder Kleinbuchstabe sein undb
eine Einheit (ein oder mehrere Zeichen).
Die Gleichung wird in der Form sein
a = c
Wo c
wird ein Ausdruck sein, der immer nur zuvor definierte Einheiten und die Operatoren *
und verwendet/
.
Befugnisse müssen erweitert werden. Zum Beispiel ist die Flächeneinheit offiziell m^2
, aber Sie sollten dies als darstellen m*m
. Gleiches gilt für negative Potenzen wie speed ( m*s^-1
), die als Division dargestellt werden sollen : m/s
. Ebenso sollten die Einheiten für die Beschleunigung m/s^2
oder m*s^-2
dargestellt werden als m/s/s
.
Sie müssen nicht stornieren. Beispielsweise ist eine Ausgabe C*s/kg/s
gültig, obwohl sie bis auf abgebrochen werden kann C/kg
.
Es gibt keine spezifische Reihenfolge für die Multiplikation: kg*s/m
, s/m*kg
, s*kg/m
sind alle gültig (aber /m*s*kg
ist ungültig).
Hinweis: Sie müssen niemals durch eine abgeleitete Einheit dividieren.
Gewinnen
Der kürzeste Code in Bytes gewinnt
Antworten:
Netzhaut ,
5048 BytesProbieren Sie es online aus!
Erläuterung
Entfernen Sie alle Gleichheitszeichen zusammen mit dem Leerzeichen vor ihnen. Wer braucht die schon ...
Dies führt die Substitution bekannter Größen durch. Es wird wiederholt mit einer Mengendefinition (die Menge ist ein beliebiges Zeichen vor einem Leerzeichen und der Definition der Zeichenfolge danach) sowie einer Stelle nach der Definition, an der diese Menge verwendet wird, abgeglichen und die Definition für die Verwendung eingefügt. Wir schließen Einheiten aus diesen Spielen (indem sichergestellt wird, dass es keine
]
nach dem Spiel), so dass wir nicht ersetzen[m]
mit[[kg]]
zum Beispiel. Diese Ersetzung wird wiederholt, bis der reguläre Ausdruck nicht mehr übereinstimmt (was bedeutet, dass keine Verwendung einer Menge mehr vorhanden ist und alle Zeilen in Ausdrücke von Einheiten umgewandelt wurden).Verwerfen Sie alle bis auf die letzte Zeile.
Entfernen Sie zum Schluss überflüssige eckige Klammern. Grundsätzlich wollen wir das Erste
[
und das Letzte behalten,]
aber alle anderen verwerfen. Diese anderen werden immer mit einem Operator dazwischen angezeigt, also entweder als]*[
oder als]/[
. Noch wichtiger ist jedoch, dass dies die einzigen Fälle sind, in denen auf a]
zwei weitere Zeichen folgen. Wir stimmen also alle]
mit zwei Zeichen nach ihnen ab und ersetzen diese durch das zweite dieser drei Zeichen, um den Operator beizubehalten.quelle
JavaScript (ES6),
155153152 ByteNimmt Basiseinheiten und Gleichungen als Arrays von Strings.
Code-Snippet anzeigen
Erläuterung
quelle