From 773f0dbc4b0c61d707298a3857f2c3064f719b94 Mon Sep 17 00:00:00 2001 From: kyad <53517611+kyad@users.noreply.github.com> Date: Sat, 4 Jan 2025 23:58:51 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E3=80=8CMAX=E3=80=8D=E3=80=8C=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=80=A4=E3=80=8D=E3=80=8CMIN=E3=80=8D=E3=80=8C?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=80=A4=E3=80=8D=E3=80=8CCLAMP=E3=80=8D?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/plugin_system.mts | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/core/src/plugin_system.mts b/core/src/plugin_system.mts index 943a7495..f673cfd0 100644 --- a/core/src/plugin_system.mts +++ b/core/src/plugin_system.mts @@ -576,6 +576,58 @@ export default { return a.reduce((p: any, c: any) => p + c) } }, + 'MAX': { // @2個以上の数値のうち最大値を返す。// @MAX + type: 'func', + josi: [['の'], ['と']], + isVariableJosi: true, + pure: true, + fn: function (b: number, ...a: any): number { + a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 + a.push(b) + return a.reduce((p: number, c: number) => Math.max(p, c)) + } + }, + '最大値': { // @2個以上の数値のうち最大値を返す。// @さいだいち + type: 'func', + josi: [['の'], ['と']], + isVariableJosi: true, + pure: true, + fn: function (b: number, ...a: any): number { + a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 + a.push(b) + return a.reduce((p: number, c: number) => Math.max(p, c)) + } + }, + 'MIN': { // @2個以上の数値のうち最小値を返す。// @MIN + type: 'func', + josi: [['の'], ['と']], + isVariableJosi: true, + pure: true, + fn: function (b: number, ...a: any): number { + a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 + a.push(b) + return a.reduce((p: number, c: number) => Math.min(p, c)) + } + }, + '最小値': { // @2個以上の数値のうち最小値を返す。// @さいしょうち + type: 'func', + josi: [['の'], ['と']], + isVariableJosi: true, + pure: true, + fn: function (b: number, ...a: any): number { + a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 + a.push(b) + return a.reduce((p: number, c: number) => Math.min(p, c)) + } + }, + 'CLAMP': { // @数値を下限から上限の範囲内に収めた値を返す。// @CLAMP + type: 'func', + josi: [['の', 'を'], ['から'], ['までの', 'で']], + pure: true, + fn: function (x: number, a: number, b: number): number { + return Math.min(Math.max(x, a), b) + } + }, // @敬語 'ください': { // @敬語対応のため // @ください From 482f958001d2dab3aab1f8dfbb87c50ccf62d33e Mon Sep 17 00:00:00 2001 From: kyad <53517611+kyad@users.noreply.github.com> Date: Sun, 5 Jan 2025 00:10:24 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E3=80=8CMAX=E3=80=8D=E3=80=8C=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=80=A4=E3=80=8D=E3=80=8CMIN=E3=80=8D=E3=80=8C?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=80=A4=E3=80=8D=E3=80=8CCLAMP=E3=80=8D?= =?UTF-8?q?=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/test/calc_test.mjs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/core/test/calc_test.mjs b/core/test/calc_test.mjs index 597ef08b..4a604bd4 100644 --- a/core/test/calc_test.mjs +++ b/core/test/calc_test.mjs @@ -37,6 +37,34 @@ describe('calc_test.js', async () => { it('連続演算:て-3に5を掛けて表示', async () => { await cmp('3に5を掛けて表示', '15') }) + it('MAX', async () => { + await cmp('10と20のMAXを表示', '20') + await cmp('MAX(10, 20)を表示', '20') + await cmp('MAX(10, 20, 30)を表示', '30') + }) + it('最大値', async () => { + await cmp('10と20の最大値を表示', '20') + await cmp('10と20と30の最大値を表示', '30') + await cmp('10と10の最大値を表示', '10') + }) + it('MIN', async () => { + await cmp('10と20のMINを表示', '10') + await cmp('MIN(10, 20)を表示', '10') + await cmp('MIN(5, 10, 20, 30)を表示', '5') + }) + it('最小値', async () => { + await cmp('10と20の最小値を表示', '10') + await cmp('5と10と20と30の最小値を表示', '5') + await cmp('10と10の最小値を表示', '10') + }) + it('CLAMP', async () => { + await cmp('10の20から30までのCLAMPを表示', '20') + await cmp('40を20から30でCLAMPして表示', '30') + await cmp('25の20から30までのCLAMPを表示', '25') + await cmp('CLAMP(10, 20, 30)を表示', '20') + await cmp('CLAMP(20, 20, 30)を表示', '20') + await cmp('CLAMP(30, 20, 30)を表示', '30') + }) it('配列', async () => { await cmp('a=[];a[1]=30;a[1]を表示', '30') await cmp('a=[];a【1】=30;a[1]を表示', '30') From d67587bd58952320a55c2c092fe021ccfd92c8de Mon Sep 17 00:00:00 2001 From: kyad <53517611+kyad@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:42:51 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E3=80=8CMAX=E3=80=8D=E3=80=8CMIN=E3=80=8D?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=82=A4=E3=83=AA=E3=82=A2=E3=82=B9=E3=81=AF?= =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E5=90=8D=E3=81=AE=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E3=82=92=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=99=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/plugin_system.mts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/src/plugin_system.mts b/core/src/plugin_system.mts index f673cfd0..b6d84c87 100644 --- a/core/src/plugin_system.mts +++ b/core/src/plugin_system.mts @@ -582,9 +582,8 @@ export default { isVariableJosi: true, pure: true, fn: function (b: number, ...a: any): number { - a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 - a.push(b) - return a.reduce((p: number, c: number) => Math.max(p, c)) + const sys = a.pop() + return sys.__exec('最大値', [b, ...a, sys]) } }, '最大値': { // @2個以上の数値のうち最大値を返す。// @さいだいち @@ -604,9 +603,8 @@ export default { isVariableJosi: true, pure: true, fn: function (b: number, ...a: any): number { - a.pop() // 必ず末尾に sys があるので、末尾のシステム変数を除外 - a.push(b) - return a.reduce((p: number, c: number) => Math.min(p, c)) + const sys = a.pop() + return sys.__exec('最小値', [b, ...a, sys]) } }, '最小値': { // @2個以上の数値のうち最小値を返す。// @さいしょうち