nadesiko3 3.2.36 → 3.2.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -202,6 +202,30 @@ const PluginSystem = {
202
202
  },
203
203
  return_none: true
204
204
  },
205
+ '連続表示': { // @引数に指定した引数を全て表示する // @れんぞく表示
206
+ type: 'func',
207
+ josi: [['と', 'を']],
208
+ isVariableJosi: true,
209
+ pure: true,
210
+ fn: function (...a) {
211
+ const sys = a.pop()
212
+ const v = a.join('')
213
+ sys.__exec('表示', [v, sys])
214
+ },
215
+ return_none: true
216
+ },
217
+ '連続無改行表示': { // @引数に指定した引数を全て表示する(改行しない) // @れんぞくむかいぎょうひょうじ
218
+ type: 'func',
219
+ josi: [['と', 'を']],
220
+ isVariableJosi: true,
221
+ pure: true,
222
+ fn: function (...a) {
223
+ const sys = a.pop()
224
+ const v = a.join('')
225
+ sys.__exec('継続表示', [v, sys])
226
+ },
227
+ return_none: true
228
+ },
205
229
  '表示ログ': { type: 'const', value: '' }, // @ひょうじろぐ
206
230
  '表示ログクリア': { // @表示ログを空にする // @ひょうじろぐくりあ
207
231
  type: 'func',
@@ -281,6 +305,22 @@ const PluginSystem = {
281
305
  return a % b
282
306
  }
283
307
  },
308
+ '偶数': { // @Aが偶数なら真を返す // @ぐうすう
309
+ type: 'func',
310
+ josi: [['が']],
311
+ pure: true,
312
+ fn: function (a) {
313
+ return (a % 2 == 0)
314
+ }
315
+ },
316
+ '奇数': { // @Aが奇数なら真を返す // @きすう
317
+ type: 'func',
318
+ josi: [['が']],
319
+ pure: true,
320
+ fn: function (a) {
321
+ return (a % 2 == 1)
322
+ }
323
+ },
284
324
  '二乗': { // @Aを二乗する // @にじょう
285
325
  type: 'func',
286
326
  josi: [['の', 'を']],
@@ -676,6 +716,23 @@ const PluginSystem = {
676
716
  return parseInt(v).toString(n)
677
717
  }
678
718
  },
