Défi
Étant donné une liste d'unités de base SI, une liste d'équations et une cible, vous devez dériver les unités de la cible en utilisant uniquement les unités de base.
Unités dérivées
De Wikipédia:
Le Système international d'unités (SI) spécifie un ensemble de sept unités de base dont dérivent toutes les autres unités de mesure SI. Chacune de ces autres unités (unités dérivées du SI) est soit sans dimension, soit peut être exprimée comme un produit des puissances d'une ou plusieurs des unités de base.
Par exemple, l'unité de surface dérivée du SI est le mètre carré (m 2 ), et l'unité de densité dérivée du SI est le kilogramme par mètre cube (kg / m 3 ou kg m -3 ).
Les sept unités de base SI sont:
- Ampère, A
- Candela, cd
- Kelvin, K
- Kilogramme, kg
- Mètre, m
- Mole, mol
- Deuxièmement, s
Exemple
Contribution
Unités de base:
d [m]
m [kg]
t [s]
Équations:
v = d/t
a = v/t
F = m*a
E = F*d
Cible:
E
Production
E [kg*m*m/s/s]
Contribution
Unités de base:
G [cd]
L [m]
y [A]
a [K]
Équations:
T = y*y/L
A = T*G
Cible:
A
Production
A [cd*A*A/m]
Règles
Les unités seront toujours données sous la forme
a [b]
Où a
sera une seule lettre alphabétique majuscule ou minuscule et b
sera une unité (un ou plusieurs caractères).
L'équation sera sous la forme
a = c
Où c
sera une expression qui n'utilisera que les unités précédemment définies et les opérateurs *
et /
.
Les pouvoirs doivent être étendus. Par exemple, l'unité de surface est officiellement m^2
, mais vous devez la représenter comme m*m
. De même pour les puissances négatives telles que la vitesse ( m*s^-1
) qui doit être représentée comme une division: m/s
. De même, les unités d'accélération, m/s^2
ou m*s^-2
, doivent être représentées comme m/s/s
.
Vous n'avez aucune annulation à effectuer. Par exemple, une sortie C*s/kg/s
est valide même si elle peut être annulée jusqu'à C/kg
.
Il n'y a pas d' ordre spécifique pour la multiplication: kg*s/m
, s/m*kg
, s*kg/m
sont tous valides (mais /m*s*kg
est invalide).
Remarque: vous n'aurez jamais à diviser par une unité dérivée.
Gagnant
Le code le plus court en octets gagne
Réponses:
Rétine ,
5048 octetsEssayez-le en ligne!
Explication
Retirez tous les signes égaux ainsi que l'espace devant eux. Qui en a besoin de toute façon ...
Ceci effectue les substitutions de quantités connues. Il correspond à plusieurs reprises à une définition de quantité (la quantité est n'importe quel caractère devant un espace et la définition la chaîne après), ainsi qu'à un endroit après la définition où cette quantité est utilisée et insère la définition de l'utilisation. Nous excluons les unités de ces correspondances (en veillant à ce qu'il n'y en ait pas
]
après la correspondance), afin de ne pas les remplacer[m]
par[[kg]]
exemple. Cette substitution est répétée jusqu'à ce que l'expression régulière ne corresponde plus (ce qui signifie qu'il ne reste plus d'utilisation d'une quantité et que toutes les lignes ont été transformées en expressions d'unités).Jetez tout sauf la dernière ligne.
Enfin, supprimez les crochets superflus. Fondamentalement, nous voulons conserver le premier
[
et le dernier]
mais rejeter tous les autres. Ces autres apparaissent toujours avec un opérateur entre les deux, donc soit comme,]*[
soit comme]/[
. Mais plus important encore, ce sont les seuls cas où a]
est suivi de deux autres caractères. Nous faisons donc correspondre tous les éléments]
avec deux caractères après eux, et les remplaçons par le deuxième de ces trois caractères pour conserver l'opérateur.la source
JavaScript (ES6),
155153152 octetsPrend les unités de base et les équations comme des tableaux de chaînes.
Afficher l'extrait de code
Explication
la source