Calcular um produto ou proporção de unidades SI.
Por exemplo, kg m / s s
(quilograma-metro por segundo ao quadrado) deve retornar N
(newton).
A entrada será sempre:
- Uma lista de símbolos para unidades SI, separadas por espaço (representando um produto) ou
- Acima,
/
e acima (representando uma proporção).
A entrada nunca conterá outros caracteres (como literais numéricos ou outra pontuação).
Você pode assumir que isso sempre será igual a uma única unidade SI.
Use os seguintes símbolos:
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
Exemplos:
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 => Ω
O código mais curto (em bytes) vence.
kg m / s s
seria na verdade quilogam-metro-segundo por segundo, ou apenas quilograma-metro. Trabalho de multiplicação e divisão LTR. O que você está procurando ékg m / (s s)
. Isso também se aplica aos outros exemplos.1 / 2x
realmente significax / 2
?Respostas:
CJam,
1841059896 bytesO acima é um hexdump; pode ser revertido com
xxd -r
.Verifique todos os casos de teste de uma vez no intérprete CJam . 1
Execução de teste
Idéia
Podemos codificar cada unidade u = s a m b kg c A d como o vetor t u = (a + c - d, b, c, d) . 2
Dessa forma, para a entrada u 1 … u n / v 1 … v m , precisamos apenas calcular (t u 1 +… + t u n ) - (t v 1 +… + t v m ) e verificar qual unidade corresponde a.
Código
1 Observe que, devido às limitações do intérprete online, não posso usar uma codificação diferente para código-fonte e E / S. Portanto, o símbolo Ω aparece como sua codificação UTF-8 (©). O intérprete oficial do Java não compartilha essa limitação.
2 Isso economiza alguns bytes no mapeamento direto para (a, b, c, d) , pois reduz o intervalo da primeira coordenada.
fonte
GNU sed, 1118
Muito longo, mas faz o trabalho.
A pontuação inclui +1 para a
-r
opção sed. Como se isso importasse aqui. A pontuação exclui comentários.fonte
Javascript ES6, 479 bytes
Ungolfed:
Execuções de teste:
fonte