ウィキペディアの記事から:
位置算術(ラテン算術localis)は、加算的(非位置)2進数字システムであり、John Napierが論文Rabdology(1617)の計算手法として、記号的およびチェス盤のようなグリッド上で探索しました。
何?
ロケーション数字は、アルファベットの文字を使用して数字を書く方法です。
バイナリ表記はまだ標準化されていなかったため、Napierはロケーション番号と呼ばれるものを使用してバイナリ数を表しました。Napierのシステムは、符号値表記を使用して数値を表します。英語のアルファベットの連続した文字を使用して、2の累乗を表します。a = 2 ^ 0 = 1、b = 2 ^ 1 = 2、c = 2 ^ 2 = 4、d = 2 ^ 3 = 8、e = 2 ^ 4 = 16など。
例
ab 基数10で= 1 + 2 = 3
aabb = 10 + 1 + 1 + 2 + 2 = 6
文字の任意の2つのインスタンスをより高いインスタンスに置き換えるaabbことで短縮できることに注意してくださいbc。
添加
2つの数値を連結して単純化します。
acd+ bde= acdbde= abcdde= acebe= abcf= 3910を底
減算
減算の両方の部分に等しく現れる数字をすべて削除します。エキスパンド(変換bにaa必要であるかもしれません)
abde- ad= be=基数10の18
乗算
これは少し難しいです。
acd(13)にdef(56)を掛けたいとしましょう。最初にacd垂直に配置します:
a
c
d
次にdef、最初の後に追加しますa:
a def
c
d
ここで、cはaよりアルファベットの2桁遅い位置にあるのでdef、makeにアルファベットの2桁を追加しますfgh。それが2行目に追加されます。
a def
c fgh
d
最後に、dはアルファベットのcより1桁遅い位置にあるためfgh、makeにアルファベットの1桁を追加しますghi。それが3行目に追加されます。
a def
c fgh
d ghi
次に、右の合計を取ります:def+ fgh+ ghi= deffgghhi= deggghhi= deghhhi= deghii= deghj(728)
乗算の別の例
入力:
bc * de
最初:
b
c
それから
b ef
c
それから
b ef
c fg
ef最初の行に書き留めたことに注意してください。それだからbcと始まりb、そしてb私たちがシフトする必要があるので、アルファベットの二文字であるdeことになるので、1つの文字でef。
それから
ef+fg
出力:
eh
分割
非常に複雑になる可能性があるため、これはこの課題の一部ではありません。
あなたの実際の挑戦
プログラムまたは関数は、次のような文字列として入力を受け取る必要があります。
a + b
そして、出力する必要があります:
ab
もちろん、あなたのプログラムや機能には、事業者のいずれかに任意の長さ(あなたの言語の文字列や入力上限まで)の数字をサポートしなければならない+、-または*。さらにいくつかの例:
入力:
ab + bd
出力:
acd
入力:
d - ab
出力:
ac
入力:
ab * cd
出力:
cf
ノート:
- 出力の文字の順序は重要ではありませんが、入力の数字の文字の順序は昇順(aの前)であると常に仮定できます。
- 入力は末尾の改行で、出力は末尾の改行で取得できます。
- あなたはありませんのリストとして入力を取る
ab、*とbdのためにab * bd。 - 英語のアルファベットが使用されます(
abcdefghijklmnopqrstuvwxyz) - 出力を簡素化する必要があります(
aa許可されていません、b必須です) - 入力が簡略化されるであろう(
b+cなく、aa+bbまたはaa+aaaa) - あなたは前にスペースとオペレータを(必要な場合があり
+、-または*)、またはあなたはどれがないように要求することができます。 - 入力ごとに1つの演算子のみが存在します。
- 出力と入力が2 ^ 27-1(
abcdefghijklmnopqrstuvwxyz)を超えることはないと想定できます。 - これはcode-golfなので、バイト単位の最短回答が勝ちです!
bc*de==efghが、そうでefghはあり240ません144
bc*deあるべきeh
d is 2 positions later in the alphabet than cこのライトは?そうではありません1か?That is added to the second row.同じ文章で、そうではありませんthirdか?