Del artículo de Wikipedia :
La ubicación aritmética (Latin arithmeticæ localis) es el sistema de numeración binario aditivo (no posicional), que John Napier exploró como una técnica de cálculo en su tratado Rabdology (1617), tanto simbólicamente como en una cuadrícula similar a un tablero de ajedrez.
¿Qué?
Los números de ubicación son una forma de escribir números usando letras del alfabeto.
La notación binaria aún no se había estandarizado, por lo que Napier usó lo que llamó números de ubicación para representar números binarios. El sistema de Napier utiliza la notación de signo y valor para representar números; utiliza letras sucesivas del alfabeto inglés para representar potencias sucesivas de dos: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 y así sucesivamente.
Un ejemplo
ab
= 1 + 2 = 3 en base 10
aabb
= 1 + 1 + 2 + 2 = 6 en base 10
Tenga en cuenta que aabb
puede acortarse bc
reemplazando 2 instancias de una letra por una superior.
Adición
Simplemente concatena los dos números y simplifica.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
en base 10
Sustracción
Simplemente elimine todos los dígitos que aparecen igualmente en ambas partes de la resta. Puede ser necesario expandir (convertir b
a aa
)
abde
- ad
= be
= 18 en base 10
Multiplicación
Esto es un poco más difícil.
Digamos que queremos multiplicar acd
(13) por def
(56). Primero arreglas acd
verticalmente:
a
c
d
Luego agrega def
después del primero a
:
a def
c
d
Ahora, c es 2 posiciones más tarde en el alfabeto que a, así que agregamos 2 posiciones en el alfabeto def
para hacer fgh
. Eso se agrega a la segunda fila.
a def
c fgh
d
Por último, d es 1 posición más tarde en el alfabeto que c, por lo que agregamos 1 posición en el alfabeto fgh
para hacer ghi
. Eso se agrega a la tercera fila.
a def
c fgh
d ghi
Luego tomas la suma de la derecha: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
=deghj
(728)
Otro ejemplo de multiplicación.
Entrada:
bc * de
Primero:
b
c
Luego
b ef
c
Luego
b ef
c fg
Tenga en cuenta que escribimos ef
en la primera línea. Esto se debe a que bc
comienza con b
y b
es la segunda letra del alfabeto, por lo que debemos cambiar de
1 letra para que se convierta ef
.
Luego
ef+fg
Salida:
eh
División
Esto no es parte de este desafío, porque puede volverse muy complejo.
Tu verdadero desafío
Su programa o función debe tomar la entrada como una cadena que se ve así:
a + b
Y debes dar salida:
ab
Por supuesto, el programa o función debe ser compatible con los números de longitud arbitraria (hasta el límite de la cadena o de entrada de la lengua) con cualquiera de los operadores +
, -
o*
. Algunos ejemplos más:
Entrada:
ab + bd
Salida:
acd
Entrada:
d - ab
Salida:
ac
Entrada:
ab * cd
Salida:
cf
Notas:
- El orden de las letras en la salida no importa, pero siempre se puede suponer que el orden de las letras en los números en la entrada será ascendente (a antes de z).
- Puede tomar la entrada con una nueva línea final y la salida con una nueva línea final.
- Es posible que no tomar la entrada como una lista de
ab
,*
ybd
paraab * bd
. - Se usa el alfabeto inglés (
abcdefghijklmnopqrstuvwxyz
) - Su salida debe ser simplificada (
aa
no está permitido,b
es obligatorio) - La entrada se simplificará (
b
+c
, noaa
+bb
oaa
+aaaa
) - Es posible que necesite un espacio antes y el operador (
+
,-
o*
), o tal vez necesite que haya ninguna. - Solo habrá un operador por entrada.
- Puede suponer que la salida y la entrada nunca superarán 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - Este es el código de golf , por lo que gana la respuesta más corta en bytes.
bc*de==efgh
pero no lo efgh
es240
144
bc*de
debería sereh
d is 2 positions later in the alphabet than c
es este wright? no debería ser1
?That is added to the second row.
en la misma oración, ¿no debería ser asíthird
?