nadesiko3 3.7.21 → 3.7.23

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.
Files changed (212) hide show
  1. package/README.md +20 -1
  2. package/batch/command.txt +370 -334
  3. package/batch/generate_command_list.mjs +102 -0
  4. package/batch/jsplugin2text.nako3 +1 -1
  5. package/batch/pickup_command.nako3 +12 -0
  6. package/batch/search_command.mjs +34 -0
  7. package/batch/search_command.nako3 +430 -0
  8. package/core/command/snako.mts +5 -1
  9. package/core/deno/snako.ts +5 -1
  10. package/core/package-lock.json +382 -21
  11. package/core/package.json +7 -4
  12. package/core/sample/algorithms/README.md +43 -0
  13. package/core/sample/algorithms/graph/dijkstra.nako3 +47 -0
  14. package/core/sample/algorithms/graph/kruskal.nako3 +69 -0
  15. package/core/sample/algorithms/math/euclidean_gcd.nako3 +15 -0
  16. package/core/sample/algorithms/math/sieve_of_eratosthenes.nako3 +26 -0
  17. package/core/sample/algorithms/search/binary_search.nako3 +17 -0
  18. package/core/sample/algorithms/search/breadth_first_search.nako3 +33 -0
  19. package/core/sample/algorithms/search/depth_first_search.nako3 +25 -0
  20. package/core/sample/algorithms/sort/heap_sort.nako3 +37 -0
  21. package/core/sample/algorithms/sort/insertion_sort.nako3 +18 -0
  22. package/core/sample/algorithms/sort/merge_sort.nako3 +40 -0
  23. package/core/sample/algorithms/sort/quick_sort.nako3 +36 -0
  24. package/core/sample/algorithms/string/knuth_morris_pratt.nako3 +50 -0
  25. package/core/sample/algorithms/string/run_length_encoding.nako3 +25 -0
  26. package/core/src/nako3.mts +178 -614
  27. package/core/src/nako_basic_plugins.mts +39 -0
  28. package/core/src/nako_core_version.mts +2 -2
  29. package/core/src/nako_csv.mts +0 -1
  30. package/core/src/nako_event.mts +49 -0
  31. package/core/src/nako_gen.mts +320 -209
  32. package/core/src/nako_global.mts +18 -0
  33. package/core/src/nako_indent_inline.mts +2 -2
  34. package/core/src/nako_lex_rules.mts +1 -1
  35. package/core/src/nako_parser3.mts +111 -166
  36. package/core/src/nako_parser_async.mts +165 -0
  37. package/core/src/nako_parser_base.mts +4 -55
  38. package/core/src/nako_parser_message.mts +105 -0
  39. package/core/src/nako_parser_operator.mts +93 -0
  40. package/core/src/nako_plugin_manager.mts +260 -0
  41. package/core/src/nako_require.mts +292 -0
  42. package/core/src/nako_runner.mts +208 -0
  43. package/core/src/nako_tokenizer.mts +221 -0
  44. package/core/src/plugin_csv.mts +1 -1
  45. package/core/src/plugin_system.mts +34 -3259
  46. package/core/src/plugin_system_array.mts +699 -0
  47. package/core/src/plugin_system_datetime.mts +368 -0
  48. package/core/src/plugin_system_debug.mts +403 -0
  49. package/core/src/plugin_system_dict.mts +85 -0
  50. package/core/src/plugin_system_json.mts +73 -0
  51. package/core/src/plugin_system_math.mts +383 -0
  52. package/core/src/plugin_system_regexp.mts +120 -0
  53. package/core/src/plugin_system_stdio.mts +86 -0
  54. package/core/src/plugin_system_string.mts +666 -0
  55. package/core/src/plugin_system_timer.mts +152 -0
  56. package/core/src/plugin_system_types.mts +151 -0
  57. package/core/src/plugin_system_url.mts +193 -0
  58. package/core/src/plugin_toml.mts +3 -3
  59. package/core/test/algorithm_samples_test.mjs +58 -0
  60. package/core/test/algorithms/graph/dijkstra_test.nako3 +21 -0
  61. package/core/test/algorithms/graph/kruskal_test.nako3 +21 -0
  62. package/core/test/algorithms/helper.mjs +13 -0
  63. package/core/test/algorithms/math/euclidean_gcd_test.nako3 +13 -0
  64. package/core/test/algorithms/math/sieve_of_eratosthenes_test.nako3 +10 -0
  65. package/core/test/algorithms/search/binary_search_test.nako3 +15 -0
  66. package/core/test/algorithms/search/breadth_first_search_test.nako3 +13 -0
  67. package/core/test/algorithms/search/depth_first_search_test.nako3 +13 -0
  68. package/core/test/algorithms/sort/heap_sort_test.nako3 +13 -0
  69. package/core/test/algorithms/sort/insertion_sort_test.nako3 +13 -0
  70. package/core/test/algorithms/sort/merge_sort_test.nako3 +18 -0
  71. package/core/test/algorithms/sort/quick_sort_test.nako3 +34 -0
  72. package/core/test/algorithms/string/knuth_morris_pratt_test.nako3 +16 -0
  73. package/core/test/algorithms/string/run_length_encoding_test.nako3 +13 -0
  74. package/core/test/array_test.mjs +3 -0
  75. package/core/test/fixtures/README.md +39 -0
  76. package/core/test/fixtures/make_parser_ast_golden.mjs +31 -0
  77. package/core/test/fixtures/parser_ast_golden.json +8027 -0
  78. package/core/test/fixtures/parser_corpus.mjs +120 -0
  79. package/core/test/func_call.mjs +18 -0
  80. package/core/test/func_test.mjs +28 -0
  81. package/core/test/indent_test.mjs +6 -0
  82. package/core/test/nako_basic_plugins_test.mjs +44 -0
  83. package/core/test/nako_event_test.mjs +127 -0
  84. package/core/test/nako_gen_perf_test.mjs +178 -0
  85. package/core/test/nako_parser_async_test.mjs +385 -0
  86. package/core/test/nako_parser_test.mjs +160 -0
  87. package/core/test/nako_plugin_manager_test.mjs +185 -0
  88. package/core/test/nako_require_test.mjs +153 -0
  89. package/core/test/nako_runner_test.mjs +174 -0
  90. package/core/test/nako_tokenizer_test.mjs +115 -0
  91. package/core/test/plugin_system_debug_test.mjs +138 -0
  92. package/core/test/plugin_system_split_test.mjs +179 -0
  93. package/core/test/plugin_system_test.mjs +6 -0
  94. package/core/tsconfig.json +0 -1
  95. package/demo/browsers.html +1 -1
  96. package/doc/SETUP.md +1 -1
  97. package/doc/ai-code-generation.md +136 -0
  98. package/doc/browsers.md +1 -1
  99. package/doc/command_list.json +16842 -0
  100. package/doc/search_command.md +222 -0
  101. package/doc/syntax-nako3.md +344 -0
  102. package/package.json +29 -26
  103. package/release/_hash.txt +40 -40
  104. package/release/_script-tags.txt +16 -16
  105. package/release/command.json +1 -1
  106. package/release/command.json.js +1 -1
  107. package/release/command_cnako3.json +1 -1
  108. package/release/command_list.json +1 -1
  109. package/release/edit_main.js +6 -6
  110. package/release/edit_main.js.map +3 -3
  111. package/release/editor.js +6 -6
  112. package/release/plugin_caniuse.js +1 -1
  113. package/release/plugin_caniuse.js.map +2 -2
  114. package/release/plugin_keigo.js.map +3 -3
  115. package/release/plugin_markup.js +46 -46
  116. package/release/plugin_markup.js.map +3 -3
  117. package/release/plugin_weykturtle3d.js +1 -1
  118. package/release/plugin_weykturtle3d.js.map +3 -3
  119. package/release/version.js +2 -2
  120. package/release/version_main.js +2 -2
  121. package/release/version_main.js.map +1 -1
  122. package/release/wnako3.js +219 -230
  123. package/release/wnako3.js.map +4 -4
  124. package/release/wnako3webworker.js +193 -204
  125. package/release/wnako3webworker.js.map +4 -4
  126. package/src/browsers.mjs +1 -1
  127. package/src/browsers.txt +0 -1
  128. package/src/cnako3mod.mjs +7 -2
  129. package/src/cnako3mod.mts +7 -2
  130. package/src/nako_version.mjs +2 -2
  131. package/src/nako_version.mts +2 -2
  132. package/src/plugin_browser_ajax.mjs +4 -4
  133. package/src/plugin_browser_ajax.mts +4 -4
  134. package/src/plugin_browser_audio.mjs +10 -10
  135. package/src/plugin_browser_audio.mts +10 -10
  136. package/src/plugin_browser_camera.mjs +4 -4
  137. package/src/plugin_browser_camera.mts +4 -4
  138. package/src/plugin_browser_canvas.mjs +2 -2
  139. package/src/plugin_browser_canvas.mts +2 -2
  140. package/src/plugin_browser_crypto.mjs +3 -3
  141. package/src/plugin_browser_crypto.mts +3 -3
  142. package/src/plugin_browser_dom_event.mjs +1 -1
  143. package/src/plugin_browser_dom_event.mts +1 -1
  144. package/src/plugin_browser_geolocation.mjs +1 -1
  145. package/src/plugin_browser_geolocation.mts +1 -1
  146. package/src/plugin_browser_hotkey.mjs +1 -1
  147. package/src/plugin_browser_hotkey.mts +1 -1
  148. package/src/plugin_browser_html.mjs +1 -1
  149. package/src/plugin_browser_html.mts +1 -1
  150. package/src/plugin_browser_location.mjs +1 -1
  151. package/src/plugin_browser_location.mts +1 -1
  152. package/src/plugin_browser_speech.mjs +1 -1
  153. package/src/plugin_browser_speech.mts +1 -1
  154. package/src/plugin_browser_storage.mjs +2 -2
  155. package/src/plugin_browser_storage.mts +2 -2
  156. package/src/plugin_httpserver.mjs +3 -3
  157. package/src/plugin_httpserver.mts +3 -3
  158. package/src/plugin_keigo.mjs +2 -2
  159. package/src/plugin_keigo.mts +2 -2
  160. package/src/plugin_node.mjs +48 -48
  161. package/src/plugin_node.mts +53 -53
  162. package/src/plugin_weykturtle3d.mjs +56 -56
  163. package/src/plugin_weykturtle3d.mts +56 -56
  164. package/src/wnako3.mjs +1 -1
  165. package/src/wnako3.mts +1 -1
  166. package/src/wnako3_editor.mjs +5 -5
  167. package/src/wnako3_editor.mts +5 -5
  168. package/src/wnako3mod.mjs +2 -2
  169. package/src/wnako3mod.mts +2 -2
  170. package/test/nako3edit/index_nako3_test.mjs +282 -0
  171. package/test/nako3server/index_nako3_test.mjs +239 -0
  172. package/test/node/ai_code_generation_guide_test.mjs +29 -0
  173. package/test/node/node_version_support_test.mjs +45 -0
  174. package/test/node/search_command_test.mjs +174 -0
  175. package/tools/nako3edit/AGENTS.md +23 -0
  176. package/tools/nako3edit/index.nako3 +404 -0
  177. package/tools/nako3server/AGENTS.md +23 -0
  178. package/tools/nako3server/index.nako3 +156 -23
  179. package/core/src/nako3.mjs +0 -1021
  180. package/core/src/nako_ast.mjs +0 -4
  181. package/core/src/nako_colors.mjs +0 -77
  182. package/core/src/nako_core_version.mjs +0 -8
  183. package/core/src/nako_csv.mjs +0 -193
  184. package/core/src/nako_errors.mjs +0 -166
  185. package/core/src/nako_from_dncl.mjs +0 -285
  186. package/core/src/nako_from_dncl2.mjs +0 -347
  187. package/core/src/nako_gen.mjs +0 -2500
  188. package/core/src/nako_global.mjs +0 -138
  189. package/core/src/nako_indent.mjs +0 -442
  190. package/core/src/nako_indent_chars.mjs +0 -29
  191. package/core/src/nako_indent_inline.mjs +0 -361
  192. package/core/src/nako_josi_list.mjs +0 -47
  193. package/core/src/nako_lex_rules.mjs +0 -319
  194. package/core/src/nako_lexer.mjs +0 -794
  195. package/core/src/nako_logger.mjs +0 -221
  196. package/core/src/nako_parser3.mjs +0 -3250
  197. package/core/src/nako_parser_base.mjs +0 -403
  198. package/core/src/nako_parser_const.mjs +0 -37
  199. package/core/src/nako_prepare.mjs +0 -329
  200. package/core/src/nako_reserved_words.mjs +0 -42
  201. package/core/src/nako_source_mapping.mjs +0 -207
  202. package/core/src/nako_test.mjs +0 -37
  203. package/core/src/nako_token.mjs +0 -1
  204. package/core/src/nako_tools.mjs +0 -53
  205. package/core/src/nako_types.mjs +0 -14
  206. package/core/src/plugin_api.mjs +0 -4
  207. package/core/src/plugin_csv.mjs +0 -97
  208. package/core/src/plugin_math.mjs +0 -352
  209. package/core/src/plugin_promise.mjs +0 -102
  210. package/core/src/plugin_system.mjs +0 -3810
  211. package/core/src/plugin_test.mjs +0 -52
  212. package/core/src/plugin_toml.mjs +0 -39
