Dalla voce di Wikipedia :
L'aritmetica della posizione (latino arithmeticæ localis) è il sistema numerico binario additivo (non posizionale), che John Napier esplorò come tecnica di calcolo nel suo trattato Rabdology (1617), sia simbolicamente che su una griglia simile a una scacchiera.
Che cosa?
I numeri di posizione sono un modo di scrivere numeri usando le lettere dell'alfabeto.
La notazione binaria non era ancora stata standardizzata, quindi Napier usò quelli che chiamava numeri di posizione per rappresentare numeri binari. Il sistema di Napier utilizza la notazione valore-segno per rappresentare i numeri; utilizza lettere successive dell'alfabeto inglese per rappresentare potenze successive di due: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 e così via.
Un esempio
ab
= 1 + 2 = 3 nella base 10
aabb
= 1 + 1 + 2 + 2 = 6 nella base 10
Si noti che aabb
può essere abbreviato bc
sostituendo qualsiasi 2 istanze di una lettera con una più alta.
aggiunta
Basta concatenare i due numeri e semplificare.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
nella base 10
Sottrazione
Basta rimuovere tutte le cifre che appaiono allo stesso modo in entrambe le parti della sottrazione. Potrebbe essere necessario espandere (convertire b
in aa
)
abde
- ad
= be
= 18 in base 10
Moltiplicazione
Questo è un po 'più difficile.
Diciamo che vogliamo moltiplicare acd
(13) per def
(56). Per prima cosa disponi in acd
verticale:
a
c
d
Quindi aggiungi def
dopo il primo a
:
a def
c
d
Ora, c è 2 posizioni più avanti nell'alfabeto rispetto a a, quindi aggiungiamo 2 posizioni nell'alfabeto def
da fare fgh
. Viene aggiunto alla seconda riga.
a def
c fgh
d
Infine, d è 1 posizione più avanti nell'alfabeto rispetto a c, quindi aggiungiamo 1 posizione nell'alfabeto fgh
da creare ghi
. Viene aggiunto alla terza riga.
a def
c fgh
d ghi
Quindi prendi la somma del diritto: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
= deghj
(728)
Un altro esempio di moltiplicazione
Ingresso:
bc * de
Primo:
b
c
Poi
b ef
c
Poi
b ef
c fg
Si noti che abbiamo scritto ef
sulla prima riga. Questo perché bc
inizia con b
, ed b
è la seconda lettera dell'alfabeto, quindi dobbiamo spostare de
di 1 lettera, così diventa ef
.
Poi
ef+fg
Produzione:
eh
Divisione
Questo non fa parte di questa sfida, perché può diventare molto complessa.
La tua vera sfida
Il tuo programma o funzione deve accettare input come una stringa simile al seguente:
a + b
E devi produrre:
ab
Naturalmente, il vostro programma o una funzione devono supportare i numeri di lunghezza arbitraria (fino al limite stringa o di ingresso della vostra lingua) con uno degli operatori +
, -
o *
. Alcuni altri esempi:
Ingresso:
ab + bd
Produzione:
acd
Ingresso:
d - ab
Produzione:
ac
Ingresso:
ab * cd
Produzione:
cf
Gli appunti:
- L'ordine delle lettere nell'output non ha importanza, ma puoi sempre presumere che l'ordine delle lettere nei numeri nell'input sarà crescente (a prima di z).
- È possibile accettare input con una nuova riga finale e output con una nuova riga finale.
- Si può non prendere in ingresso come un elenco di
ab
,*
ebd
perab * bd
. - Viene utilizzato l'alfabeto inglese (
abcdefghijklmnopqrstuvwxyz
) - L'output deve essere semplificato (
aa
non è consentito,b
è obbligatorio) - L'input sarà semplificato (
b
+c
, nonaa
+bb
oaa
+aaaa
) - Si può richiedere uno spazio prima e l'operatore (
+
,-
, o*
), oppure si può richiedere che ci sia nessuno. - Ci sarà un solo operatore per input.
- Si può presumere che l'output e l'input non supereranno mai 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - Questo è code-golf , quindi vince la risposta più breve in byte!
bc*de==efgh
ma non lo efgh
è240
144
bc*de
dovrebbe essereeh
d is 2 positions later in the alphabet than c
è questo wright? non dovrebbe essere1
?That is added to the second row.
sulla stessa frase, non dovrebbe esserethird
?