この課題は、2018年5月の「Language of the Month」イベントの一環として、MATL言語の機能の一部に関連しています。 関連する課題:関数クリップボード:貼り付け。
前書き
MATLには、値を保存(コピー)して後で取得(貼り付け)できるクリップボードがいくつかあります。一部のクリップボードは自動です。つまり、特定のイベントによってコピーが自動的にトリガーされます。この課題は、関数入力クリップボードまたは単に関数クリップボードと呼ばれる自動クリップバーの1つに焦点を当てています。
このクリップボードは、通常の入力取得機能への4つの最新の呼び出しへの入力を保存します。通常の関数は、MATLで最も一般的なタイプの関数です。入力取得は、関数が少なくとも1つの入力を取得することを意味します(入力を取得しない関数は、関数クリップボードによって考慮されません)。
これは、2つの通常の関数を使用する次の例で最もよく説明されます。
+
、スタックから2つの数値をポップし、それらの合計をプッシュします。U
、1つの数字をポップし、その正方形をプッシュします。
例1:
3 2 + 6 + 12 4 U + +
結果を生成し39
ます。コードは次のように解釈されます。
3
または12
スタックにプッシュされるなどの数値リテラル+
入力をポップし、出力をスタックにプッシュするなどの関数。
関数呼び出しは、時系列で次のとおりです。
3 2 +
与える5
5 6 +
与える11
4 U
与える16
12 16 +
28
11 28 +
与える39
。
クリップボードは、4つのリストのリストとして表示できます。各内部リストには、関数呼び出しへの入力が含まれ、最新の呼び出しが最初にあります。各内部リスト内では、入力は元の順序になっています。
そのため、コードを実行した後のクリップボードの内容は次のとおりです(Python表記):
[[11, 28], [12, 16], [4], [5, 6]]
例2:
10 20 U 30 +
数字10
を430
スタックに残します。スタックは、プログラムの最後に下から上に表示されます。
関数呼び出しは
20 U
与える400
400 30 +
与える430
関数呼び出しは2つしかなかったため、クリップボードを定義する内部リストの一部は空になります。また、どのように10
関数への入力として使用されていないかに注意してください。
したがって、コード実行後のクリップボードの内容は次のとおりです。
[[400, 30], [20], [], []]
例3(無効):
10 20 + +
2番目への入力+
が欠落しているため、無効と見なされます(MATLでは、これは暗黙的にユーザー入力をトリガーします)。
チャレンジ
入力:数字リテラルを含む文字列S+
とU
、スペースで区切られた。
出力:文字列Sを評価した後の関数クリップボードの内容。
明確化:
- これらの機能を表すために、数字以外の2つの一貫した記号を使用できます。また、スペースの代わりに、一貫性のある記号をセパレータとして使用できます。
- 示されている2つの機能のみが考慮されます。
- 入力文字列には、少なくとも1つの数値リテラルと少なくとも1つの関数が含まれます。
- すべての数値は正の整数で、場合によっては2桁以上です。
- 例2のように、一部の数値リテラルはどの関数でも使用されない可能性があります。
- 入力は、追加の番号を必要とせずに有効なコードであることが保証されています。したがって、例3のような文字列は発生しません。
- 出力の末尾の空の内部リストは省略できます。したがって、例2の結果は次のようになります。
[[400, 30], [20]]
- 合理的で明確な出力形式であれば受け入れ可能です。たとえば、内部セパレータとしてカンマ、外部セパレータとしてセミコロンを含む文字列:
400,30;20;;
。
追加のルール:
入出力は合理的な手段で取ることができます。
すべてのプログラミング言語でプログラムまたは機能を使用できます。標準的な抜け穴は禁止されています。
バイト単位の最短コードが優先されます。
テストケース
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M
ですか?
M
。「貼り付け」チャレンジでそれをやります
[[28, 11], [16, 12], [4], [6, 5]]
最初の例の有効な出力はありますか?