この課題は、繰り返しに関する2チャレンジシリーズの最初の課題です。2つ目はすぐにアップします。
繰り返し(私がちょうど作っ何か)と呼ばれる言語では、無限の文字列が構成さ12345678901234567890...と、1234567890永遠に繰り返すことを。
数値を出力するには、次の構文を使用できます。
+-*/:これにより、繰り返し数字の文字列に演算子が挿入されます。- 例:
+->1+2=3(間にandを+挿入)+12+*->1+2*3=1+6=7(2つの演算子が現在使用されていることを除いて、上記と同じです)/->1/2=0(繰り返しは整数除算を使用)//->1/2/3=0/3=0(繰り返しは複数の減算と除算で「左の関連付け」を使用します)
- 各演算子は、
c' がない限り、左に1桁の数字が挿入されるように挿入されます(以下を参照)。
- 例:
c:文字列の次の数字と連結します。- 例:
c+->12+3=15(をc「継続」1し、次の数字と連結して2、を形成します12)+c->1+23=24ccc->1234
- 例:
():数字を処理するための括弧。- 例:
(c+)*->(12+3)*4=15*4=60(繰り返しは操作の順序を使用します)(c+)/c->(12+3)/45=15/45=0(cc+c)/->(123+45)/6=168/6=28
- 例:
s:番号をスキップします(無限の文字列から番号を削除します)。s+->2+3=5(sスキップ1)csc- >124(第一cconcats1と2、sスキップ3、および最終cconcats12に4)+s+->7(最初に+追加1し2てmakeに3、sスキップ3して、最後に+追加3し4てmakeに7)cs*(++)->12*(4+5+6)=12*15=180
上記の例では、無限文字列内の有限の桁数のみが使用されています。使用される桁数はと同等number of operators, concats and skips + 1です。
タスクは、繰り返しコードの文字列が与えられると、結果を出力します。
入力と出力の例は次のとおりです。
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
これはコードゴルフなので、バイト単位の最短コードが勝ちです!
仕様:
- 結果が決して上にならないことが保証され
2^31-1ます。 - また、入力がシンボルのみで構成されることも保証されます
+-*/cs()。 - 空のプログラムが出力されます
1。
@RobertFraserおっと、それは間違いでした-cは元々〜でしたが、私はそれを完全に修正していないようです。
—
clismique
@TonHospelおお、あなたはそこに良い点を持っています。「s」記号は、本質的に無限の文字列から関連付けられている数値を完全に削除するため、両方のシナリオでyesです。
—
clismique
あなたの仕様では、しかし、言う
—
Ton Hospel
s+され2+3、その最初の例として。それでもs私を悩ませ続けています。どのように+s()+拡大するのだろうか。もしそうであれば1+(2)+4、その後(の前に来る2が、sでも前に来る(一見まだスキップ3、ありません2。ただし、結果がaである場合1+(3)+4、aの効果はその後に続くsものに依存します(と比較+s+)
scである23とs+ありますか1+3?DOESはsスキップ1になりましたか2?すべての例では、オペランドの最初の操作を使用1して2...そうscでなければなりません13。
~の?私たちをぶら下げたままにしないでください。