式の交互の側の要素を使用して数式を解くプログラムを作成します。それが行われる方法は、左から右に読むのではなく、最初の文字、最後、2番目、最後から2番目の文字を読み取ることです。これにより、評価して出力する必要がある新しい式が得られます。
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
例:
1*3/2+4-5
15*-34/+2 = -255
式が「動作しない」場合は、動作1
させるために必要な位置にaを挿入する必要があります。
いくつかの例はおそらくそれをよりよく説明します:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
サポートする必要のある演算子は+ - * /
です。括弧はありません。通常の数学のルールと「構文」が使用されているため、たとえば**
指数を意味するものではありません。(つまり、C ++ではなくMATLABスタイル)a++++1
と同等a+1
です。
疑問がある場合、有効な操作は次のとおりです。
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
ただし、以下のすべては無効です。それらを何に置き換える必要があるかが示されています。
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
ルール:
- コードは関数または完全なプログラムにすることができます
- 入力はSTDINまたは関数の引数です
- 入力は、引用符なしの
''
""
有効な数式、またはである必要があります。 - 出力は、整数、小数、または簡略化された小数として、新しい式に対する答えになります。
- 小数点以下少なくとも3桁がサポートされている必要があります。そう
1/3 = 0.333
じゃない0.33
。0.333333333
受け入れられます。 ans = ...
受け入れられます。- 先頭と末尾の改行とスペースを使用できます。
- 入力は整数のみになります
- ゼロによる除算は、エラー、NaN、Infなどを引き起こす可能性があります。数値の出力は受け入れられません。
いつものように、バイト単位の最短コードが優先されます。勝者は、チャレンジが投稿された日から1週間後に選ばれます。後で投稿された回答は、現在のリーダーより短い場合でも勝つ可能性があります。
「出力は答え[ 。。。] 単純化された小数部である必要があります...」ですから
—
猫
0/0
、式がゼロによる整数除算またはモジュロに評価された場合、単に返すことができますか?
答えがゼロによる除算を与える場合、それ
—
Stewie Griffin
x/0
は有効な出力です。不正解を出力しない限り問題ありません。エラーと「数字ではない」は定義により正しい、無限大は「十分に正しい」
念のため-evalを使用できますよね?
—
orlp
はい、評価は大丈夫です。
—
Stewie Griffin
2^64
必要がありますか?それを超えた場合、エラーまたはラップする必要がありますか?