@@ -0,0 +1,26 @@
1
+ # エラトステネスの篩
2
+ # 入力: 0以上の整数N
3
+ # 出力: N以下の素数を昇順に並べた配列
4
+ # 計算量: O(N×log(log(N)))
5
+
6
+ ●(上限までの)素数列挙処理とは:
7
+ 変数のF素数一覧は[]
8
+ もし、上限<2ならば:
9
+ F素数一覧を戻す
10
+
11
+ 変数のF合成数は[]
12
+ 変数のF候補は2
13
+ ((F候補*F候補)<=上限)の間:
14
+ もし、F合成数[F候補]!=真ならば:
15
+ 変数のF倍数はF候補*F候補
16
+ (F倍数<=上限)の間:
17
+ F合成数[F倍数]は真
18
+ F倍数はF倍数+F候補
19
+ F候補はF候補+1
20
+
21
+ F候補は2
22
+ (F候補<=上限)の間:
23
+ もし、F合成数[F候補]!=真ならば:
24
+ F素数一覧にF候補を配列プッシュ
25
+ F候補はF候補+1
26
+ F素数一覧を戻す
@@ -0,0 +1,17 @@
1
+ # 二分探索処理
2
+ # 入力: 昇順に整列済みの配列と検索値
3
+ # 出力: 見つかった0起点の添字。見つからなければ-1
4
+ # 計算量: O(log(N))
5
+
6
+ ●(対象配列から検索値を)二分探索処理とは:
7
+ 変数のF左値は0
8
+ 変数のF右値は対象配列の要素数-1
9
+ (F左値<=F右値)の間:
10
+ 変数のF中央値はINT((F左値+F右値)/2)
11
+ もし、対象配列[F中央値]=検索値ならば:
12
+ F中央値を戻す
13
+ もし、対象配列[F中央値]<検索値ならば:
14
+ F左値はF中央値+1
15
+ 違えば:
16
+ F右値はF中央値-1
17
+ -1を戻す
@@ -0,0 +1,33 @@
1
+ # 幅優先探索処理
2
+ # 入力: 頂点番号を添字とする隣接リストと開始点
3
+ # 出力: 幅優先で訪問した頂点番号の配列
4
+ # 計算量: O(V+E)
5
+
6
+ ●(グラフを開始点から)幅優先探索処理とは:
7
+ 変数のF訪問順は[]
8
+ 変数のF頂点数はグラフの要素数
9
+ もし、((開始点<0)または(開始点>=F頂点数))ならば:
10
+ F訪問順を戻す
11
+
12
+ 変数のF訪問済みは[]
13
+ 変数のF待ち行列は[開始点]
14
+ 変数のF読取位置は0
15
+ 変数のF待ち個数は1
16
+ F訪問済み[開始点]は真
17
+
18
+ (F読取位置<F待ち個数)の間:
19
+ 変数のF頂点はF待ち行列[F読取位置]
20
+ F読取位置はF読取位置+1
21
+ F訪問順にF頂点を配列プッシュ
22
+
23
+ 変数のF隣接一覧はグラフ[F頂点]
24
+ 変数のF隣接個数はF隣接一覧の要素数
25
+ 変数のF位置は0
26
+ (F位置<F隣接個数)の間:
27
+ 変数のF隣接点はF隣接一覧[F位置]
28
+ もし、F訪問済み[F隣接点]!=真ならば:
29
+ F訪問済み[F隣接点]は真
30
+ F待ち行列にF隣接点を配列プッシュ
31
+ F待ち個数はF待ち個数+1
32
+ F位置はF位置+1
33
+ F訪問順を戻す
@@ -0,0 +1,25 @@
1
+ # 深さ優先探索処理
2
+ # 入力: 頂点番号を添字とする隣接リストと開始点
3
+ # 出力: 深さ優先で訪問した頂点番号の配列
4
+ # 計算量: O(V+E)
5
+
6
+ ●(グラフと頂点と訪問済みと訪問順で)深さ優先訪問処理とは:
7
+ 訪問済み[頂点]は真
8
+ 訪問順に頂点を配列プッシュ
9
+ 変数のF隣接一覧はグラフ[頂点]
10
+ 変数のF隣接個数はF隣接一覧の要素数
11
+ 変数のF位置は0
12
+ (F位置<F隣接個数)の間:
13
+ 変数のF隣接点はF隣接一覧[F位置]
14
+ もし、訪問済み[F隣接点]!=真ならば:
15
+ グラフとF隣接点と訪問済みと訪問順で深さ優先訪問処理
16
+ F位置はF位置+1
17
+ 訪問順を戻す
18
+
19
+ ●(グラフを開始点から)深さ優先探索処理とは:
20
+ 変数のF訪問順は[]
21
+ 変数のF頂点数はグラフの要素数
22
+ もし、((開始点<0)または(開始点>=F頂点数))ならば:
23
+ F訪問順を戻す
24
+ 変数のF訪問済みは[]
25
+ グラフと開始点とF訪問済みとF訪問順で深さ優先訪問処理して戻す
@@ -0,0 +1,37 @@
1
+ # ヒープソート処理
2
+ # 入力: 数値の配列
3
+ # 出力: 昇順に並べ替えた同じ配列
4
+ # 元の配列: 変更する
5
+ # 計算量: O(N×log(N))
6
+
7
+ ●(対象配列と個数と根位置で)ヒープ調整処理とは:
8
+ 変数のF最大位置は根位置
9
+ 変数のF左位置は根位置*2+1
10
+ 変数のF右位置は根位置*2+2
11
+
12
+ もし、((F左位置<個数)かつ(対象配列[F左位置]>対象配列[F最大位置]))ならば:
13
+ F最大位置はF左位置
14
+ もし、((F右位置<個数)かつ(対象配列[F右位置]>対象配列[F最大位置]))ならば:
15
+ F最大位置はF右位置
16
+ もし、F最大位置!=根位置ならば:
17
+ 変数のF一時値は対象配列[根位置]
18
+ 対象配列[根位置]は対象配列[F最大位置]
19
+ 対象配列[F最大位置]はF一時値
20
+ 対象配列と個数とF最大位置でヒープ調整処理
21
+ 対象配列を戻す
22
+
23
+ ●(対象配列を)ヒープソート処理とは:
24
+ 変数のF個数は対象配列の要素数
25
+ 変数のF位置はINT(F個数/2)-1
26
+ (F位置>=0)の間:
27
+ 対象配列とF個数とF位置でヒープ調整処理
28
+ F位置はF位置-1
29
+
30
+ F位置はF個数-1
31
+ (F位置>0)の間:
32
+ 変数のF一時値は対象配列[0]
33
+ 対象配列[0]は対象配列[F位置]
34
+ 対象配列[F位置]はF一時値
35
+ 対象配列とF位置と0でヒープ調整処理
36
+ F位置はF位置-1
37
+ 対象配列を戻す
@@ -0,0 +1,18 @@
1
+ # 挿入ソート処理
2
+ # 入力: 数値の配列
3
+ # 出力: 昇順に並べ替えた同じ配列
4
+ # 元の配列: 変更する
5
+ # 計算量: O(N^2)
6
+
7
+ ●(対象配列を)挿入ソート処理とは:
8
+ 変数のF個数は対象配列の要素数
9
+ 変数のF位置は1
10
+ (F位置<F個数)の間:
11
+ 変数のF挿入値は対象配列[F位置]
12
+ 変数のF比較位置はF位置-1
13
+ ((F比較位置>=0)かつ(対象配列[F比較位置]>F挿入値))の間:
14
+ 対象配列[F比較位置+1]は対象配列[F比較位置]
15
+ F比較位置はF比較位置-1
16
+ 対象配列[F比較位置+1]はF挿入値
17
+ F位置はF位置+1
18
+ 対象配列を戻す
@@ -0,0 +1,40 @@
1
+ # マージソート処理
2
+ # 入力: 数値の配列
3
+ # 出力: 昇順に並べ替えた新しい配列
4
+ # 元の配列: 変更しない
5
+ # 計算量: O(N×log(N))
6
+
7
+ ●(対象配列と左端と右端で)マージソート範囲処理とは:
8
+ もし、左端>=右端ならば:
9
+ [対象配列[左端]]を戻す
10
+
11
+ 変数のF中央値はINT((左端+右端)/2)
12
+ 変数のF左配列は対象配列と左端とF中央値でマージソート範囲処理
13
+ 変数のF右配列は対象配列と(F中央値+1)と右端でマージソート範囲処理
14
+ 変数のF結果配列は[]
15
+ 変数のF左位置は0
16
+ 変数のF右位置は0
17
+ 変数のF左個数はF左配列の要素数
18
+ 変数のF右個数はF右配列の要素数
19
+
20
+ ((F左位置<F左個数)かつ(F右位置<F右個数))の間:
21
+ もし、F左配列[F左位置]<=F右配列[F右位置]ならば:
22
+ F結果配列にF左配列[F左位置]を配列プッシュ
23
+ F左位置はF左位置+1
24
+ 違えば:
25
+ F結果配列にF右配列[F右位置]を配列プッシュ
26
+ F右位置はF右位置+1
27
+
28
+ (F左位置<F左個数)の間:
29
+ F結果配列にF左配列[F左位置]を配列プッシュ
30
+ F左位置はF左位置+1
31
+ (F右位置<F右個数)の間:
32
+ F結果配列にF右配列[F右位置]を配列プッシュ
33
+ F右位置はF右位置+1
34
+ F結果配列を戻す
35
+
36
+ ●(対象配列を)マージソート処理とは:
37
+ 変数のF個数は対象配列の要素数
38
+ もし、F個数=0ならば:
39
+ []を戻す
40
+ 対象配列と0と(F個数-1)でマージソート範囲処理して戻す
@@ -0,0 +1,36 @@
1
+ # クイックソート処理
2
+ # 入力: 数値の配列
3
+ # 出力: 昇順に並べ替えた同じ配列
4
+ # 元の配列: 変更する
5
+ # 計算量: 平均O(N×log(N))、最悪O(N^2)
6
+
7
+ ●(対象配列と左端と右端で)クイックソート範囲処理とは:
8
+ 変数のF左位置は左端
9
+ 変数のF右位置は右端
10
+ 変数のF中央値はINT((左端+右端)/2)
11
+ 変数のF基準値は対象配列[F中央値]
12
+
13
+ (F左位置<=F右位置)の間:
14
+ (対象配列[F左位置]<F基準値)の間:
15
+ F左位置はF左位置+1
16
+ (対象配列[F右位置]>F基準値)の間:
17
+ F右位置はF右位置-1
18
+ もし、F左位置<=F右位置ならば:
19
+ 変数のF一時値は対象配列[F左位置]
20
+ 対象配列[F左位置]は対象配列[F右位置]
21
+ 対象配列[F右位置]はF一時値
22
+ F左位置はF左位置+1
23
+ F右位置はF右位置-1
24
+
25
+ もし、左端<F右位置ならば:
26
+ 対象配列と左端とF右位置でクイックソート範囲処理
27
+ もし、F左位置<右端ならば:
28
+ 対象配列とF左位置と右端でクイックソート範囲処理
29
+ 対象配列を戻す
30
+
31
+ ●(対象配列を)クイックソート処理とは:
32
+ 変数のF個数は対象配列の要素数
33
+ もし、F個数<=1ならば:
34
+ 対象配列を戻す
35
+ 対象配列と0と(F個数-1)でクイックソート範囲処理
36
+ 対象配列を戻す
@@ -0,0 +1,50 @@
1
+ # KMP法(Knuth-Morris-Pratt法)
2
+ # 入力: 対象文字列と検索文字列
3
+ # 出力: 最初に一致した0起点の文字位置。見つからなければ-1
4
+ # 計算量: O(N+M)
5
+
6
+ ●(検索文字配列の)部分一致表作成処理とは:
7
+ 変数のF検索長は検索文字配列の要素数
8
+ 変数のF部分一致表は[]
9
+ もし、F検索長=0ならば:
10
+ F部分一致表を戻す
11
+
12
+ F部分一致表[0]は0
13
+ 変数のF一致長は0
14
+ 変数のF位置は1
15
+ (F位置<F検索長)の間:
16
+ もし、検索文字配列[F位置]=検索文字配列[F一致長]ならば:
17
+ F一致長はF一致長+1
18
+ F部分一致表[F位置]はF一致長
19
+ F位置はF位置+1
20
+ 違えば:
21
+ もし、F一致長>0ならば:
22
+ F一致長はF部分一致表[F一致長-1]
23
+ 違えば:
24
+ F部分一致表[F位置]は0
25
+ F位置はF位置+1
26
+ F部分一致表を戻す
27
+
28
+ ●(対象文字列から検索文字列を)KMP検索処理とは:
29
+ 変数のF対象文字配列は対象文字列を文字列分解
30
+ 変数のF検索文字配列は検索文字列を文字列分解
31
+ 変数のF対象長はF対象文字配列の要素数
32
+ 変数のF検索長はF検索文字配列の要素数
33
+ もし、F検索長=0ならば:
34
+ 0を戻す
35
+
36
+ 変数のF部分一致表はF検索文字配列の部分一致表作成処理
37
+ 変数のF対象位置は0
38
+ 変数のF検索位置は0
39
+ (F対象位置<F対象長)の間:
40
+ もし、F対象文字配列[F対象位置]=F検索文字配列[F検索位置]ならば:
41
+ F対象位置はF対象位置+1
42
+ F検索位置はF検索位置+1
43
+ もし、F検索位置=F検索長ならば:
44
+ (F対象位置-F検索位置)を戻す
45
+ 違えば:
46
+ もし、F検索位置>0ならば:
47
+ F検索位置はF部分一致表[F検索位置-1]
48
+ 違えば:
49
+ F対象位置はF対象位置+1
50
+ -1を戻す
@@ -0,0 +1,25 @@
1
+ # ランレングス圧縮処理
2
+ # 入力: 文字列
3
+ # 出力: 連続する文字と個数を組にした二次元配列
4
+ # 計算量: O(N)
5
+
6
+ ●(対象文字列を)ランレングス圧縮処理とは:
7
+ 変数のF結果は[]
8
+ 変数のF文字配列は対象文字列を文字列分解
9
+ 変数のF入力長はF文字配列の要素数
10
+ もし、F入力長=0ならば:
11
+ F結果を戻す
12
+
13
+ 変数のF現在文字はF文字配列[0]
14
+ 変数のF連続数は1
15
+ 変数のF位置は1
16
+ (F位置<F入力長)の間:
17
+ もし、F文字配列[F位置]=F現在文字ならば:
18
+ F連続数はF連続数+1
19
+ 違えば:
20
+ F結果に[F現在文字,F連続数]を配列プッシュ
21
+ F現在文字はF文字配列[F位置]
22
+ F連続数は1
23
+ F位置はF位置+1
24
+ F結果に[F現在文字,F連続数]を配列プッシュ
25
+ F結果を戻す