719
+ '二進': { // @値Vを2進数に変換 // @にしん
720
+ type: 'func',
721
+ josi: [['を', 'の', 'から']],
722
+ pure: true,
723
+ fn: function (v) {
724
+ return parseInt(v).toString(2)
725
+ }
726
+ },
727
+ '二進表示': { // @値Vを2進数に変換して表示 // @にしんひょうじ
728
+ type: 'func',
729
+ josi: [['を', 'の', 'から']],
730
+ pure: true,
731
+ fn: function (v, sys) {
732
+ const s = parseInt(v).toString(2)
733
+ sys.__exec('表示', [s, sys])
734
+ }
735
+ },
679
736
  'RGB': { // @HTML用のカラーコードを返すRGB(R,G,B)で各値は0-255 // @RGB
680
737
  type: 'func',
681
738
  josi: [['と'], ['の'], ['で']],
@@ -314,4 +314,15 @@ describe('basic', () => {
314
314
  it('もし文で「ならば」の前の空行でエラー #1079', () => {
315
315
  cmp('A=5;もし、A > 3 ならば「OK」と表示;', 'OK')
316
316
  })
317
+ it('『増やす』『減らす』文の追加 #1145', () => {
318
+ // 増やす
319
+ cmp('A=0;Aを1増やす。Aと表示;', '1')
320
+ cmp('A=0;Aを123だけ増やす。Aと表示;', '123')
321
+ // 減らす
322
+ cmp('A=10;Aを1減らす。Aと表示;', '9')
323
+ cmp('A=10;Aを5だけ減らす。Aと表示;', '5')
324
+ // 初期化しないで使うと0になる
325
+ cmp('Aを3増やす;Aと表示;', '3')
326
+ cmp('Aを3減らす;Aと表示;', '-3')
327
+ })
317
328
  })
@@ -58,6 +58,30 @@ describe('dncl (#1140)', () => {
58
58
  it('表示エミュレート', () => {
59
59
  cmpNako('!DNCLモード\nx←10,y←20\nxと"-"とyを表示する。', '10-20')
60
60
  cmpNako('!DNCLモード\nx←10,y←20\n"("とxと","とyと")"を表示する。', '(10,20)')
61
+ cmpNako('!DNCLモード\nx←10,y←20,z←30\n"("とxと","とyと","とzと")"を表示する。', '(10,20,30)')
62
+ cmpNako('!DNCLモード\nx←10,y←20\n「<」とxと","とyと「>」を表示する。', '<10,20>')
63
+ // #1079
64
+ cmpNako('!DNCLモード\nx←10,y←20\n「<」 と x と "," と y と 「>」 を 表示する。', '<10,20>')
65
+ })
66
+ it('乱数エミュレート #1146', () => {
67
+ cmpNako('!DNCLモード\nr ← 乱数 (5,10)\nもし(rが5以上)かつ(rが10以下)ならば「OK」と表示する。', 'OK')
68
+ cmpNako('!DNCLモード\nr ← 乱数 (1,6)\nもし(rが1以上)かつ(rが6以下)ならば「OK」と表示する。', 'OK')
69
+ })
70
+ it('二進 #1146', () => {
71
+ cmpNako('!DNCLモード\nA← 二進 (9)\nAを表示する。', '1001')
72
+ cmpNako('!DNCLモード\nA← 二進 (255)\nAを表示する。', '11111111')
73
+ cmpNako('!DNCLモード\n二進で表示 (255)', '11111111')
74
+ })
75
+ it('減らす・増やす #1149', () => {
76
+ cmpNako('!DNCLモード\nsaihu←1000。syuppi←500。saihuをsyuppi減らす。saihuを表示する。', '500')
77
+ cmpNako('!DNCLモード\nsaihu←1000。syuppi←500。saihuをsyuppi増やす。saihuを表示する。', '1500')
78
+ })
79
+ it('DNCLで「もし」文の否定形が動かない #1148', () =>{
80
+ cmpNako('!DNCLモード\nkosu←1\nもし、kosu>27でないならば\n|「OK」を表示する。\nを実行する。\n', 'OK')
81
+ })
82
+ it('DNCLで後判定のループが動かない #1147', () =>{
83
+ cmpNako('!DNCLモード\nA←1\n繰り返し,\nAを表示する\nAを1増やす\nを,A>3になるまで実行する\n', '1\n2\n3')
84
+ cmpNako('!DNCLモード\nA←1\n繰り返し,\nAを表示する\nAを1だけ増やす\nを,A>3になるまで実行する\n', '1\n2\n3')
61
85
  })
62
86
  })
63
87
 
@@ -143,4 +143,7 @@ describe('lex_test', () => {
143
143
  cmp('もし、3=3ならば \n『OK』と表示;違えば;「NG」と表示;ここまで。', 'OK')
144
144
  cmp('もし、3=3ならば \n『OK』と表示;違えば;「NG」と表示;ここまで。', 'OK')
145
145
  })
146
+ it('助詞の前後に空白があるとエラーになる問題 #1079', () => {
147
+ cmp('x=1;x と 2 と "3" を連続表示', '123')
148
+ })
146
149
  })
@@ -595,4 +595,8 @@ describe('plugin_system_test', () => {
595
595
  cmp('3の二乗を表示', '9')
596
596
  cmp('2の3のべき乗を表示', '8')
597
597
  })
598
+ it('『偶数』『奇数』 #1146', () => {
599
+ cmp('もし4が偶数ならば「OK」と表示。', 'OK')
600
+ cmp('もし3が奇数ならば「OK」と表示。', 'OK')
601
+ })
598
602
  })