Calculez un produit ou un rapport d'unités SI.
Par exemple, kg m / s s
(kilogramme-mètre par seconde au carré) devrait retourner N
(newton).
L'entrée sera toujours soit:
- Une liste de symboles pour les unités SI, séparés par des espaces (représentant un produit) ou
- Ce qui précède,
/
et ce qui précède (représentant un rapport).
L'entrée ne contiendra jamais d'autres caractères (tels que des littéraux numériques ou d'autres signes de ponctuation).
Vous pouvez supposer que cela sera toujours égal à une seule unité SI.
Utilisez les symboles suivants:
Base quantities:
s # second
m # meter
kg # kilogram
A # ampere
Derived quantities:
N = kg m / s s # newton
J = N m # joule
W = J / s # watt
Hz = W / J # hertz
Pa = N / m m # pascal
C = s A # coulomb
V = J / C # volt
F = C / V # farad
Ω = V / A # ohm (you may use the O symbol instead, for a penalty of +3 bytes)
S = A / V # siemens
Wb = J / A # weber
T = Wb / m m # tesla
H = Wb / A # henry
Exemples:
m => m
N m => J
J / W => s
A J / W => C
T m m => Wb
N / A m => T
V s / A => H
J S / F A => V
s / s s => Hz
Hz kg m Hz => N
Hz s / Ω => S
Wb / H => A
V Pa S s / C => Pa
N s / m Hz => kg
V A => W
s / Ω => F
J / A s A => Ω
Le code le plus court (en octets) gagne.
kg m / s s
serait en fait kilo-mètre-seconde par seconde, ou juste kilogramme-mètre. Travail de multiplication et de division LTR. Ce que vous cherchez, c'estkg m / (s s)
. Cela vaut également pour les autres exemples.1 / 2x
veut vraiment direx / 2
?Réponses:
CJam,
1841059896 octetsCe qui précède est un hexdump; il peut être inversé avec
xxd -r
.Vérifiez tous les cas de test à la fois dans l' interpréteur CJam . 1
Essai
Idée
On peut coder chaque unité u = s a m b kg c A d comme vecteur t u = (a + c - d, b, c, d) . 2
De cette façon, pour l'entrée u 1 … u n / v 1 … v m , il suffit de calculer (t u 1 +… + t u n ) - (t v 1 +… + t v m ) et de vérifier quelle unité il correspond à.
Code
1 Notez que, en raison des limitations de l'interpréteur en ligne, je ne peux pas utiliser un codage différent pour le code source et les E / S. Par conséquent, le symbole Ω apparaît comme son codage UTF-8 (Î ©). L'interpréteur Java officiel ne partage pas cette limitation.
2 Cela permet d'économiser quelques octets sur le mappage simple vers (a, b, c, d) , car il raccourcit la plage de la première coordonnée.
la source
GNU sed, 1118
Beaucoup trop long mais fait le travail.
Le score inclut +1 pour l'
-r
option de sed. Comme si c'était important ici. Le score exclut les commentaires.la source
Javascript ES6, 479 octets
Non golfé:
Exécutions de test:
la source