次の演算子を定義します。
マンハッタンの加算 a + M b(1桁の数字の場合)は、bをaに連結した結果です。したがって、a + M b = 10a + bです。したがって、一般演算子+ Mは次のように定義されます。
a + M b = 10a + b
マンハッタン減算 a – M b(1桁の数字の場合)は、aから最後のbを削除した結果です。したがって、演算子– Mは、擬似コードで次のように定義されます。
a – M b = a最後のbを削除
マンハッタン乗算 a× M bは、aのbのすべてのインスタンスをbのbインスタンスに置き換えた結果です。エルゴ、× Mは擬似コードで次のように定義されます。
a× M b = a-> s / b / <b bのコピー> / g
マンハッタン部門 a÷ M bは、× Mで定義されます。
1÷ M b = bの最初の文字 a÷ M b = a× M(1÷ M b)
これらすべてを念頭に置いて、次の演算子(つまりa + b
、not a b +
または+ a b
)を使用する中置式を評価するインタープリターを作成します
+ Addition
- Subtraction
/ Division
* Multiplication
*M Manhattan Multiplication
/M Manhattan Division
+M Manhattan Addition
-M Manhattan Subtraction
各マンハッタン演算子には、通常の演算子よりも高い優先順位があります。
テストケース:
> 5 +M 10 + 3
63 // 5*10 + 10 + 3 => 60 + 3
> 10 *M 2
10 // no 2s in 10
> 10 *M 1
10 // one 1 in 10 replaced once
> 23 *M 3
2333 // 23 has one 3, which is replaced with three 3s
> 23 *M 2
223 // 23 has one 2, which is replaced with two 2s
> 232 *M 2
22322 // 232 has two 2s, which are replaced with two 2s
> 232 *M 23
23...(23 times)...232 // ...
> 123 *M 2 * 3
3669 // 1223 * 3 => 3669
> 5 + 3 +M 2
37 // 5 + (3 +M 2) => 5 + 32 => 37
> 150 /M 3
150 // 150 ÷M 3 => 150 ×M 3 => 150
> 150 /M 53
1555550 // 150 ÷M 53 => 150 ×M 5 => 1555550
> 50 -M 0
5
> 500 -M 0
50
> 5234 -M 5
234
> 12 +M 633 *M 3
6333453 // = 12 +M 6333333 = 120 + 6333333 = 6333453
これはコードゴルフですであるため、バイト単位の最短プログラムが優先されます。
リーダーボード
これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。
回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。
# Language Name, N bytes
N
提出のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。
# Perl, 43 + 2 (-p flag) = 45 bytes
言語名をリンクにして、リーダーボードスニペットに表示することもできます。
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
232 ×M 23
等しいの23232
ですか?23コピーの23
後にa が続くべきではない2
でしょうか?
×
と÷
の代わりに、ASCII*
と/
?