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 aabbpuede acortarse bcreemplazando 2 instancias de una letra por una superior.
Adición
Simplemente concatena los dos números y simplifica.
acd+ bde= acdbde= abcdde= acebe= abcf= 39en base 10
Sustracción
Simplemente elimine todos los dígitos que aparecen igualmente en ambas partes de la resta. Puede ser necesario expandir (convertir ba 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 acdverticalmente:
a
c
d
Luego agrega defdespué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 defpara 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 fghpara 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 efen la primera línea. Esto se debe a que bccomienza con by bes la segunda letra del alfabeto, por lo que debemos cambiar de1 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,*ybdparaab * bd. - Se usa el alfabeto inglés (
abcdefghijklmnopqrstuvwxyz) - Su salida debe ser simplificada (
aano está permitido,bes obligatorio) - La entrada se simplificará (
b+c, noaa+bboaa+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==efghpero no lo efghes240144
bc*dedebería sereh
d is 2 positions later in the alphabet than ces este wright? no debería ser1?That is added to the second row.en la misma oración, ¿no debería ser asíthird?