diff --git a/HOW_TO_CREATE_PROBLEMS.md b/HOW_TO_CREATE_PROBLEMS.md index 6f2f428c..cbc3a199 100644 --- a/HOW_TO_CREATE_PROBLEMS.md +++ b/HOW_TO_CREATE_PROBLEMS.md @@ -126,14 +126,16 @@ class MyTurtle2 { ``` 以下のルールに従って、`java` のコードをJavaScript言語に変換して、 `instrumented` に出力してください。 -1. 静的フィールド(つまり、グローバル変数)を扱う場合、 `myGlobal.[クラス名] = { [静的フィールド名]: [初期値] };` を先頭に置くこと。例: `myGlobal.Settings = { speed: 0 };` -2. 静的メソッドは普通の関数で代替すること。 -3. 独自クラスの定義が含まれている場合、 `main` 関数を定義して、末尾で `main()` を呼び出すこと。 -4. コード中で定義しているコンストラクタの呼び出しに `// caller` が付いている場合、 `call([クラス名], [仮引数の名前のリスト])([実数名のリスト])` に書き換えること。例: `const t2 = call(MyTurtle2, 'x', 'y')(2, 2);` -5. コード中で定義している関数の呼び出しに `// caller` が付いている場合、 `call([関数名], [仮引数の名前のリスト])([実数名のリスト])` に書き換えること。例: `call(increaseSpeed)()` -6. コード中で定義しているメソッドの呼び出しに `// caller` が付いている場合、 `call([オブジェクト名].[関数名].bind([オブジェクト名]), [仮引数の名前のリスト])([実数名のリスト])` に書き換えること。例: `call(t1.moveForward.bind(t1, 'speed'))(3)` -7. `Turtle` 以外の値をローカル変数に代入する場合は `s.set([変数名], [右辺値])` を、参照する場合は `s.get([変数名])` を使うこと。 例: `i++` -> `s.set('i', s.get('i') + 1)` -8. フィールド変数は`s.set`や`s.get`を使わずに、通常通り `this.[変数名]` を使うこと。例: `this.t.前に進む();` +1. 静的フィールド(つまり、グローバル変数)を扱う場合、 `myGlobal.<クラス名> = { <静的フィールド名>: <初期値> };` を先頭に置くこと。例: `myGlobal.Settings = { speed: 0 };` +2. コードにクラス宣言が含まれている場合、先頭で `main` 関数を定義して、末尾で `main()` を呼び出すこと。 +3. 静的メソッドは普通の関数で代替すること。 +4. コード中で定義しているコンストラクタの呼び出しに `// caller` が付いている場合、 `call(<クラス名>, '仮引数の名前1', '仮引数の名前2', ...)(実引数1, 実引数2, ...)` に書き換えること。例: `const t2 = call(MyTurtle2, 'x', 'y')(2, 2);` +5. コード中で定義している関数の呼び出しに `// caller` が付いている場合、 `call(<関数名>, '仮引数の名前1', '仮引数の名前2', ...)(実引数1, 実引数2, ...)` に書き換えること。例: `call(increaseSpeed)()` +6. コード中で定義しているメソッドの呼び出しに `// caller` が付いている場合、 `call(<オブジェクト名>.<関数名>.bind(<オブジェクト名>), '仮引数の名前1', '仮引数の名前2', ...)(実引数1, 実引数2, ...)` に書き換えること。例: `call(t1.moveForward.bind(t1, 'speed'))(3)` +7. `// step` のコメントを増やしたり減らしたりせずに、そのままの形で `// step` のコメントを残すこと。 +8. すべての `// caller` のコメントを削除すること。 +9. `Turtle` 以外の値(数値・文字列・配列など)をローカル変数に代入する場合は `s.set(<変数名>, <右辺値>)` を、参照する場合は `s.get(<変数名>)` を使うこと。 例: `i++` -> `s.set('i', s.get('i') + 1)` +10. フィールド変数では `s.set` や `s.get` を使わずに、 `this.[変数名]` を使うこと。例: `this.t.前に進む();` ``` 8. Cursorの生成結果を手直しして完成させる。例: diff --git a/src/problems/problemData.ts b/src/problems/problemData.ts index 2f7e36c5..7acfcbe4 100644 --- a/src/problems/problemData.ts +++ b/src/problems/problemData.ts @@ -3659,33 +3659,30 @@ public class Main { test5: { instrumented: ` const t = new Turtle(); // step -t.forward(); -t.forward(); -t.turnRight(); -t.forward(); -t.forward(); -t.forward(); -t.forward(); +t.前に進む(); // step +t.前に進む(); // step +t.右を向く(); // step +t.前に進む(); // step +t.前に進む(); // step +t.前に進む(); // step +t.前に進む(); // step `, java: ` public class Straight { public static void main(String[] args) { var c = new Turtle(); // step - c.forward(); // step - c.forward(); // step - c.turnRight(); // step - c.forward(); // step - c.forward(); // step - c.forward(); // step - c.forward(); // step + c.前に進む(); // step + c.前に進む(); // step + c.右を向く(); // step + c.前に進む(); // step + c.前に進む(); // step + c.前に進む(); // step + c.前に進む(); // step } } `, }, test9: { - // Javaの静的フィールド(つまり、グローバル変数)を扱う場合、 `myGlobal` を使うこと。 - // 静的メソッドは普通の関数で代替すること。 - // 独自クラスを定義するコードでは `main()` 関数を定義すること。 instrumented: ` myGlobal.Settings = { speed: 0 }; diff --git a/tests/unit/traceProgram.test.ts b/tests/unit/traceProgram.test.ts index c817b965..d842a65f 100644 --- a/tests/unit/traceProgram.test.ts +++ b/tests/unit/traceProgram.test.ts @@ -463,13 +463,13 @@ public class Main { public class Straight { public static void main(String[] args) { var c = new Turtle(); - c.forward(); - c.forward(); - c.turnRight(); - c.forward(); - c.forward(); - c.forward(); - c.forward(); + c.前に進む(); + c.前に進む(); + c.右を向く(); + c.前に進む(); + c.前に進む(); + c.前に進む(); + c.前に進む(); } } `.trim(),