bioshogi 0.0.17 → 0.0.18

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 (1045) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +59 -0
  3. data/A/342/206/222B/342/206/222C/345/233/262/343/201/204.txt +145 -5
  4. data/A/342/206/222B/342/206/222C/346/210/246/346/263/225.txt +347 -52
  5. data/Gemfile.lock +77 -33
  6. data/bioshogi.gemspec +2 -1
  7. data/lib/bioshogi/ai/evaluator/attack_weight_table.rb +0 -1
  8. data/lib/bioshogi/ai/evaluator/base.rb +1 -1
  9. data/lib/bioshogi/ai/evaluator/level3.rb +2 -3
  10. data/lib/bioshogi/ai/evaluator/level4.rb +1 -1
  11. data/lib/bioshogi/alias_mod.rb +35 -0
  12. data/lib/bioshogi/analysis/abbrev_expander.rb +48 -0
  13. data/lib/bioshogi/analysis/analyzer_mod.rb +26 -41
  14. data/lib/bioshogi/analysis/atsumeruyo.rb +19 -0
  15. data/lib/bioshogi/analysis/attack_info.rb +441 -305
  16. data/lib/bioshogi/analysis/basic_accessor.rb +37 -94
  17. data/lib/bioshogi/analysis/board_piece_counts_methods.rb +12 -17
  18. data/lib/bioshogi/analysis/capture_analyzer.rb +27 -0
  19. data/lib/bioshogi/analysis/capture_detector.rb +107 -0
  20. data/lib/bioshogi/analysis/cluster_score_info.rb +48 -0
  21. data/lib/bioshogi/analysis/{board_piller_methods.rb → column_soldier_counter_methods.rb} +7 -6
  22. data/lib/bioshogi/analysis/custom_analyzer.rb +22 -0
  23. data/lib/bioshogi/analysis/custom_detector_info.rb +24 -0
  24. data/lib/bioshogi/analysis/custom_detectors/anaguma_detector.rb +129 -0
  25. data/lib/bioshogi/analysis/custom_detectors/gyokutousen_detector.rb +88 -0
  26. data/lib/bioshogi/analysis/custom_detectors/hikakukoukan_detector.rb +84 -0
  27. data/lib/bioshogi/analysis/custom_detectors/hisyakaku_kiru_detector.rb +53 -0
  28. data/lib/bioshogi/analysis/custom_detectors/kakukoukan_detector.rb +63 -0
  29. data/lib/bioshogi/analysis/custom_detectors/kakunihakaku_detector.rb +72 -0
  30. data/lib/bioshogi/analysis/custom_detectors/magic_square_detector.rb +41 -0
  31. data/lib/bioshogi/analysis/custom_detectors/nyuugyoku_anaguma_detector.rb +67 -0
  32. data/lib/bioshogi/analysis/custom_detectors/outbreak_detector.rb +20 -0
  33. data/lib/bioshogi/analysis/custom_trigger_info.rb +16 -0
  34. data/lib/bioshogi/analysis/defense_info.rb +157 -152
  35. data/lib/bioshogi/analysis/every_analyzer.rb +27 -0
  36. data/lib/bioshogi/analysis/every_detector.rb +18 -0
  37. data/lib/bioshogi/analysis/executer_dsl.rb +248 -0
  38. data/lib/bioshogi/analysis/file_list.rb +13 -0
  39. data/lib/bioshogi/analysis/file_normalizer.rb +6 -3
  40. data/lib/bioshogi/analysis/finalize_tag_detector.rb +97 -0
  41. data/lib/bioshogi/analysis/finalize_tag_func_info.rb +321 -0
  42. data/lib/bioshogi/analysis/finalize_tag_info.rb +55 -0
  43. data/lib/bioshogi/analysis/frequency.rb +3 -375
  44. data/lib/bioshogi/analysis/group_info.rb +45 -2
  45. data/lib/bioshogi/analysis/kakukiri_canceler.rb +44 -0
  46. data/lib/bioshogi/analysis/motion_analyzer.rb +40 -0
  47. data/lib/bioshogi/analysis/motion_detector.rb +2022 -0
  48. data/lib/bioshogi/analysis/normalize_check.rb +22 -0
  49. data/lib/bioshogi/analysis/note_info.rb +25 -83
  50. data/lib/bioshogi/analysis/performance_benchmark.rb +29 -0
  51. data/lib/bioshogi/analysis/player_methods.rb +30 -2
  52. data/lib/bioshogi/analysis/report/all.org +517 -0
  53. data/lib/bioshogi/analysis/report/capture.org +9 -0
  54. data/lib/bioshogi/analysis/report/every.org +5 -0
  55. data/lib/bioshogi/analysis/report/motion.org +83 -0
  56. data/lib/bioshogi/analysis/report/shape.org +6 -0
  57. data/lib/bioshogi/analysis/report/shape_info.org +364 -0
  58. data/lib/bioshogi/analysis/shape_analyzer.rb +254 -0
  59. data/lib/bioshogi/analysis/shape_analyzer_methods.rb +55 -0
  60. data/lib/bioshogi/analysis/shape_detector.rb +23 -0
  61. data/lib/bioshogi/analysis/shape_info.rb +500 -203
  62. data/lib/bioshogi/analysis/shape_info_accessor.rb +15 -0
  63. data/lib/bioshogi/analysis/soldier_lookup_table_methods.rb +50 -0
  64. data/lib/bioshogi/analysis/soldier_place_methods.rb +51 -0
  65. data/lib/bioshogi/analysis/static_kif_mod.rb +25 -0
  66. data/lib/bioshogi/{formatter/sugatayaki_validator.rb → analysis/sugatayaki_detector.rb} +18 -33
  67. data/lib/bioshogi/analysis/{tactic_validator.rb → tactic_detector.rb} +3 -3
  68. data/lib/bioshogi/analysis/tactic_hit_turn_table.rb +521 -422
  69. data/lib/bioshogi/analysis/tactic_hit_turn_table_generator.rb +4 -3
  70. data/lib/bioshogi/analysis/tactic_info.rb +17 -141
  71. data/lib/bioshogi/analysis/tag_bundle.rb +117 -0
  72. data/lib/bioshogi/analysis/tag_column_names.rb +31 -0
  73. data/lib/bioshogi/analysis/tag_index.rb +102 -0
  74. data/lib/bioshogi/analysis/tag_methods.rb +12 -0
  75. data/lib/bioshogi/analysis/tag_reporter.rb +40 -0
  76. data/lib/bioshogi/analysis/technique_info.rb +176 -62
  77. data/lib/bioshogi/analysis/tree_mod.rb +40 -0
  78. data/lib/bioshogi/analysis/trigger_expander.rb +62 -0
  79. data/lib/bioshogi/analysis/used_soldier_counter.rb +33 -0
  80. data/lib/bioshogi/analysis/xmotion_analyzer.rb +24 -0
  81. data/lib/bioshogi/analysis/xmotion_detector_info.rb +52 -0
  82. data/lib/bioshogi/analysis/xmotion_detectors/horse_detector.rb +60 -0
  83. data/lib/bioshogi/analysis/xmotion_detectors/outebisha0_detector.rb +74 -0
  84. data/lib/bioshogi/analysis/xmotion_detectors/outebisha_detector.rb +124 -0
  85. data/lib/bioshogi/analysis/xmotion_detectors/outekaku_detector.rb +33 -0
  86. data/lib/bioshogi/analysis/xmotion_detectors/rocket_detector.rb +116 -0
  87. data/lib/bioshogi/analysis/xmotion_detectors/wazaarinokei_detector.rb +80 -0
  88. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/347/263/273.kif +9 -0
  89. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/347/263/273.kif +9 -0
  90. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/346/212/227/345/275/242.kif +10 -1
  91. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/261/205/351/243/233/350/273/212.kif +44 -4
  92. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/200/245/346/210/246.kif +47 -47
  93. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/211/213/345/276/227/350/247/222/344/272/244/346/217/233/345/236/213.kif +12 -2
  94. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/211/213/346/220/215/350/247/222/344/272/244/346/217/233/345/236/213.kif +13 -3
  95. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/214/201/344/271/205/346/210/246.kif +38 -11
  96. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/214/257/343/202/212/351/243/233/350/273/212.kif +26 -7
  97. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/233/270/345/205/245/347/216/211.kif +15 -4
  98. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/233/270/345/261/205/347/216/211.kif +79 -23
  99. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/233/270/345/261/205/351/243/233/350/273/212.kif +19 -5
  100. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/233/270/346/214/257/343/202/212/351/243/233/350/273/212.kif +12 -3
  101. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/233/270/347/251/264/347/206/212.kif +27 -8
  102. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/237/255/346/211/213/346/225/260.kif +18 -7
  103. data/lib/bioshogi/analysis//345/202/231/350/200/203//350/247/222/344/272/244/346/217/233/345/236/213.kif +12 -2
  104. data/lib/bioshogi/analysis//345/202/231/350/200/203//351/225/267/346/211/213/346/225/260.kif +64 -11
  105. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/202/343/201/232/343/201/276/343/202/204/345/233/262/343/201/204.kif +15 -6
  106. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/204/343/201/213/343/201/240/345/233/262/343/201/204.kif +18 -3
  107. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/204/343/201/241/343/201/224/345/233/262/343/201/204.kif +30 -7
  108. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/213/343/202/223/343/201/264/343/202/207/343/201/206/345/233/262/343/201/204.kif +39 -12
  109. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/232/343/202/214/347/276/216/346/277/203.kif +14 -5
  110. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/241/343/202/207/343/202/223/343/201/276/343/201/222/347/276/216/346/277/203.kif +12 -3
  111. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/201/270/343/201/223/343/201/277/347/237/242/345/200/211.kif +24 -6
  112. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/242/343/203/222/343/203/253/345/233/262/343/201/204.kif +31 -8
  113. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/250/343/203/253/343/203/242/345/233/262/343/201/204.kif +12 -3
  114. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/252/343/203/252/343/202/252/343/203/263/345/233/262/343/201/204.kif +32 -0
  115. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/252/343/203/252/343/202/270/343/203/212/343/203/253/351/233/201/346/234/250.kif +30 -11
  116. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/252/343/203/274/343/203/253/343/203/211/351/233/201/346/234/250.kif +34 -9
  117. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/202/256/345/233/262/343/201/204.kif +44 -11
  118. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/202/277/345/233/262/343/201/204.kif +35 -11
  119. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/203/213/345/233/262/343/201/204.kif +21 -5
  120. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/203/213/347/274/266/345/233/262/343/201/204.kif +10 -2
  121. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/203/226/343/203/210/345/233/262/343/201/204.kif +19 -5
  122. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/203/226/343/203/210/347/276/216/346/277/203.kif +20 -6
  123. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/273/343/203/241/343/203/263/343/203/210/345/233/262/343/201/204.kif +33 -8
  124. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/200/343/202/244/343/203/244/343/203/242/343/203/263/343/203/211/347/276/216/346/277/203.kif +19 -5
  125. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/201/343/203/247/343/202/263/343/203/254/343/203/274/343/203/210/345/233/262/343/201/204.kif +13 -8
  126. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/204/343/203/216/351/212/200/345/233/262/343/201/204.kif +17 -5
  127. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/204/343/203/216/351/212/200/351/233/201/346/234/250.kif +31 -9
  128. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/223/343/203/203/343/202/2604.kif +31 -11
  129. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/234/343/203/212/343/203/263/343/202/266/345/233/262/343/201/204.kif +30 -8
  130. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/237/343/203/254/343/203/213/343/202/242/343/203/240/345/233/262/343/201/204.kif +43 -14
  131. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/240/343/203/252/343/203/244/343/203/252/347/237/242/345/200/211.kif +19 -4
  132. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/203/242/343/203/216/343/203/254/343/203/274/343/203/253/345/233/262/343/201/204.kif +20 -4
  133. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/200/346/226/207/345/255/227/347/237/242/345/200/211.kif +15 -3
  134. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/200/346/236/232/347/251/264/347/206/212.kif +237 -0
  135. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/203/346/236/232/347/251/264/347/206/212.kif +237 -0
  136. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/211/346/236/232/347/251/264/347/206/212.kif +237 -0
  137. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/255/344/275/217/343/201/276/343/201/204.kif +41 -9
  138. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/255/345/216/237/345/233/262/343/201/204.kif +17 -4
  139. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/262/343/202/253/343/203/204/345/233/262/343/201/204.kif +15 -4
  140. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/272/214/346/236/232/347/251/264/347/206/212.kif +237 -0
  141. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/272/224/346/236/232/347/251/264/347/206/212.kif +237 -0
  142. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/205/245/347/216/211/347/251/264/347/206/212.kif +42 -0
  143. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/205/253/346/236/232/347/251/264/347/206/212.kif +237 -0
  144. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/205/255/346/236/232/347/251/264/347/206/212.kif +237 -0
  145. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/215/207/347/224/260/347/276/216/346/277/203.kif +19 -3
  146. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/217/263/347/237/242/345/200/211.kif +28 -7
  147. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/347/251/264/347/206/212.kif +22 -8
  148. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/347/276/216/346/277/203.kif +16 -6
  149. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/351/212/200/345/206/240.kif +43 -13
  150. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/256/265/347/253/257/347/216/211.kif +49 -13
  151. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/350/247/222/347/237/242/345/200/211.kif +21 -6
  152. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/234/237/345/261/205/347/237/242/345/200/211.kif +17 -4
  153. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/235/212/344/270/273/347/276/216/346/277/203.kif +17 -3
  154. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/247/345/261/261/347/276/216/346/277/203.kif +15 -4
  155. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/247/347/233/276/345/233/262/343/201/204.kif +15 -4
  156. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/247/351/232/205/345/233/262/343/201/204.kif +13 -4
  157. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/345/256/210/351/226/243/345/233/262/343/201/204//343/203/201/343/203/247/343/202/263/343/203/254/343/203/274/343/203/210/345/233/262/343/201/204/343/201/270/343/201/256/346/264/276/347/224/237.kif +72 -0
  158. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/345/256/210/351/226/243/345/233/262/343/201/204.kif +13 -4
  159. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/345/256/210/351/226/243/347/276/216/346/277/203.kif +16 -7
  160. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/347/251/272/343/201/256/345/237/216.kif +51 -0
  161. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/351/207/216/347/237/242/345/200/211.kif +17 -6
  162. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/257/214/345/243/253/350/246/213/347/237/242/345/200/211.kif +51 -16
  163. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/347/216/211.kif +142 -56
  164. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/347/251/264/351/237/263/347/204/241/343/201/227/343/201/256/346/247/213/343/201/210.kif +18 -6
  165. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/347/251/264/347/206/212.kif +19 -6
  166. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/351/207/221/345/206/240.kif +43 -12
  167. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/351/207/221/347/204/241/345/217/214.kif +16 -6
  168. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/351/207/221/347/276/216/346/277/203.kif +15 -4
  169. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/351/212/200/345/206/240.kif +16 -6
  170. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/267/246/345/261/261/345/233/262/343/201/204.kif +13 -4
  171. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/267/246/347/276/216/346/277/203.kif +19 -5
  172. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/202/252/345/275/242/347/237/242/345/200/211.kif +15 -4
  173. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/202/250/343/203/253/343/203/242.kif +22 -6
  174. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/203/223/343/203/203/343/202/2604.kif +52 -13
  175. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +42 -13
  176. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/344/270/262/343/202/253/343/203/204/345/233/262/343/201/204.kif +14 -3
  177. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/345/233/233/346/236/232/347/276/216/346/277/203.kif +21 -8
  178. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/345/244/251/345/256/210/351/226/243/347/276/216/346/277/203.kif +19 -5
  179. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/347/251/264/347/206/212.kif +18 -5
  180. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/347/253/257/347/216/211/351/212/200/345/206/240.kif +19 -5
  181. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/351/212/200/345/206/240/347/251/264/347/206/212.kif +29 -6
  182. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/226/207/351/216/256/345/233/262/343/201/204.kif +21 -6
  183. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/226/260/345/236/213/351/233/201/346/234/250.kif +17 -4
  184. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/227/251/345/233/262/343/201/204.kif +13 -4
  185. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/234/250/346/235/221/347/276/216/346/277/203.kif +20 -7
  186. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/235/276/345/260/276/346/265/201/347/251/264/347/206/212.kif +27 -8
  187. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/241/220/345/261/261/346/265/201/344/270/255/345/216/237/345/233/262/343/201/204.kif +20 -5
  188. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/265/201/343/202/214/347/237/242/345/200/211.kif +13 -4
  189. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/265/201/347/267/232/347/237/242/345/200/211.kif +21 -6
  190. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/204/241/346/225/265/345/233/262/343/201/204.kif +12 -3
  191. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/204/241/350/262/254/344/273/273/347/237/242/345/200/211.kif +16 -4
  192. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/211/207/343/203/204/343/203/216/351/212/200/345/233/262/343/201/204.kif +17 -5
  193. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/211/207/347/276/216/346/277/203/345/233/262/343/201/204.kif +12 -3
  194. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/211/207/351/212/200/345/206/240.kif +24 -6
  195. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/237/242/345/200/211/346/227/251/345/233/262/343/201/204.kif +14 -5
  196. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/237/242/345/200/211/347/251/264/347/206/212.kif +30 -6
  197. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/245/236/345/220/211/346/265/201/347/251/264/347/206/212.kif +19 -6
  198. data/lib/bioshogi/analysis//345/{202/231/350/200/203 → 233/262/343/201/204}//347/251/264/347/206/212.kif +33 -12
  199. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/253/257/347/216/211/351/212/200/345/206/240.kif +19 -9
  200. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/256/261/345/205/245/343/202/212/345/250/230.kif +15 -6
  201. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/264/231/347/251/264/347/206/212.kif +60 -11
  202. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/267/217/347/237/242/345/200/211.kif +34 -15
  203. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/276/216/346/277/203/345/233/262/343/201/204.kif +13 -4
  204. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/276/216/346/277/203/347/206/212/345/233/262/343/201/204.kif +17 -5
  205. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/210/237/345/233/262/343/201/204.kif +12 -3
  206. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/210/237/345/233/262/343/201/204DX.kif +18 -6
  207. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/217/212/346/260/264/347/237/242/345/200/211.kif +21 -6
  208. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/217/261/347/237/242/345/200/211.kif +26 -8
  209. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/243/217/343/202/242/343/203/222/343/203/253/345/233/262/343/201/204.kif +13 -4
  210. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/243/270/347/251/264/347/206/212.kif +36 -0
  211. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/243/276/345/233/272/343/202/201.kif +13 -7
  212. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/247/222/346/217/233/343/202/217/343/202/212/347/251/264/347/206/212.kif +76 -0
  213. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/247/222/347/237/242/345/200/211.kif +23 -4
  214. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/247/222/351/201/223/344/270/215/347/252/201/343/201/215/345/267/246/347/276/216/346/277/203.kif +12 -3
  215. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/261/206/350/205/220/347/237/242/345/200/211.kif +15 -5
  216. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/200/243/347/233/237/347/276/216/346/277/203.kif +12 -3
  217. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/345/244/232/344/274/235.kif +14 -3
  218. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/204/241/345/217/214.kif +23 -9
  219. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/233/276/345/233/262/343/201/204.kif +14 -5
  220. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/237/242/345/200/211.kif +16 -4
  221. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/276/216/346/277/203.kif +25 -8
  222. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/351/226/200/347/237/242/345/200/211.kif +18 -5
  223. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/345/206/240.kif +21 -4
  224. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/345/206/240/347/251/264/347/206/212.kif +28 -9
  225. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/345/244/232/344/274/235.kif +41 -7
  226. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/347/237/242/345/200/211.kif +18 -3
  227. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/347/253/213/343/201/241/347/237/242/345/200/211.kif +17 -5
  228. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/347/276/216/346/277/203.kif +19 -6
  229. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/232/205/347/237/242/345/200/211.kif +19 -5
  230. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/233/242/343/202/214/351/207/221/347/204/241/345/217/214.kif +25 -5
  231. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/233/262/351/232/240/343/202/214/347/216/211.kif +15 -4
  232. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/253/230/347/237/242/345/200/211.kif +16 -4
  233. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/253/230/347/276/216/346/277/203/345/233/262/343/201/204.kif +17 -4
  234. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/255/224/346/226/271/351/231/243.kif +47 -0
  235. data/lib/bioshogi/analysis//346/210/246/346/263/225/2/346/211/213/347/233/256/342/226/2633/344/272/214/351/212/200/343/202/267/343/202/271/343/203/206/343/203/240.kif +9 -0
  236. data/lib/bioshogi/analysis//346/210/246/346/263/225/2/346/211/213/347/233/256/342/226/2633/{343/203/213 → 344/272/214}/351/243/233/346/210/246/346/263/225.kif +44 -13
  237. data/lib/bioshogi/analysis//346/210/246/346/263/225/2/346/211/213/347/233/256/342/226/2636/344/272/214/351/212/200/346/210/246/346/263/225.kif +9 -0
  238. data/lib/bioshogi/analysis//346/210/246/346/263/225/2/346/211/213/347/233/256/342/226/2637/345/233/233/346/255/251/346/210/246/346/263/225.kif +9 -0
  239. data/lib/bioshogi/analysis//346/210/246/346/263/225/3/342/206/2224/342/206/2223/346/210/246/346/263/225.kif +14 -5
  240. data/lib/bioshogi/analysis//346/210/246/346/263/225/3/346/211/213/347/233/256/342/226/2627/344/270/203/350/247/222/346/210/246/346/263/225.kif +20 -0
  241. data/lib/bioshogi/analysis//346/210/246/346/263/225/4/346/211/213/347/233/256/342/226/2633/344/270/211/350/247/222/346/210/246/346/263/225.kif +10 -2
  242. data/lib/bioshogi/analysis//346/210/246/346/263/225/5/346/211/213/347/210/206/345/274/276.kif +21 -8
  243. data/lib/bioshogi/analysis//346/210/246/346/263/225/5/347/255/213/344/275/215/345/217/226/343/202/212.kif +14 -4
  244. data/lib/bioshogi/analysis//346/210/246/346/263/225/5/347/255/213/344/275/215/345/217/226/343/202/212/344/270/255/351/243/233/350/273/212.kif +13 -4
  245. data/lib/bioshogi/analysis//346/210/246/346/263/225/6/347/255/213/344/275/215/345/217/226/343/202/212.kif +14 -5
  246. data/lib/bioshogi/analysis//346/210/246/346/263/225/7/346/211/213/347/210/206/345/274/276.kif +30 -0
  247. data/lib/bioshogi/analysis//346/210/246/346/263/225/GAVA/350/247/222.kif +20 -5
  248. data/lib/bioshogi/analysis//346/210/246/346/263/225/UFO/351/207/221.kif +34 -0
  249. data/lib/bioshogi/analysis//346/210/246/346/263/225/UFO/351/212/200.kif +21 -6
  250. data/lib/bioshogi/analysis//346/210/246/346/263/225/U/343/202/277/343/203/274/343/203/263/351/243/233/350/273/212.kif +43 -16
  251. data/lib/bioshogi/analysis//346/210/246/346/263/225/xaby/350/247/222/346/210/246/346/263/225.kif +18 -5
  252. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2624/344/272/224/346/255/251/346/227/251/344/273/225/346/216/233/343/201/221.kif +22 -6
  253. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2624/345/205/255/351/212/200/345/217/263/346/200/245/346/210/246.kif +17 -5
  254. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2624/345/205/255/351/212/200/345/267/246/346/200/245/346/210/246.kif +15 -4
  255. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2625/344/270/203/351/207/221/346/210/246/346/263/225.kif +36 -11
  256. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2625/344/272/224/351/276/215/344/270/255/351/243/233/350/273/212.kif +22 -7
  257. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2632/344/270/211/346/255/251/346/210/246/346/263/225.kif +25 -4
  258. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2633/344/270/211/346/241/202/346/210/246/346/263/225.kif +23 -4
  259. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2633/344/270/211/350/247/222/345/236/213/347/251/272/344/270/255/346/210/246/346/263/225.kif +29 -6
  260. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2633/344/270/211/351/207/221/345/236/213/346/227/251/347/271/260/343/202/212/351/212/200.kif +21 -9
  261. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2633/344/270/211/351/243/233/346/210/246/346/263/225.kif +41 -9
  262. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2634/344/272/224/350/247/222/346/210/246/346/263/225.kif +27 -6
  263. data/lib/bioshogi/analysis//346/210/246/346/263/225//342/226/2637/344/272/214/351/243/233/344/272/234/346/200/245/346/210/246.kif +31 -9
  264. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/206/343/201/243/343/201/213/343/202/212/344/270/211/351/226/223/351/243/233/350/273/212.kif +13 -4
  265. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/215/343/202/223/343/201/250/343/201/206/343/202/223/346/210/246/346/263/225.kif +20 -3
  266. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/215/357/275/215/343/201/215/357/275/215/351/207/221.kif +15 -4
  267. data/lib/bioshogi/analysis//346/210/246/346/263/225//{345/257/276/343/201/262/343/201/255/343/202/212/351/243/233/350/273/212/343 → 343}/201/237/343/201/223/351/207/221/346/210/246/346/263/225.kif +25 -6
  268. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/244/343/201/217/343/201/244/343/201/217/343/201/274/343/201/206/343/201/227/346/210/246/346/263/225.kif +18 -7
  269. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/257/343/201/217/345/274/217/345/233/233/351/226/223/351/243/233/350/273/212.kif +45 -14
  270. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/262/343/201/255/343/202/212/351/243/233/350/273/212.kif +22 -4
  271. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/270/343/201/252/343/201/241/343/202/207/343/201/223/346/200/245/346/210/246.kif +25 -6
  272. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/201/270/343/201/252/343/201/241/343/202/207/343/201/223/346/214/201/344/271/205/346/210/246.kif +73 -0
  273. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/204/343/201/260/343/203/234/343/203/274/343/202/272/346/265/201.kif +31 -11
  274. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/242/343/203/222/343/203/253/346/210/246/346/263/225.kif +31 -8
  275. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/246/343/202/275/347/237/242/345/200/211.kif +11 -3
  276. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/250/343/203/253/343/203/242/346/200/245/346/210/246.kif +39 -13
  277. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/252/343/202/266/343/203/257/343/202/267/343/202/271/343/203/206/343/203/240.kif +60 -11
  278. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/253/343/203/213/343/202/253/343/203/213/351/207/221.kif +19 -4
  279. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/253/343/203/213/343/202/253/343/203/213/351/212/200.kif +13 -7
  280. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/253/343/203/241/343/203/254/343/202/252/343/203/263/346/210/246/346/263/225.kif +19 -6
  281. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/257/343/203/253/343/202/257/343/203/253/350/247/222.kif +154 -0
  282. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/263/343/203/274/343/203/244/343/203/263/346/265/201/344/270/211/351/226/223/351/243/233/350/273/212.kif +45 -9
  283. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/264/343/202/255/343/202/262/343/203/263/344/270/255/351/243/233/350/273/212.kif +34 -12
  284. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/264/343/203/252/343/202/264/343/203/252/351/207/221.kif +24 -5
  285. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/264/343/203/252/343/203/251/343/201/256/345/217/263/346/211/213.kif +40 -11
  286. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/264/343/203/252/351/201/225/343/201/204/350/247/222.kif +20 -4
  287. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/267/343/203/247/343/203/274/343/203/200/343/203/263/343/202/252/343/203/252/343/202/270/343/203/212/343/203/253.kif +37 -10
  288. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/267/343/203/247/343/203/274/343/203/200/343/203/263/343/202/267/343/202/271/343/203/206/343/203/240.kif +37 -14
  289. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/202/277/343/203/251/343/203/263/343/203/201/343/203/245/343/203/251/346/210/246/346/263/225.kif +21 -6
  290. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/200/343/202/244/343/203/254/343/202/257/343/203/210/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +18 -7
  291. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/204/343/203/216/351/212/200/344/270/255/351/243/233/350/273/212.kif +41 -14
  292. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/204/343/203/216/351/212/200/345/236/213/345/217/263/347/216/211.kif +38 -12
  293. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/210/343/203/236/343/203/233/343/203/274/343/202/257.kif +49 -8
  294. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/211/343/203/251/343/202/264/343/203/263/343/202/271/343/203/232/343/202/267/343/203/243/343/203/253.kif +67 -0
  295. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/215/343/202/263/345/274/217/343/202/277/343/203/206/346/255/251/345/217/226/343/202/212.kif +16 -6
  296. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/216/343/203/274/343/202/254/343/203/274/343/203/211/346/210/246/346/263/225.kif +29 -8
  297. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/216/343/203/274/343/203/236/343/203/253/344/270/211/351/226/223/351/243/233/350/273/212.kif +26 -8
  298. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/216/343/203/274/343/203/236/343/203/253/345/233/233/351/226/223/351/243/233/350/273/212.kif +14 -5
  299. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/221/343/203/203/343/202/257/343/203/236/343/203/263/346/210/246/346/263/225.kif +22 -4
  300. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/222/343/203/251/343/203/241/346/210/246/346/263/225.kif +25 -6
  301. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/235/343/203/263/343/203/235/343/203/263/346/241/202.kif +19 -6
  302. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/240/343/203/252/343/203/244/343/203/252/346/227/251/347/237/263/347/224/260.kif +22 -6
  303. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/241/343/202/244/343/203/211/343/202/267/343/202/271/343/203/206/343/203/240.kif +11 -2
  304. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/241/343/203/252/343/202/261/343/203/263/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +19 -6
  305. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/242/343/203/216/343/203/254/343/203/274/343/203/253/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +39 -9
  306. data/lib/bioshogi/analysis//346/210/246/346/263/225//{351/207/221/351/212/200/346/251/213.kif → 343/203/252/343/203/203/343/203/201/343/203/226/343/203/252/343/203/203/343/202/270.kif} +21 -9
  307. data/lib/bioshogi/analysis//346/210/246/346/263/225//343/203/254/343/202/260/343/202/271/343/203/232.kif +26 -7
  308. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/346/211/213/346/220/215/350/247/222/346/217/233/343/202/217/343/202/212.kif +42 -13
  309. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/347/233/264/347/267/232/347/251/264/347/206/212.kif +42 -12
  310. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/351/226/223/351/243/233/350/273/212.kif +14 -3
  311. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/351/226/223/351/243/233/350/273/212/345/217/263/347/251/264/347/206/212.kif +56 -0
  312. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/346/256/265/345/217/263/347/216/211.kif +39 -13
  313. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/351/226/223/351/243/233/350/273/212.kif +23 -6
  314. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/351/226/223/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +13 -6
  315. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/351/226/223/351/243/233/350/273/212/350/227/244/344/272/225/343/202/267/343/202/271/343/203/206/343/203/240.kif +14 -5
  316. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/213/347/224/272/346/265/201/344/270/211/351/226/223/351/243/233/350/273/212.kif +24 -6
  317. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/216/237/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +34 -11
  318. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/216/237/346/265/201/347/233/270/346/216/233/343/201/213/343/202/212.kif +25 -7
  319. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/216/237/351/243/233/350/273/212.kif +32 -4
  320. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/272/247/351/243/233/350/273/212.kif +30 -5
  321. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/351/243/233/350/273/212.kif +26 -0
  322. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +13 -5
  323. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/351/243/233/350/273/212/345/267/246/347/251/264/347/206/212.kif +57 -18
  324. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/270/345/261/261/343/203/257/343/202/257/343/203/201/343/203/263.kif +18 -5
  325. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/271/205/344/277/235/346/265/201/346/227/251/347/237/263/347/224/260.kif +18 -7
  326. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/271/235/351/226/223/351/243/233/350/273/212.kif +20 -6
  327. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/271/235/351/226/223/351/243/233/350/273/212/345/267/246/347/251/264/347/206/212.kif +34 -4
  328. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/205/210/346/211/213/344/270/255/351/243/233/350/273/212.kif +14 -5
  329. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/210/235/346/211/213/342/226/2623/345/205/255/346/255/251/346/210/246/346/263/225.kif +9 -0
  330. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/210/235/346/211/213/342/226/2627/345/205/253/351/212/200/346/210/246/346/263/225.kif +16 -7
  331. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/210/235/346/211/213/342/226/2627/345/205/253/351/243/233/346/210/246/346/263/225.kif +13 -4
  332. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/212/233/346/210/246.kif +146 -21
  333. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/212/240/350/227/244/346/265/201/350/242/226/351/243/233/350/273/212.kif +28 -8
  334. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/213/207/346/260/227/346/265/201.kif +20 -5
  335. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/215/207/347/224/260/345/274/217/347/237/263/347/224/260/346/265/201.kif +19 -7
  336. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/216/237/345/247/213/344/270/255/351/243/233/350/273/212.kif +12 -3
  337. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/216/237/345/247/213/346/243/222/351/212/200.kif +22 -6
  338. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +10 -6
  339. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/345/267/246/347/276/216/346/277/203.kif +28 -8
  340. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/346/200/245/346/210/246.kif +26 -7
  341. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/350/266/205/346/200/245/346/210/246.kif +16 -1
  342. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/347/216/211.kif +24 -6
  343. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/220/214/345/236/213/347/237/242/345/200/211.kif +18 -5
  344. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +23 -4
  345. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/233/233/346/211/213/350/247/222.kif +19 -6
  346. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/233/233/351/226/223/351/243/233/350/273/212.kif +11 -2
  347. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/233/233/351/226/223/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +13 -6
  348. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/234/260/344/270/213/351/211/204/351/243/233/350/273/212.kif +40 -12
  349. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/241/232/347/224/260/343/202/271/343/203/232/343/202/267/343/203/243/343/203/253.kif +29 -8
  350. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/244/251/345/275/246/346/265/201/342/226/2626/345/205/255/350/247/222.kif +10 -2
  351. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/244/251/345/275/246/346/265/201/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +22 -7
  352. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/254/211/351/207/216/346/265/201.kif +29 -8
  353. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/256/244/345/262/241/343/202/267/343/202/271/343/203/206/343/203/240.kif +52 -11
  354. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/257/276/346/214/257/343/202/212/346/214/201/344/271/205/346/210/246.kif +14 -4
  355. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/261/213/346/225/267/346/265/201/344/272/214/346/236/232/351/212/200.kif +30 -6
  356. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/261/213/346/225/267/346/265/201/344/272/214/346/236/232/351/212/200/346/243/222/351/212/200/345/236/213.kif +26 -6
  357. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/261/261/345/264/216/346/265/201/343/203/221/343/203/203/343/202/257/343/203/236/343/203/263.kif +10 -1
  358. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/261/261/347/224/260/345/256/232/350/267/241.kif +16 -5
  359. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/267/246/347/276/216/346/277/203/346/200/245/346/210/246.kif +33 -11
  360. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/271/273/346/203/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +20 -7
  361. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/274/225/343/201/215/350/247/222.kif +38 -0
  362. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/277/205/347/254/221/343/201/262/343/201/243/343/201/213/343/201/221/346/210/246/346/263/225.kif +20 -7
  363. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/210/270/350/276/272/346/265/2014/342/206/2223/346/210/246/346/263/225.kif +14 -5
  364. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/343/203/235/343/203/263/343/203/235/343/203/263/346/241/202.kif +25 -7
  365. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/345/254/211/351/207/216/346/265/201.kif +35 -7
  366. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/346/235/221/347/224/260/343/202/267/343/202/271/343/203/206/343/203/240.kif +35 -7
  367. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/347/237/263/347/224/260/346/265/201.kif +15 -6
  368. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/347/261/263/351/225/267/347/216/211.kif +31 -7
  369. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/351/242/250/350/273/212.kif +13 -5
  370. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/351/254/274/346/256/272/343/201/227.kif +23 -6
  371. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/227/251/347/237/263/347/224/260.kif +12 -3
  372. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/227/251/347/271/260/343/202/212/351/207/221.kif +40 -0
  373. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/227/251/347/271/260/343/202/212/351/212/200.kif +36 -0
  374. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/232/264/351/212/200.kif +24 -8
  375. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/234/250/346/235/221/345/256/232/350/267/241.kif +39 -11
  376. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/235/221/347/224/260/343/202/267/343/202/271/343/203/206/343/203/240.kif +11 -2
  377. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/241/220/345/261/261/346/265/201/343/202/277/343/203/206/346/255/251/346/243/222/351/212/200.kif +28 -9
  378. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/347/216/211.kif +14 -4
  379. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/347/216/211/350/242/226/351/243/233/350/273/212.kif +47 -0
  380. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/351/207/221.kif +23 -6
  381. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/351/212/200.kif +19 -4
  382. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/256/344/270/213/343/202/267/343/202/271/343/203/206/343/203/240.kif +30 -11
  383. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/256/345/256/211/346/265/201/350/242/226/351/243/233/350/273/212/347/251/264/347/206/212.kif +17 -4
  384. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/245/240/346/234/254/345/274/217/347/237/263/347/224/260/346/265/201.kif +34 -11
  385. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/245/265/351/231/220/346/227/251/347/271/260/343/202/212/351/212/200.kif +24 -6
  386. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/250/252/346/255/251/345/217/226/343/202/212.kif +23 -4
  387. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/270/205/351/207/216/346/265/201/345/262/220/351/230/234/346/210/246/346/263/225.kif +19 -5
  388. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/216/211/351/240/255/344/275/215/345/217/226/343/202/212.kif +15 -5
  389. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/216/211/351/240/255/351/212/200.kif +34 -9
  390. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/256/343/201/217/343/202/211/343/201/276/343/201/227/346/210/246/346/263/225.kif +11 -1
  391. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/270/346/214/257/343/202/212/351/243/233/350/273/212.kif +1 -1
  392. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/270/346/216/233/343/201/213/343/202/212.kif +12 -3
  393. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/270/346/216/233/343/201/213/343/202/212/346/243/222/351/212/200.kif +21 -6
  394. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/270/346/250/252/346/255/251/345/217/226/343/202/212.kif +33 -6
  395. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/233/270/347/255/213/351/201/225/343/201/204/350/247/222.kif +23 -11
  396. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/234/237/351/203/250/346/265/201.kif +45 -17
  397. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211.kif +36 -0
  398. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/342/226/2623/344/270/203/351/212/200/346/210/246/346/263/225.kif +31 -8
  399. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/344/270/255/351/243/233/350/273/212.kif +15 -4
  400. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/345/217/263/347/216/211.kif +17 -5
  401. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/210/246/346/263/225}//347/237/242/345/200/211/346/226/26024/346/211/213/347/265/204.kif +19 -6
  402. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/346/227/24724/346/211/213/347/265/204.kif +53 -0
  403. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/346/243/222/351/212/200.kif +29 -10
  404. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/242/345/200/211/346/265/201/344/270/255/351/243/233/350/273/212.kif +13 -3
  405. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/263/347/224/260/346/265/201.kif +42 -14
  406. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/237/263/347/224/260/346/265/201/346/234/254/347/265/204/343/201/277.kif +24 -4
  407. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/245/236/345/220/211/346/265/201/344/270/211/351/226/223/351/243/233/350/273/212.kif +13 -4
  408. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/250/262/345/272/255/346/210/246/346/263/225.kif +14 -5
  409. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/251/264/350/247/222/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +13 -4
  410. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/251/264/350/247/222/346/210/246/346/263/225.kif +42 -12
  411. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/251/272/344/270/255/346/210/246.kif +306 -0
  412. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/253/213/347/237/263/346/265/201/345/233/233/351/226/223/351/243/233/350/273/212.kif +24 -5
  413. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/253/257/346/243/222/351/212/200.kif +22 -6
  414. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/253/271/351/203/250/343/202/271/343/203/232/343/202/267/343/203/243/343/203/253.kif +25 -5
  415. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/255/213/351/201/225/343/201/204/350/247/222.kif +24 -9
  416. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/255/213/351/201/225/343/201/204/350/247/222/350/237/273/345/234/260/347/215/204/346/210/246/346/263/225.kif +19 -9
  417. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/255/213/351/201/225/343/201/204/350/247/222/351/230/252/347/224/260/346/265/201.kif +63 -0
  418. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/261/263/351/225/267/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +55 -18
  419. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/263/270/350/260/267/346/265/201/345/217/263/347/216/211.kif +37 -11
  420. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/276/275/347/224/237/345/274/217/350/242/226/351/243/233/350/273/212.kif +39 -10
  421. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/276/275/347/224/237/346/265/201/345/217/263/347/216/211.kif +24 -7
  422. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/200/200/351/276/215/343/201/262/343/201/255/343/202/212/351/243/233/350/273/212.kif +14 -3
  423. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/200/200/351/276/215/345/233/233/351/226/223/351/243/233/350/273/212.kif +16 -6
  424. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/204/207/343/202/267/343/202/271/343/203/206/343/203/240.kif +32 -4
  425. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/205/260/346/216/233/343/201/221/351/207/221.kif +29 -0
  426. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/205/260/346/216/233/343/201/221/351/212/200.kif +20 -5
  427. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/212/261/346/235/221/346/265/201/345/220/215/345/217/244/345/261/213/346/210/246/346/263/225.kif +24 -10
  428. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/213/261/343/201/241/343/202/203/343/202/223/346/265/201/344/270/255/351/243/233/350/273/212.kif +40 -8
  429. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/213/261/346/230/245/346/265/201/343/201/213/343/201/276/343/201/204/343/201/237/343/201/241/346/210/246/346/263/225.kif +37 -13
  430. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/213/261/346/230/245/346/265/201/343/202/253/343/203/241/343/203/254/343/202/252/343/203/263.kif +38 -9
  431. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/217/205/344/272/225/346/265/201/344/270/211/351/226/223/351/243/233/350/273/212.kif +18 -4
  432. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/217/234/343/200/205/346/262/263/346/265/201/342/226/2634/345/233/233/350/247/222.kif +10 -2
  433. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/217/234/343/200/205/346/262/263/346/265/201/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +43 -14
  434. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/227/244/344/272/225/343/202/267/343/202/271/343/203/206/343/203/240.kif +25 -5
  435. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/227/244/346/243/256/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +25 -6
  436. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/242/226/351/243/233/350/273/212.kif +56 -15
  437. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/243/217/343/202/242/343/203/222/343/203/253/346/210/246/346/263/225.kif +13 -4
  438. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/344/272/244/346/217/233/346/214/257/343/202/212/351/243/233/350/273/212.kif +32 -10
  439. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212.kif +19 -5
  440. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212/345/217/263/347/216/211.kif +42 -15
  441. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212/346/227/251/347/271/260/343/202/212/351/212/200.kif +47 -16
  442. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212/346/243/222/351/212/200.kif +29 -9
  443. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212/350/205/260/346/216/233/343/201/221/351/212/200.kif +23 -6
  444. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/346/217/233/343/202/217/343/202/212/350/205/260/346/216/233/343/201/221/351/212/200/346/227/247/345/236/213.kif +23 -6
  445. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/351/201/223/343/202/252/343/203/274/343/203/227/343/203/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +12 -3
  446. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/247/222/351/240/255/346/255/251/346/210/246/346/263/225.kif +37 -10
  447. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/266/205/346/200/245/346/210/246.kif +24 -5
  448. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/266/205/351/200/237/342/226/2623/344/270/203/351/212/{200/346/210/246/346/263/225.kif → 200.kif} +32 -11
  449. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/200/206/346/243/222/351/212/200.kif +17 -4
  450. data/lib/bioshogi/analysis//346/210/246/346/263/225//{345/257/276/347/237/242/345/200/211/346/200/245/346/210/246 → 351/200/237/346/224/273}/346/243/222/351/212/200.kif +39 -11
  451. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/201/240/345/261/261/346/265/201.kif +33 -8
  452. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/203/275/346/210/220/346/265/201/342/226/2633/344/270/200/351/207/221.kif +21 -5
  453. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/207/221/346/262/242/346/265/201.kif +10 -1
  454. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/207/221/347/204/241/345/217/214/346/200/245/346/210/246.kif +33 -8
  455. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/210/264/346/234/250/346/265/201/346/227/251/347/237/263/347/224/260.kif +26 -7
  456. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/212/200/351/233/262/351/233/200.kif +21 -8
  457. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/214/206/345/210/200/346/210/246/346/263/225.kif +22 -5
  458. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/216/226/351/216/214/351/212/200.kif +23 -6
  459. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/217/241/343/201/256/345/267/246/346/227/251/347/271/260/343/202/212/351/212/200.kif +103 -0
  460. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/226/223/345/256/256/344/271/205/345/244/242/346/265/201.kif +28 -6
  461. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/230/252/347/224/260/346/265/2012/346/211/213/347/233/256/342/226/2639/345/233/233/346/255/251.kif +10 -1
  462. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/230/252/347/224/260/346/265/201/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +27 -8
  463. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/230/277/344/271/205/346/264/245/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +24 -8
  464. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/231/275/345/213/225/346/214/257/343/202/212/351/243/233/350/273/212.kif +9 -1
  465. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/233/200/345/210/272/343/201/227.kif +30 -11
  466. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/233/201/346/234/250/345/217/263/347/216/211.kif +38 -8
  467. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/233/201/346/234/250/346/210/246/346/263/225.kif +192 -0
  468. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/235/222/351/207/216/346/265/201.kif +20 -5
  469. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/242/250/350/273/212.kif +40 -8
  470. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/243/233/351/250/250/343/201/256/344/270/255/351/243/233/350/273/212/345/220/210/346/216/214/351/200/240/343/202/212.kif +28 -10
  471. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/243/257/345/263/266/346/265/201/345/274/225/343/201/215/350/247/222/346/210/246/346/263/225.kif +15 -5
  472. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/243/257/345/263/266/346/265/201/347/233/270/346/216/233/343/201/213/343/202/212/345/274/225/343/201/215/350/247/{222/346/210/246/346/263/225.kif → 222.kif} +21 -6
  473. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/253/230/347/224/260/346/265/201/345/267/246/347/216/211.kif +28 -8
  474. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/254/274/345/205/255/346/265/201/343/201/251/343/201/243/343/201/213/343/202/223/351/243/233/350/273/212.kif +25 -7
  475. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/254/274/346/256/272/343/201/227.kif +19 -4
  476. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/254/274/346/256/272/343/201/227/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +21 -6
  477. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/255/224/347/225/214/345/233/233/351/226/223/351/243/233/350/273/212.kif +13 -4
  478. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/263/245/345/210/272/343/201/227.kif +14 -5
  479. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/267/272/345/256/256/345/256/232/350/267/241.kif +23 -8
  480. data/lib/bioshogi/analysis//346/211/213/347/255/213/2/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210/91/343/201/256/351/243/233/343/201/257/343/203/255/343/202/261/343/203/203/343/203/210/343/201/256/344/270/200/351/203/250/343/201/250/350/246/213/343/201/252/343/201/225/343/201/252/343/201/204_/346/211/223/343/201/243/343/201/237/345/240/264/345/220/210.kif +30 -0
  481. data/lib/bioshogi/analysis//346/211/213/347/255/213/2/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210/91/343/201/256/351/243/233/343/201/257/343/203/255/343/202/261/343/203/203/343/203/210/343/201/256/344/270/200/351/203/250/343/201/250/350/246/213/343/201/252/343/201/225/343/201/252/343/201/204_/347/275/256/343/201/204/343/201/246/343/201/202/343/202/213/345/240/264/345/220/210.kif +30 -0
  482. data/lib/bioshogi/analysis//346/211/213/347/255/213/2/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210.kif +10 -5
  483. data/lib/bioshogi/analysis//346/211/213/347/255/213/3/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210.kif +10 -2
  484. data/lib/bioshogi/analysis//346/211/213/347/255/213/4/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210.kif +10 -2
  485. data/lib/bioshogi/analysis//346/211/213/347/255/213/5/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210.kif +10 -2
  486. data/lib/bioshogi/analysis//346/211/213/347/255/213/6/346/256/265/343/203/255/343/202/261/343/203/203/343/203/210.kif +12 -5
  487. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/223/343/201/263/343/202/223/346/224/273/343/202/201.kif +13 -2
  488. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/237/343/201/231/343/201/215/343/201/256/350/247/222.kif +9 -0
  489. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/237/343/201/231/343/201/215/343/201/256/351/212/200.kif +9 -0
  490. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/237/343/201/237/343/201/215/343/201/256/346/255/251.kif +18 -11
  491. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/250/351/207/221/346/224/273/343/202/201.kif +50 -0
  492. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/201/265/343/202/223/343/201/251/343/201/227/343/201/256/346/241/202.kif +9 -0
  493. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/202/277/343/203/203/343/203/201/343/203/200/343/202/246/343/203/263.kif +58 -0
  494. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/217/343/203/203/343/203/201/351/226/211/351/216/226.kif +39 -0
  495. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/221/343/203/263/343/203/{204 → 206/343/202/243}/343/202/222/350/204/261/343/201/220.kif +12 -2
  496. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/221/343/203/263/343/203/211/343/203/251/343/201/256/346/255/251.kif +32 -0
  497. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/235/343/203/274/343/203/263/343/203/217/343/203/263/343/202/277/343/203/274.kif +53 -0
  498. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/236/343/203/240/343/202/267/343/201/256/343/201/250/351/207/221.kif +60 -0
  499. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/237/343/203/213/343/203/236/343/203/252/343/202/271/343/203/210.kif +98 -0
  500. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//343/203/255/343/202/261/343/203/203/343/203/210.kif +10 -2
  501. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/270/200/351/226/223/347/253/234.kif +9 -0
  502. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/270/211/346/241/202/346/207/220/345/210/203.kif +50 -0
  503. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/270/213/346/256/265/343/201/256/351/246/231.kif +9 -0
  504. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/270/241/345/217/226/343/202/212.kif +30 -0
  505. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/270/255/346/256/265/347/216/211.kif +34 -0
  506. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/272/214/346/236/232/351/243/233/350/273/212.kif +75 -0
  507. data/lib/bioshogi/analysis//346/211/213/347/255/213//344/275/215/343/201/256/347/242/272/344/277/235.kif +9 -8
  508. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/205/245/347/216/211.kif +37 -0
  509. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/205/250/351/247/222.kif +50 -0
  510. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/211/262/343/202/212/346/211/223/343/201/241/343/201/256/351/212/200.kif +9 -0
  511. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/213/235/343/201/241/347/242/2725/344/270/211/343/201/250.kif +38 -0
  512. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/217/214/347/216/211/346/216/245/350/277/221.kif +43 -0
  513. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/217/214/347/253/234/345/217/214/351/246/254/351/231/243.kif +34 -0
  514. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/217/214/351/246/254/347/265/220/347/225/214.kif +36 -0
  515. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//345/220/212/343/202/213/343/201/227/346/241/202.kif +11 -2
  516. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//345/220/215/344/272/272/343/201/253/345/256/232/350/267/241/343/201/252/343/201/227.kif +30 -8
  517. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/234/237/344/270/213/345/272/247/343/201/256/346/255/251.kif +17 -3
  518. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/236/202/343/202/214/346/255/251.kif +9 -0
  519. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/240/205/351/231/243/343/201/256/351/207/221.kif +40 -0
  520. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/243/201/351/207/221.kif +30 -0
  521. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/243/201/351/212/200.kif +25 -0
  522. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//345/244/247/351/247/222/343/202/263/343/203/263/343/203/227/343/203/252/343/203/274/343/203/210.kif +36 -11
  523. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//345/244/247/351/247/222/345/205/250/343/203/226/343/203/203/343/203/201.kif +30 -9
  524. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/256/210/343/202/212/343/201/256/351/246/254.kif +46 -0
  525. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/260/201/351/246/231/351/200/243/350/210/236.kif +51 -0
  526. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/260/273/351/207/221.kif +13 -2
  527. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/260/273/351/212/200.kif +13 -6
  528. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/261/205/351/243/233/350/273/212/343/201/256/347/250/216/351/207/221.kif +12 -3
  529. data/lib/bioshogi/analysis//{345/202/231/350/200/203//350/203/214/346/260/264/343/201/256/351/231/243.kif → 346/211/213/347/255/213//345/261/215/343/201/256/350/210/236.kif} +31 -9
  530. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/271/275/351/234/212/350/247/222.kif +11 -7
  531. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/272/217/347/233/244/343/201/257/350/247/222/343/202/210/343/202/212/351/243/233/350/273/212.kif +38 -0
  532. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/272/217/347/233/244/343/201/257/351/243/233/350/273/212/343/202/210/343/202/212/350/247/222.kif +45 -0
  533. data/lib/bioshogi/analysis//346/211/213/347/255/213//345/272/225/346/255/251/343/201/253/351/246/231.kif +49 -0
  534. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/200/245/346/211/200/343/201/256/346/241/202.kif +33 -0
  535. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/211/213/345/276/227.kif +34 -0
  536. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/211/213/346/220/215.kif +34 -0
  537. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/212/200/343/201/202/343/202/212/343/201/256/346/241/202.kif +57 -0
  538. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/216/247/343/201/210/343/201/256/346/241/202.kif +9 -0
  539. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/241/202/351/240/255/343/201/256/346/241/202.kif +36 -0
  540. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/241/202/351/240/255/343/201/256/347/216/211.kif +32 -0
  541. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/241/202/351/240/255/343/201/256/351/212/200.kif +9 -0
  542. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/241/202/351/240/255/346/224/273/343/202/201.kif +49 -0
  543. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/255/251/343/201/256/351/214/254/351/207/221/350/241/223/345/270/253.kif +50 -0
  544. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/255/251/345/210/207/343/202/214.kif +49 -0
  545. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/255/251/350/243/217/343/201/256/346/255/251.kif +35 -0
  546. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/255/251/350/243/217/343/201/256/351/246/231.kif +46 -0
  547. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/255/251/351/240/255/343/201/256/346/241/202.kif +13 -8
  548. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/265/256/343/201/215/351/243/233/350/273/212.kif +33 -0
  549. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/272/226/347/216/213/346/211/213/350/247/222.kif +30 -0
  550. data/lib/bioshogi/analysis//346/211/213/347/255/213//346/272/226/347/216/213/346/211/213/351/243/233/350/273/212.kif +33 -0
  551. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/211/345/210/207/343/202/212.kif +29 -0
  552. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//347/216/211/345/215/230/351/250/216.kif +20 -4
  553. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/211/351/240/255/346/210/246.kif +35 -0
  554. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/211/351/240/255/346/224/273/343/202/201.kif +49 -0
  555. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/211/351/243/233/346/216/245/350/277/221.kif +36 -0
  556. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/213/346/211/213/350/247/222.kif +30 -0
  557. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/216/213/346/211/213/351/243/233/350/273/212.kif +34 -0
  558. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/224/260/346/245/275/345/210/272/343/201/227.kif +18 -6
  559. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//347/251/264/347/206/212/343/201/256/345/247/277/347/204/274/343/201/215.kif +33 -12
  560. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/251/264/347/206/212/345/206/215/347/224/237.kif +68 -0
  561. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/251/272/344/270/255/346/210/246.kif +32 -0
  562. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/252/201/343/201/215/346/215/250/343/201/246.kif +37 -0
  563. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/252/201/343/201/215/351/201/225/343/201/204/343/201/256/346/255/251.kif +33 -10
  564. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/253/234/345/210/207/343/202/212.kif +34 -0
  565. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/253/257/346/224/273/343/202/201.kif +34 -0
  566. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/253/257/347/216/211.kif +43 -0
  567. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/253/257/347/216/211/343/201/253/343/201/257/347/253/257/346/255/251.kif +13 -2
  568. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/266/231/343/201/216/346/241/202.kif +11 -2
  569. data/lib/bioshogi/analysis//346/211/213/347/255/213//347/266/231/343/201/216/346/255/251.kif +13 -10
  570. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/202/251/351/207/221.kif +9 -0
  571. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/202/251/351/212/200.kif +9 -0
  572. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/205/271/351/207/221.kif +11 -0
  573. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/205/271/351/212/200.kif +15 -4
  574. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/207/252/351/231/243/350/247/222.kif +39 -0
  575. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/207/252/351/231/243/351/243/233/350/273/212.kif +39 -0
  576. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/223/213/346/255/251//351/212/200/343/201/253/343/202/210/343/202/213/350/223/213/346/255/251.kif +44 -0
  577. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/223/213/346/255/251.kif +64 -0
  578. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/243/270/347/216/211.kif +38 -0
  579. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/243/276/351/207/221.kif +13 -6
  580. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/243/276/351/212/200.kif +9 -0
  581. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/343/201/253/343/201/257/350/247/222.kif +36 -0
  582. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/343/201/253/343/201/257/351/243/233/350/273/212.kif +34 -0
  583. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/343/201/253/343/202/210/343/202/213/344/270/241/345/217/226/343/202/212.kif +30 -0
  584. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/344/270/215/346/210/220.kif +36 -0
  585. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/344/272/244/346/217/233.kif +34 -0
  586. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/345/210/207/343/202/212.kif +45 -0
  587. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/247/222/351/240/255/346/224/273/343/202/201.kif +85 -0
  588. data/lib/bioshogi/analysis//346/211/213/347/255/213//350/267/263/343/201/255/351/201/225/343/201/204/343/201/256/346/241/202.kif +10 -0
  589. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/200/200/345/240/264/343/201/256/351/207/221.kif +34 -0
  590. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/200/243/346/211/223/343/201/256/346/255/251.kif +10 -0
  591. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/201/223/345/240/264/345/207/272/347/246/201.kif +28 -0
  592. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/201/240/350/246/213/343/201/256/350/247/222.kif +15 -10
  593. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//351/203/275/350/251/260/343/202/201.kif +27 -8
  594. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/207/221/345/272/225/343/201/256/346/255/251.kif +9 -0
  595. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/207/221/345/272/225/343/201/256/351/246/231.kif +35 -0
  596. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/207/221/351/212/200/343/202/263/343/203/263/343/203/227/343/203/252/343/203/274/343/203/210.kif +42 -0
  597. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/207/221/351/240/255/343/201/256/346/241/202.kif +13 -8
  598. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/212/200/343/201/260/343/201/225/343/201/277.kif +12 -1
  599. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/212/200/344/270/215/346/210/220.kif +48 -0
  600. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/212/200/345/206/240/343/201/256/345/260/217/351/203/250/345/261/213.kif +28 -11
  601. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/212/200/350/243/276/343/201/256/346/255/251.kif +39 -0
  602. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//351/233/252/351/232/240/350/251/260/343/202/201.kif +11 -4
  603. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/240/255/351/207/221.kif +9 -0
  604. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/240/255/351/212/200.kif +9 -0
  605. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/343/201/253/343/201/257/350/247/222.kif +34 -0
  606. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/343/201/253/343/201/257/351/243/233/350/273/212.kif +34 -0
  607. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/343/201/253/343/202/210/343/202/213/344/270/241/345/217/226/343/202/212.kif +30 -0
  608. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/344/270/215/346/210/220.kif +28 -0
  609. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/345/205/210/344/272/244/346/217/233.kif +40 -0
  610. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/243/233/350/273/212/345/210/207/343/202/212.kif +34 -0
  611. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/246/254/343/201/253/343/201/257/350/247/222.kif +36 -0
  612. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/246/254/343/201/253/343/201/257/351/243/233/350/273/212.kif +34 -0
  613. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/246/254/345/210/207/343/202/212.kif +34 -0
  614. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/247/222/343/201/256/346/214/201/343/201/241/350/205/220/343/202/214.kif +74 -0
  615. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/247/222/345/276/227/343/201/257/346/255/243/347/276/251.kif +60 -0
  616. data/lib/bioshogi/analysis//{345/202/231/350/200/203 → 346/211/213/347/255/213}//351/247/222/346/237/261.kif +42 -17
  617. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/253/230/350/267/263/343/201/263/343/201/256/346/241/202.kif +38 -0
  618. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/276/215/343/201/253/343/201/257/350/247/222.kif +34 -0
  619. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/276/215/343/201/253/343/201/257/351/243/233/350/273/212.kif +34 -0
  620. data/lib/bioshogi/board/basic.rb +5 -4
  621. data/lib/bioshogi/board/csa_formatter.rb +1 -0
  622. data/lib/bioshogi/board/{technique_matcher_methods.rb → detector_methods.rb} +1 -1
  623. data/lib/bioshogi/board/kakinoki_formatter.rb +1 -0
  624. data/lib/bioshogi/board/reader_methods.rb +1 -1
  625. data/lib/bioshogi/board_parser/compare_board_parser.rb +1 -1
  626. data/lib/bioshogi/board_parser/kakinoki_board_parser.rb +7 -3
  627. data/lib/bioshogi/board_parser.rb +1 -1
  628. data/lib/bioshogi/column_soldier_counter.rb +47 -0
  629. data/lib/bioshogi/container/core_methods.rb +36 -8
  630. data/lib/bioshogi/container/execute_methods.rb +32 -1
  631. data/lib/bioshogi/container/players_methods.rb +9 -12
  632. data/lib/bioshogi/container/serialize_methods.rb +7 -6
  633. data/lib/bioshogi/container.rb +8 -4
  634. data/lib/bioshogi/counter_hash.rb +1 -0
  635. data/lib/bioshogi/csa_header_info.rb +2 -1
  636. data/lib/bioshogi/dimension/base.rb +54 -12
  637. data/lib/bioshogi/dimension/column.rb +88 -61
  638. data/lib/bioshogi/dimension/dimension_info.rb +1 -1
  639. data/lib/bioshogi/dimension/row.rb +59 -10
  640. data/lib/bioshogi/{extreme_validator.rb → extreme_detect.rb} +37 -27
  641. data/lib/bioshogi/formatter/akf_builder.rb +9 -11
  642. data/lib/bioshogi/formatter/animation/animation_builder_timeout.rb +1 -1
  643. data/lib/bioshogi/formatter/animation/animation_mp4_builder.rb +1 -0
  644. data/lib/bioshogi/formatter/animation/demo_builder.rb +1 -1
  645. data/lib/bioshogi/formatter/animation/progress_cop.rb +1 -0
  646. data/lib/bioshogi/formatter/core.rb +85 -103
  647. data/lib/bioshogi/formatter/csa_builder.rb +30 -24
  648. data/lib/bioshogi/formatter/ki2_builder.rb +1 -1
  649. data/lib/bioshogi/formatter/kif_builder.rb +8 -10
  650. data/lib/bioshogi/formatter/kif_ki2_shared.rb +10 -17
  651. data/lib/bioshogi/formatter/runner.rb +4 -2
  652. data/lib/bioshogi/freq_piece_info.rb +72 -0
  653. data/lib/bioshogi/hand/drop.rb +1 -1
  654. data/lib/bioshogi/hand/move.rb +50 -1
  655. data/lib/bioshogi/hand/shared.rb +8 -12
  656. data/lib/bioshogi/hand_log.rb +3 -3
  657. data/lib/bioshogi/hand_logs_mod.rb +1 -1
  658. data/lib/bioshogi/input_adapter/abstract_adapter.rb +7 -1
  659. data/lib/bioshogi/input_adapter/ki2_adapter.rb +9 -9
  660. data/lib/bioshogi/input_adapter/sfen_adapter.rb +1 -1
  661. data/lib/bioshogi/input_adapter/shared_validation.rb +2 -4
  662. data/lib/bioshogi/input_parser.rb +1 -1
  663. data/lib/bioshogi/last_action_info.rb +83 -0
  664. data/lib/bioshogi/location.rb +1 -0
  665. data/lib/bioshogi/official_formatter.rb +8 -8
  666. data/lib/bioshogi/order_info.rb +2 -2
  667. data/lib/bioshogi/parser/base.rb +8 -8
  668. data/lib/bioshogi/parser/csa_parser.rb +6 -2
  669. data/lib/bioshogi/parser/header.rb +13 -0
  670. data/lib/bioshogi/parser/inspector.rb +10 -2
  671. data/lib/bioshogi/parser/kakinoki_methods.rb +10 -8
  672. data/lib/bioshogi/parser/ki2_parser.rb +4 -3
  673. data/lib/bioshogi/parser/kif_parser.rb +13 -11
  674. data/lib/bioshogi/parser/pi.rb +58 -21
  675. data/lib/bioshogi/parser/sfen_parser.rb +1 -0
  676. data/lib/bioshogi/parser.rb +5 -1
  677. data/lib/bioshogi/piece/piece_score.rb +8 -8
  678. data/lib/bioshogi/piece/piece_vector.rb +3 -2
  679. data/lib/bioshogi/piece.rb +33 -14
  680. data/lib/bioshogi/piece_box.rb +11 -3
  681. data/lib/bioshogi/place.rb +70 -11
  682. data/lib/bioshogi/player/other_methods.rb +36 -14
  683. data/lib/bioshogi/player/piece_box_methods.rb +1 -1
  684. data/lib/bioshogi/player/pressure_methods.rb +4 -4
  685. data/lib/bioshogi/player/soldier_methods.rb +21 -3
  686. data/lib/bioshogi/player.rb +5 -4
  687. data/lib/bioshogi/player_executor/base.rb +6 -5
  688. data/lib/bioshogi/preset_info.rb +55 -48
  689. data/lib/bioshogi/screen_image/board_methods.rb +5 -1
  690. data/lib/bioshogi/screen_image/piece_font_weight_info.rb +1 -1
  691. data/lib/bioshogi/screen_image/piece_image_info.rb +4 -4
  692. data/lib/bioshogi/sfen_importer.rb +2 -1
  693. data/lib/bioshogi/simple_model.rb +1 -1
  694. data/lib/bioshogi/soldier/detector_methods.rb +109 -0
  695. data/lib/bioshogi/soldier.rb +29 -8
  696. data/lib/bioshogi/soldier_box.rb +1 -0
  697. data/lib/bioshogi/soldier_walker.rb +1 -0
  698. data/lib/bioshogi/tasks/chore.rake +4 -0
  699. data/lib/bioshogi/tasks/extreme_detect.rake +7 -0
  700. data/lib/bioshogi/tasks/perf.rake +5 -0
  701. data/lib/bioshogi/tasks/rdoc.rake +11 -0
  702. data/lib/bioshogi/tasks/report.rake +7 -0
  703. data/lib/bioshogi/tasks/tactic.rake +5 -0
  704. data/lib/bioshogi/tasks/tactic_detector.rake +8 -0
  705. data/lib/bioshogi/v/preset_vectors.rb +101 -37
  706. data/lib/bioshogi/v.rb +1 -1
  707. data/lib/bioshogi/version.rb +1 -1
  708. data/lib/bioshogi.rb +14 -5
  709. data/rdoc/Bioshogi/AI/Brain.html +534 -0
  710. data/rdoc/Bioshogi/AI/Diver/Base.html +193 -0
  711. data/rdoc/Bioshogi/AI/Diver/NegaAlphaDiver.html +259 -0
  712. data/rdoc/Bioshogi/AI/Diver/NegaAlphaMateDiver.html +369 -0
  713. data/rdoc/Bioshogi/AI/Diver/NegaMaxDiver.html +196 -0
  714. data/rdoc/Bioshogi/AI/Diver/NegaScoutDiver.html +258 -0
  715. data/rdoc/Bioshogi/AI/Diver.html +101 -0
  716. data/rdoc/Bioshogi/AI/Evaluator/Base.html +253 -0
  717. data/rdoc/Bioshogi/AI/Evaluator/Level0.html +107 -0
  718. data/rdoc/Bioshogi/AI/Evaluator/Level1.html +107 -0
  719. data/rdoc/Bioshogi/AI/Evaluator/Level2.html +105 -0
  720. data/rdoc/Bioshogi/AI/Evaluator/Level3.html +212 -0
  721. data/rdoc/Bioshogi/AI/Evaluator/Level4.html +157 -0
  722. data/rdoc/Bioshogi/AI/Evaluator.html +114 -0
  723. data/rdoc/Bioshogi/AI/Versus.html +280 -0
  724. data/rdoc/Bioshogi/AI.html +556 -0
  725. data/rdoc/Bioshogi/AliasMod.html +204 -0
  726. data/rdoc/Bioshogi/AlredyPromoted.html +107 -0
  727. data/rdoc/Bioshogi/AmbiguousFormatError.html +107 -0
  728. data/rdoc/Bioshogi/Analysis/AbbrevExpander.html +259 -0
  729. data/rdoc/Bioshogi/Analysis/AnagumaDetector.html +243 -0
  730. data/rdoc/Bioshogi/Analysis/Atsumeruyo.html +211 -0
  731. data/rdoc/Bioshogi/Analysis/AttackInfo.html +157 -0
  732. data/rdoc/Bioshogi/Analysis/BoardPieceCountsMethods.html +285 -0
  733. data/rdoc/Bioshogi/Analysis/CaptureAnalyzer.html +225 -0
  734. data/rdoc/Bioshogi/Analysis/CaptureDetector.html +113 -0
  735. data/rdoc/Bioshogi/Analysis/ClusterScoreInfo.html +156 -0
  736. data/rdoc/Bioshogi/Analysis/ColumnSoldierCounterMethods.html +252 -0
  737. data/rdoc/Bioshogi/Analysis/CustomAnalyzer.html +214 -0
  738. data/rdoc/Bioshogi/Analysis/CustomDetectorInfo.html +156 -0
  739. data/rdoc/Bioshogi/Analysis/CustomDetectors/AnagumaDetector.html +243 -0
  740. data/rdoc/Bioshogi/Analysis/CustomDetectors/GyokutousenDetector.html +412 -0
  741. data/rdoc/Bioshogi/Analysis/CustomDetectors/HikakukoukanDetector.html +296 -0
  742. data/rdoc/Bioshogi/Analysis/CustomDetectors/HisyakakuKiruDetector.html +249 -0
  743. data/rdoc/Bioshogi/Analysis/CustomDetectors/KakukoukanDetector.html +259 -0
  744. data/rdoc/Bioshogi/Analysis/CustomDetectors/KakunihakakuDetector.html +268 -0
  745. data/rdoc/Bioshogi/Analysis/CustomDetectors/MagicSquareDetector.html +237 -0
  746. data/rdoc/Bioshogi/Analysis/CustomDetectors/NyuugyokuAnagumaDetector.html +338 -0
  747. data/rdoc/Bioshogi/Analysis/CustomDetectors/OutbreakDetector.html +216 -0
  748. data/rdoc/Bioshogi/Analysis/CustomDetectors.html +101 -0
  749. data/rdoc/Bioshogi/Analysis/CustomTriggerInfo.html +156 -0
  750. data/rdoc/Bioshogi/Analysis/DefenseInfo.html +114 -0
  751. data/rdoc/Bioshogi/Analysis/EveryAnalyzer.html +225 -0
  752. data/rdoc/Bioshogi/Analysis/EveryDetector.html +113 -0
  753. data/rdoc/Bioshogi/Analysis/ExecuterDsl.html +998 -0
  754. data/rdoc/Bioshogi/Analysis/FileList.html +158 -0
  755. data/rdoc/Bioshogi/Analysis/FileNormalizer/NormalizeOne.html +202 -0
  756. data/rdoc/Bioshogi/Analysis/FileNormalizer.html +148 -0
  757. data/rdoc/Bioshogi/Analysis/FinalizeTagDetector.html +413 -0
  758. data/rdoc/Bioshogi/Analysis/FinalizeTagFuncInfo.html +113 -0
  759. data/rdoc/Bioshogi/Analysis/FinalizeTagInfo.html +156 -0
  760. data/rdoc/Bioshogi/Analysis/GroupInfo.html +156 -0
  761. data/rdoc/Bioshogi/Analysis/HikakukoukanDetector.html +273 -0
  762. data/rdoc/Bioshogi/Analysis/HisyakakuKiruDetector.html +249 -0
  763. data/rdoc/Bioshogi/Analysis/HorseDetector.html +306 -0
  764. data/rdoc/Bioshogi/Analysis/KakukiriCanceler.html +242 -0
  765. data/rdoc/Bioshogi/Analysis/MagicSquareDetector.html +233 -0
  766. data/rdoc/Bioshogi/Analysis/MotionAnalyzer.html +262 -0
  767. data/rdoc/Bioshogi/Analysis/MotionDetector.html +156 -0
  768. data/rdoc/Bioshogi/Analysis/MotionTriggerTableBuilder.html +155 -0
  769. data/rdoc/Bioshogi/Analysis/NormalizeCheck.html +159 -0
  770. data/rdoc/Bioshogi/Analysis/NoteInfo.html +114 -0
  771. data/rdoc/Bioshogi/Analysis/OutbreakDetector.html +216 -0
  772. data/rdoc/Bioshogi/Analysis/PerformanceBenchmark.html +166 -0
  773. data/rdoc/Bioshogi/Analysis/PlayerMethods.html +336 -0
  774. data/rdoc/Bioshogi/Analysis/RocketDetector.html +252 -0
  775. data/rdoc/Bioshogi/Analysis/ShapeAnalyzer.html +478 -0
  776. data/rdoc/Bioshogi/Analysis/ShapeDetector.html +113 -0
  777. data/rdoc/Bioshogi/Analysis/ShapeInfo.html +156 -0
  778. data/rdoc/Bioshogi/Analysis/SoldierLookupTableMethods.html +285 -0
  779. data/rdoc/Bioshogi/Analysis/SoldierPlaceMethods.html +285 -0
  780. data/rdoc/Bioshogi/Analysis/StyleInfo.html +113 -0
  781. data/rdoc/Bioshogi/Analysis/SugatayakiDetector.html +426 -0
  782. data/rdoc/Bioshogi/Analysis/TacticDetector/SingleValidator.html +212 -0
  783. data/rdoc/Bioshogi/Analysis/TacticDetector.html +216 -0
  784. data/rdoc/Bioshogi/Analysis/TacticHitTurnTableGenerator.html +346 -0
  785. data/rdoc/Bioshogi/Analysis/TacticInfo.html +263 -0
  786. data/rdoc/Bioshogi/Analysis/TacticStat.html +151 -0
  787. data/rdoc/Bioshogi/Analysis/TagBundle/List.html +178 -0
  788. data/rdoc/Bioshogi/Analysis/TagBundle.html +689 -0
  789. data/rdoc/Bioshogi/Analysis/TagIndex.html +534 -0
  790. data/rdoc/Bioshogi/Analysis/TagReporter.html +257 -0
  791. data/rdoc/Bioshogi/Analysis/TechniqueInfo.html +114 -0
  792. data/rdoc/Bioshogi/Analysis/TriggerExpander.html +146 -0
  793. data/rdoc/Bioshogi/Analysis/UsedSoldierCounter.html +229 -0
  794. data/rdoc/Bioshogi/Analysis/XmotionAnalyzer.html +222 -0
  795. data/rdoc/Bioshogi/Analysis/XmotionDetectorInfo.html +204 -0
  796. data/rdoc/Bioshogi/Analysis/XmotionDetectors/HorseDetector.html +306 -0
  797. data/rdoc/Bioshogi/Analysis/XmotionDetectors/Outebisha0Detector.html +270 -0
  798. data/rdoc/Bioshogi/Analysis/XmotionDetectors/OutebishaDetector.html +497 -0
  799. data/rdoc/Bioshogi/Analysis/XmotionDetectors/OutekakuDetector.html +298 -0
  800. data/rdoc/Bioshogi/Analysis/XmotionDetectors/RocketDetector.html +252 -0
  801. data/rdoc/Bioshogi/Analysis/XmotionDetectors/WazaarinokeiDetector.html +276 -0
  802. data/rdoc/Bioshogi/Analysis/XmotionDetectors.html +101 -0
  803. data/rdoc/Bioshogi/Analysis.html +1369 -0
  804. data/rdoc/Bioshogi/Assertion.html +183 -0
  805. data/rdoc/Bioshogi/BeforePlaceNotFound.html +107 -0
  806. data/rdoc/Bioshogi/BioshogiError.html +105 -0
  807. data/rdoc/Bioshogi/Board/Basic.html +203 -0
  808. data/rdoc/Bioshogi/Board/CsaFormatter.html +198 -0
  809. data/rdoc/Bioshogi/Board/DetectorMethods.html +182 -0
  810. data/rdoc/Bioshogi/Board/KakinokiFormatter.html +191 -0
  811. data/rdoc/Bioshogi/Board/ReaderMethods.html +591 -0
  812. data/rdoc/Bioshogi/Board/UpdateMethods.html +406 -0
  813. data/rdoc/Bioshogi/Board.html +264 -0
  814. data/rdoc/Bioshogi/BoardParser/Base.html +282 -0
  815. data/rdoc/Bioshogi/BoardParser/CompareBoardParser.html +527 -0
  816. data/rdoc/Bioshogi/BoardParser/CsaBoardParser.html +214 -0
  817. data/rdoc/Bioshogi/BoardParser/KakinokiBoardParser.html +218 -0
  818. data/rdoc/Bioshogi/BoardParser/SfenBoardParser.html +205 -0
  819. data/rdoc/Bioshogi/BoardParser.html +178 -0
  820. data/rdoc/Bioshogi/BrainProcessingHeavy.html +107 -0
  821. data/rdoc/Bioshogi/CLI.html +116 -0
  822. data/rdoc/Bioshogi/ColumnSoldierCounter.html +299 -0
  823. data/rdoc/Bioshogi/CommonError.html +107 -0
  824. data/rdoc/Bioshogi/ConsumedTimeMinusError.html +107 -0
  825. data/rdoc/Bioshogi/Container/Basic.html +117 -0
  826. data/rdoc/Bioshogi/Container/CheckmateYomiage.html +282 -0
  827. data/rdoc/Bioshogi/Container/Fast.html +159 -0
  828. data/rdoc/Bioshogi/Container/Simple.html +160 -0
  829. data/rdoc/Bioshogi/Container.html +2166 -0
  830. data/rdoc/Bioshogi/Converter.html +226 -0
  831. data/rdoc/Bioshogi/CounterHash.html +226 -0
  832. data/rdoc/Bioshogi/CoverImage/Renderer.html +116 -0
  833. data/rdoc/Bioshogi/CoverImage.html +526 -0
  834. data/rdoc/Bioshogi/CsaHeaderInfo.html +228 -0
  835. data/rdoc/Bioshogi/DeadPieceRuleError.html +107 -0
  836. data/rdoc/Bioshogi/DifferentTurnCommonError.html +107 -0
  837. data/rdoc/Bioshogi/Dimension/Base.html +893 -0
  838. data/rdoc/Bioshogi/Dimension/CharInfo.html +156 -0
  839. data/rdoc/Bioshogi/Dimension/Column.html +873 -0
  840. data/rdoc/Bioshogi/Dimension/DimensionInfo.html +160 -0
  841. data/rdoc/Bioshogi/Dimension/ModuleMethods.html +244 -0
  842. data/rdoc/Bioshogi/Dimension/Row.html +932 -0
  843. data/rdoc/Bioshogi/Dimension.html +109 -0
  844. data/rdoc/Bioshogi/DoublePawnCommonError.html +107 -0
  845. data/rdoc/Bioshogi/ExtremeDetect.html +540 -0
  846. data/rdoc/Bioshogi/FileFormatError.html +107 -0
  847. data/rdoc/Bioshogi/Formatter/AkfBuilder.html +289 -0
  848. data/rdoc/Bioshogi/Formatter/Animation/AnimationApngBuilder.html +178 -0
  849. data/rdoc/Bioshogi/Formatter/Animation/AnimationGifBuilder.html +332 -0
  850. data/rdoc/Bioshogi/Formatter/Animation/AnimationMp4Builder.html +446 -0
  851. data/rdoc/Bioshogi/Formatter/Animation/AnimationWebpBuilder.html +177 -0
  852. data/rdoc/Bioshogi/Formatter/Animation/AnimationZipBuilder.html +277 -0
  853. data/rdoc/Bioshogi/Formatter/Animation/AudioThemeInfo.html +300 -0
  854. data/rdoc/Bioshogi/Formatter/Animation/DemoBuilder.html +150 -0
  855. data/rdoc/Bioshogi/Formatter/Animation/FfmpegError.html +105 -0
  856. data/rdoc/Bioshogi/Formatter/Animation/ProgressCop.html +522 -0
  857. data/rdoc/Bioshogi/Formatter/Animation/SerialFilenameGenerator.html +402 -0
  858. data/rdoc/Bioshogi/Formatter/Animation/SystemSupport.html +271 -0
  859. data/rdoc/Bioshogi/Formatter/Animation.html +509 -0
  860. data/rdoc/Bioshogi/Formatter/Core.html +1047 -0
  861. data/rdoc/Bioshogi/Formatter/CsaBuilder.html +314 -0
  862. data/rdoc/Bioshogi/Formatter/Ki2Builder.html +166 -0
  863. data/rdoc/Bioshogi/Formatter/KifBuilder.html +175 -0
  864. data/rdoc/Bioshogi/Formatter/Runner.html +249 -0
  865. data/rdoc/Bioshogi/Formatter.html +631 -0
  866. data/rdoc/Bioshogi/FreqPieceInfo.html +216 -0
  867. data/rdoc/Bioshogi/Hand/Drop.html +446 -0
  868. data/rdoc/Bioshogi/Hand/Move.html +668 -0
  869. data/rdoc/Bioshogi/Hand.html +551 -0
  870. data/rdoc/Bioshogi/HandLog.html +581 -0
  871. data/rdoc/Bioshogi/HandLogs.html +212 -0
  872. data/rdoc/Bioshogi/HoldPieceNotFound.html +107 -0
  873. data/rdoc/Bioshogi/HoldPieceNotFound2.html +107 -0
  874. data/rdoc/Bioshogi/IllegibleFormat.html +107 -0
  875. data/rdoc/Bioshogi/InputAdapter/AbstractAdapter.html +600 -0
  876. data/rdoc/Bioshogi/InputAdapter/CsaAdapter.html +348 -0
  877. data/rdoc/Bioshogi/InputAdapter/Ki2Adapter.html +346 -0
  878. data/rdoc/Bioshogi/InputAdapter/KifAdapter.html +322 -0
  879. data/rdoc/Bioshogi/InputAdapter/SfenAdapter.html +357 -0
  880. data/rdoc/Bioshogi/InputAdapter.html +614 -0
  881. data/rdoc/Bioshogi/InputParser.html +301 -0
  882. data/rdoc/Bioshogi/KanjiNumber.html +279 -0
  883. data/rdoc/Bioshogi/KeyNotFound.html +107 -0
  884. data/rdoc/Bioshogi/KifuFormatInfo.html +160 -0
  885. data/rdoc/Bioshogi/LastActionInfo.html +245 -0
  886. data/rdoc/Bioshogi/Location.html +744 -0
  887. data/rdoc/Bioshogi/MainClock.html +253 -0
  888. data/rdoc/Bioshogi/Media.html +576 -0
  889. data/rdoc/Bioshogi/MementoStackEmpty.html +107 -0
  890. data/rdoc/Bioshogi/MovableBattlerNotFound.html +107 -0
  891. data/rdoc/Bioshogi/MustNotHappen.html +107 -0
  892. data/rdoc/Bioshogi/NoPromotablePiece.html +107 -0
  893. data/rdoc/Bioshogi/NotFoundOnBoard.html +107 -0
  894. data/rdoc/Bioshogi/NotPromotable.html +107 -0
  895. data/rdoc/Bioshogi/OfficialFormatter.html +334 -0
  896. data/rdoc/Bioshogi/OrderInfo.html +113 -0
  897. data/rdoc/Bioshogi/Parser/Base.html +423 -0
  898. data/rdoc/Bioshogi/Parser/BodParser.html +105 -0
  899. data/rdoc/Bioshogi/Parser/CsaParser.html +227 -0
  900. data/rdoc/Bioshogi/Parser/Header.html +366 -0
  901. data/rdoc/Bioshogi/Parser/Inspector.html +233 -0
  902. data/rdoc/Bioshogi/Parser/Ki2Parser.html +174 -0
  903. data/rdoc/Bioshogi/Parser/KifParser.html +185 -0
  904. data/rdoc/Bioshogi/Parser/Pi.html +589 -0
  905. data/rdoc/Bioshogi/Parser/SfenParser.html +201 -0
  906. data/rdoc/Bioshogi/Parser/TimeParser.html +191 -0
  907. data/rdoc/Bioshogi/Parser.html +616 -0
  908. data/rdoc/Bioshogi/Piece/EkScoreInfo.html +123 -0
  909. data/rdoc/Bioshogi/Piece/PieceCsa.html +190 -0
  910. data/rdoc/Bioshogi/Piece/PiecePressure.html +156 -0
  911. data/rdoc/Bioshogi/Piece/PieceScale.html +113 -0
  912. data/rdoc/Bioshogi/Piece/PieceScore.html +240 -0
  913. data/rdoc/Bioshogi/Piece/PieceVector.html +200 -0
  914. data/rdoc/Bioshogi/Piece/YomiagePieceInfo.html +190 -0
  915. data/rdoc/Bioshogi/Piece.html +1317 -0
  916. data/rdoc/Bioshogi/PieceAlredyExist.html +107 -0
  917. data/rdoc/Bioshogi/PieceBox.html +791 -0
  918. data/rdoc/Bioshogi/PieceNotFound.html +107 -0
  919. data/rdoc/Bioshogi/PieceNotFoundOnBoard.html +107 -0
  920. data/rdoc/Bioshogi/Place.html +1467 -0
  921. data/rdoc/Bioshogi/Player/OtherMethods.html +395 -0
  922. data/rdoc/Bioshogi/Player/PieceBoxMethods.html +312 -0
  923. data/rdoc/Bioshogi/Player/PressureMethods.html +246 -0
  924. data/rdoc/Bioshogi/Player/SoldierMethods.html +420 -0
  925. data/rdoc/Bioshogi/Player.html +605 -0
  926. data/rdoc/Bioshogi/PlayerExecutor/Base.html +579 -0
  927. data/rdoc/Bioshogi/PlayerExecutor/Brain.html +107 -0
  928. data/rdoc/Bioshogi/PlayerExecutor/ErrorHandler.html +192 -0
  929. data/rdoc/Bioshogi/PlayerExecutor/Human.html +114 -0
  930. data/rdoc/Bioshogi/PlayerExecutor/WithoutAnalyzer.html +105 -0
  931. data/rdoc/Bioshogi/PlayerExecutor.html +101 -0
  932. data/rdoc/Bioshogi/PresetInfo.html +541 -0
  933. data/rdoc/Bioshogi/PromotedPiecePutOnError.html +107 -0
  934. data/rdoc/Bioshogi/PromotedPieceToNormalPiece.html +107 -0
  935. data/rdoc/Bioshogi/Rect.html +105 -0
  936. data/rdoc/Bioshogi/ReversePlayerPieceMoveError.html +107 -0
  937. data/rdoc/Bioshogi/RuleError.html +154 -0
  938. data/rdoc/Bioshogi/SamePlaceDifferent.html +107 -0
  939. data/rdoc/Bioshogi/SamePlayerBattlerOverwrideError.html +107 -0
  940. data/rdoc/Bioshogi/ScreenImage/ColorThemeInfo.html +410 -0
  941. data/rdoc/Bioshogi/ScreenImage/FontThemeInfo.html +231 -0
  942. data/rdoc/Bioshogi/ScreenImage/NureyonImageInfo.html +105 -0
  943. data/rdoc/Bioshogi/ScreenImage/PaletteInfo.html +156 -0
  944. data/rdoc/Bioshogi/ScreenImage/PieceFontWeightInfo.html +113 -0
  945. data/rdoc/Bioshogi/ScreenImage/PieceImageInfo.html +202 -0
  946. data/rdoc/Bioshogi/ScreenImage/Renderer.html +121 -0
  947. data/rdoc/Bioshogi/ScreenImage.html +3251 -0
  948. data/rdoc/Bioshogi/Sfen.html +722 -0
  949. data/rdoc/Bioshogi/SfenImporter.html +234 -0
  950. data/rdoc/Bioshogi/SimpleModel.html +152 -0
  951. data/rdoc/Bioshogi/Simulator.html +286 -0
  952. data/rdoc/Bioshogi/SingleClock.html +293 -0
  953. data/rdoc/Bioshogi/Soldier.html +1693 -0
  954. data/rdoc/Bioshogi/SoldierBox.html +270 -0
  955. data/rdoc/Bioshogi/SoldierWalker.html +195 -0
  956. data/rdoc/Bioshogi/SoldierWarpError.html +107 -0
  957. data/rdoc/Bioshogi/Source.html +232 -0
  958. data/rdoc/Bioshogi/Stat.html +117 -0
  959. data/rdoc/Bioshogi/SyntaxDefact.html +107 -0
  960. data/rdoc/Bioshogi/TurnInfo.html +449 -0
  961. data/rdoc/Bioshogi/UnconfirmedObject.html +107 -0
  962. data/rdoc/Bioshogi/V/OnceVector.html +150 -0
  963. data/rdoc/Bioshogi/V/PresetVectors.html +1284 -0
  964. data/rdoc/Bioshogi/V/RepeatVector.html +150 -0
  965. data/rdoc/Bioshogi/V.html +569 -0
  966. data/rdoc/Bioshogi/Yomiage/Formatter.html +298 -0
  967. data/rdoc/Bioshogi/Yomiage/KanjiInfo.html +113 -0
  968. data/rdoc/Bioshogi/Yomiage/NumberInfo.html +113 -0
  969. data/rdoc/Bioshogi/Yomiage.html +101 -0
  970. data/rdoc/Bioshogi.html +553 -0
  971. data/rdoc/Object.html +121 -0
  972. data/rdoc/created.rid +261 -0
  973. data/rdoc/css/fonts.css +167 -0
  974. data/rdoc/css/rdoc.css +668 -0
  975. data/rdoc/fonts/Lato-Light.ttf +0 -0
  976. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  977. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  978. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  979. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  980. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  981. data/rdoc/images/add.png +0 -0
  982. data/rdoc/images/arrow_up.png +0 -0
  983. data/rdoc/images/brick.png +0 -0
  984. data/rdoc/images/brick_link.png +0 -0
  985. data/rdoc/images/bug.png +0 -0
  986. data/rdoc/images/bullet_black.png +0 -0
  987. data/rdoc/images/bullet_toggle_minus.png +0 -0
  988. data/rdoc/images/bullet_toggle_plus.png +0 -0
  989. data/rdoc/images/date.png +0 -0
  990. data/rdoc/images/delete.png +0 -0
  991. data/rdoc/images/find.png +0 -0
  992. data/rdoc/images/loadingAnimation.gif +0 -0
  993. data/rdoc/images/macFFBgHack.png +0 -0
  994. data/rdoc/images/package.png +0 -0
  995. data/rdoc/images/page_green.png +0 -0
  996. data/rdoc/images/page_white_text.png +0 -0
  997. data/rdoc/images/page_white_width.png +0 -0
  998. data/rdoc/images/plugin.png +0 -0
  999. data/rdoc/images/ruby.png +0 -0
  1000. data/rdoc/images/tag_blue.png +0 -0
  1001. data/rdoc/images/tag_green.png +0 -0
  1002. data/rdoc/images/transparent.png +0 -0
  1003. data/rdoc/images/wrench.png +0 -0
  1004. data/rdoc/images/wrench_orange.png +0 -0
  1005. data/rdoc/images/zoom.png +0 -0
  1006. data/rdoc/index.html +393 -0
  1007. data/rdoc/js/darkfish.js +120 -0
  1008. data/rdoc/js/navigation.js +105 -0
  1009. data/rdoc/js/navigation.js.gz +0 -0
  1010. data/rdoc/js/search.js +110 -0
  1011. data/rdoc/js/search_index.js +1 -0
  1012. data/rdoc/js/search_index.js.gz +0 -0
  1013. data/rdoc/js/searcher.js +229 -0
  1014. data/rdoc/js/searcher.js.gz +0 -0
  1015. data/rdoc/table_of_contents.html +7196 -0
  1016. data//347/275/256/343/201/215/346/217/233/343/201/210/346/216/250/345/245/250.txt +1 -1
  1017. metadata +542 -60
  1018. data/.travis.yml +0 -14
  1019. data/lib/bioshogi/analysis/analyzer.rb +0 -463
  1020. data/lib/bioshogi/analysis/chaos_info.rb +0 -17
  1021. data/lib/bioshogi/analysis/core_soldier_place_methods.rb +0 -58
  1022. data/lib/bioshogi/analysis/rocket_analyzer.rb +0 -104
  1023. data/lib/bioshogi/analysis/sect_info.rb +0 -13
  1024. data/lib/bioshogi/analysis/shape_info_relation.rb +0 -37
  1025. data/lib/bioshogi/analysis/skill_set.rb +0 -105
  1026. data/lib/bioshogi/analysis/technique_matcher_helper.rb +0 -8
  1027. data/lib/bioshogi/analysis/technique_verify_info.rb +0 -800
  1028. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/205/245/347/216/211.kif +0 -26
  1029. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/205/250/351/247/222.kif +0 -27
  1030. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/345/261/205/351/243/233/350/273/212.kif +0 -10
  1031. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/346/214/257/343/202/212/351/243/233/350/273/212.kif +0 -11
  1032. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/347/251/264/347/206/212.kif +0 -122
  1033. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/237/242/345/200/211/346/227/24724/346/211/213/347/265/204.kif +0 -39
  1034. data/lib/bioshogi/analysis//345/202/231/350/200/203//350/247/222/344/270/215/346/210/220.kif +0 -23
  1035. data/lib/bioshogi/analysis//345/202/231/350/200/203//351/243/233/350/273/212/344/270/215/346/210/220.kif +0 -15
  1036. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/211/207/347/251/264/347/206/212.kif +0 -51
  1037. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/251/272/344/270/255/346/245/274/351/226/243.kif +0 -59
  1038. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/351/226/223/351/243/233/350/273/212/347/251/264/347/206/212.kif +0 -42
  1039. data/lib/bioshogi/formatter/last_action_info.rb +0 -81
  1040. data/lib/bioshogi/formatter/skill_embed.rb +0 -316
  1041. data/lib/bioshogi/formatter/style_embed.rb +0 -27
  1042. data/lib/bioshogi/piller_cop.rb +0 -47
  1043. data/lib/bioshogi/soldier/technique_matcher_methods.rb +0 -57
  1044. data/lib/bioshogi/tasks/extreme_validator.rake +0 -8
  1045. data/lib/bioshogi/tasks/tactic_validator.rake +0 -8
@@ -0,0 +1,2022 @@
1
+ # frozen-string-literal: true
2
+
3
+ # :OPTIONAL: は考慮する必要があるもの。
4
+
5
+ module Bioshogi
6
+ module Analysis
7
+ class MotionDetector
8
+ include ApplicationMemoryRecord
9
+ memory_record [
10
+ # {
11
+ # key: "王手飛車",
12
+ # description: nil,
13
+ # trigger: { piece_key: :bishop, promoted: false, motion: :both },
14
+ # func: -> {
15
+ # and_cond do
16
+ # V.saltire_vectors.each do |e|
17
+ # p e
18
+ # rook_found = false
19
+ # (1..Float::INFINITY).each do |magnification|
20
+ # if v = soldier.relative_move_to(e, magnification: magnification)
21
+ # if s = board[v]
22
+ # if opponent?(s)
23
+ # if s.piece.key == :rook # 飛 or 龍
24
+ # rook_found = true
25
+ # break
26
+ # end
27
+ # end
28
+ # else
29
+ # # 空なので続ける
30
+ # end
31
+ # else
32
+ # # 場外なので終わる
33
+ # break
34
+ # end
35
+ # end
36
+ # if rook_found
37
+ # end
38
+ # end
39
+ # end
40
+ # },
41
+ # },
42
+
43
+ {
44
+ key: "空中戦",
45
+ description: nil,
46
+ trigger: { piece_key: [:rook, :bishop], promoted: false, motion: :both },
47
+ func: -> {
48
+ # 【条件】序盤である
49
+ and_cond { container.joban }
50
+
51
+ # 【却下】駒を取る目的だった
52
+ skip_if { captured_soldier }
53
+
54
+ # 【条件】金の移動はまだ2回以内である
55
+ and_cond { player.used_soldier_counter[:G0] <= 2 }
56
+
57
+ # 【条件】銀の移動はまだ2回以内である
58
+ and_cond { player.used_soldier_counter[:S0] <= 2 }
59
+
60
+ # 【条件】両者の飛車が 4..6 行目であるかつ中央に向けて利きがある
61
+ and_cond do
62
+ container.players.all? do |e|
63
+ e.soldiers_lookup2(:rook, false).any? do |e| # ここの any? は「あれば first」の意味
64
+ if e.middle_row?
65
+ if e.left_or_right
66
+ # 左右どちらかにいるので中央に向けて1歩移動できるか?
67
+ if v = e.relative_move_to(e.left_or_right_dir_to_center)
68
+ board.cell_empty?(v)
69
+ end
70
+ else
71
+ # 中央にいる
72
+ true
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ # 【条件】両者のどちらかの角が中央に向けて利いている
80
+ and_cond do
81
+ container.players.any? do |e|
82
+ e.soldiers_lookup2(:bishop, false).any? do |e| # ここの any? は「あれば first」の意味
83
+ if e.middle_row? || e.bottom_spaces >= 2 # 4..6 行目または下から3行目(つまり4..7行目)
84
+ if e.left_or_right
85
+ # 中央(左上または右上)に向けて1歩移動できるか?
86
+ if v = e.relative_move_to(:"up_#{e.left_or_right_dir_to_center}")
87
+ board.cell_empty?(v)
88
+ end
89
+ else
90
+ # 中央にいる
91
+ true
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ },
98
+ },
99
+ {
100
+ key: "堅陣の金",
101
+ description: nil,
102
+ trigger: { piece_key: :gold, promoted: false, motion: :move },
103
+ func: -> {
104
+ # 【条件】自陣の下2行内に移動した
105
+ and_cond { soldier.bottom_spaces <= 1 }
106
+
107
+ # 【条件】引いた
108
+ and_cond { move_hand.move_vector == V.down }
109
+
110
+ # 【却下】駒を取る目的だった
111
+ skip_if { captured_soldier }
112
+
113
+ # 【却下】左上・上・右上に敵の駒がある
114
+ # 本当は全面に敵駒があるかどうかではなく金が取られて損をする場合に「仕方なく引いた」ときとしたい
115
+ skip_if do
116
+ V.front_vectors.any? do |e|
117
+ if v = origin_soldier.relative_move_to(e)
118
+ if s = board[v]
119
+ opponent?(s)
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ # 【却下】桂馬に狙われていた
126
+ skip_if do
127
+ V.keima_vectors.any? do |e|
128
+ if v = origin_soldier.relative_move_to(e)
129
+ if s = board[v]
130
+ s.piece.key == :knight && s.normal? && opponent?(s)
131
+ end
132
+ end
133
+ end
134
+ end
135
+ },
136
+ },
137
+
138
+ {
139
+ key: "パンドラの歩",
140
+ description: nil,
141
+ trigger: { piece_key: :pawn, promoted: false, motion: :move },
142
+ func: -> {
143
+ # 【条件】序盤である
144
+ and_cond { container.joban }
145
+
146
+ # 【条件】下から4行目である
147
+ and_cond { soldier.bottom_spaces == 3 }
148
+
149
+ # 【条件】5列名である
150
+ and_cond { soldier.column_is5? }
151
+
152
+ # 【条件】相手が角を持っている
153
+ and_cond { opponent_player.piece_box.has_key?(:bishop) }
154
+
155
+ # 【条件】平手風の手合割である
156
+ and_cond { preset_is(:hirate_like) }
157
+ },
158
+ },
159
+
160
+ {
161
+ key: "双竜双馬陣",
162
+ description: nil,
163
+ trigger: [
164
+ { piece_key: :rook, promoted: true, motion: :move },
165
+ { piece_key: :bishop, promoted: true, motion: :move },
166
+ ],
167
+ func: -> {
168
+ # 【条件】今成った
169
+ and_cond { move_hand.promote_trigger? }
170
+
171
+ # 【却下】すでに持っている
172
+ skip_if { player.tag_bundle.include?("双竜双馬陣") }
173
+
174
+ # 【条件】馬が2ついる
175
+ and_cond { player.soldiers_lookup2(:bishop, true).size == 2 }
176
+
177
+ # 【条件】竜2が2ついる
178
+ and_cond { player.soldiers_lookup2(:rook, true).size == 2 }
179
+ },
180
+ },
181
+
182
+ # {
183
+ # key: "穴熊再生",
184
+ # description: nil,
185
+ # trigger: [
186
+ # { piece_key: :silver, promoted: false, motion: :drop },
187
+ # { piece_key: :gold, promoted: false, motion: :drop },
188
+ # ],
189
+ # func: -> {
190
+ # # # 【条件】平手風である
191
+ # # and_cond { preset_is(:hirate_like) }
192
+ #
193
+ # # 【条件】自玉が1つ存在する
194
+ # and_cond { player.king_soldier_only_one_exist? }
195
+ #
196
+ # # 【条件】自玉が隅にいる
197
+ # and_cond { player.king_soldier.side_edge? && player.king_soldier.bottom_spaces == 0 }
198
+ #
199
+ # # 【条件】打った駒は玉と同じ側である
200
+ # and_cond { soldier.left_or_right == player.king_soldier.left_or_right }
201
+ #
202
+ # # 【条件】打った駒は玉の近くである (3x3)
203
+ # and_cond { soldier.place.in_outer_area?(player.king_soldier.place, 2) }
204
+ # },
205
+ # },
206
+ {
207
+ key: "ハッチ閉鎖",
208
+ description: "穴熊を金銀で閉鎖したタイミングで発動する",
209
+ trigger: [
210
+ { piece_key: :silver, promoted: false, motion: :move },
211
+ { piece_key: :gold, promoted: false, motion: :move },
212
+ ],
213
+ func: -> {
214
+ # 【却下】すでに開戦している
215
+ skip_if { container.outbreak_turn }
216
+
217
+ # 【条件】下から2行目である
218
+ and_cond { soldier.bottom_spaces == 1 }
219
+
220
+ # 【条件】端から2列目である
221
+ and_cond { soldier.left_right_space_min == 1 }
222
+
223
+ # 【条件】自玉が1つ存在する
224
+ and_cond { player.king_soldier_only_one_exist? }
225
+
226
+ # 【条件】移動先の壁側の斜め下に自玉がいる
227
+ and_cond do
228
+ if v = soldier.relative_move_to(:"down_#{soldier.left_or_right}")
229
+ if s = board[v]
230
+ s.piece.key == :king && own?(s)
231
+ end
232
+ end
233
+ end
234
+
235
+ # 【条件】移動先の壁側と上下に味方がいる
236
+ and_cond do
237
+ [soldier.left_or_right, :up, :down].all? do |e|
238
+ if v = soldier.relative_move_to(e)
239
+ if s = board[v]
240
+ own?(s)
241
+ end
242
+ end
243
+ end
244
+ end
245
+ },
246
+ },
247
+ {
248
+ key: "突き捨て",
249
+ description: nil,
250
+ trigger: { piece_key: :pawn, promoted: false, motion: :move },
251
+ func: -> {
252
+ # 【却下】駒を取った
253
+ skip_if { captured_soldier }
254
+
255
+ # 【条件】4..5段目
256
+ and_cond { soldier.row_is_4to5? }
257
+
258
+ # 【条件】上に敵の歩がある
259
+ and_cond do
260
+ if v = soldier.relative_move_to(:up)
261
+ if s = board[v]
262
+ s.piece.key == :pawn && s.normal? && opponent?(s)
263
+ end
264
+ end
265
+ end
266
+ },
267
+ },
268
+ {
269
+ key: "退場の金",
270
+ description: nil,
271
+ trigger: { piece_key: :gold, promoted: false, motion: :move },
272
+ func: -> {
273
+ # 【条件】自玉が1つ存在する
274
+ and_cond { player.king_soldier_only_one_exist? }
275
+
276
+ # 【条件】左上か右上に移動した
277
+ and_cond { move_hand.right_move_length.abs.positive? && move_hand.up_move_length.positive? }
278
+
279
+ # 【条件】下に歩がある
280
+ and_cond do
281
+ if v = soldier.relative_move_to(:down)
282
+ if s = board[v]
283
+ s.piece.key == :pawn && s.normal? && own?(s)
284
+ end
285
+ end
286
+ end
287
+
288
+ # 【条件】移動してきた側に歩がある
289
+ and_cond do
290
+ dir = move_hand.right_move_length > 0 ? :left : :right
291
+ if v = soldier.relative_move_to(dir)
292
+ if s = board[v]
293
+ s.piece.key == :pawn && s.normal? && own?(s)
294
+ end
295
+ end
296
+ end
297
+
298
+ # 【条件】自玉から離れた
299
+ and_cond { my_king_kara_hanareta? }
300
+ },
301
+ },
302
+ {
303
+ key: "右玉",
304
+ description: nil,
305
+ trigger: { piece_key: :king, promoted: false, motion: :move },
306
+ func: -> {
307
+ # 【条件】玉の初回移動に限る
308
+ and_cond { player.used_soldier_counter[:K0] == 1 }
309
+
310
+ # 【条件】序盤である
311
+ and_cond { container.joban }
312
+
313
+ # 【条件】右に移動した
314
+ and_cond { move_hand.right_move_length.positive? }
315
+
316
+ # 【条件】28 か 29 に自分の飛車がある
317
+ and_cond do
318
+ ["28", "29"].any? do |e|
319
+ if s = board[Place[e].white_then_flip(location)]
320
+ s.piece.key == :rook && s.normal? && own?(s)
321
+ end
322
+ end
323
+ end
324
+ },
325
+ },
326
+ {
327
+ key: "歩の錬金術師",
328
+ description: nil,
329
+ trigger: { piece_key: :pawn, promoted: true, motion: :move },
330
+ func: -> {
331
+ # 【条件】成ったタイミング
332
+ and_cond { move_hand.promote_trigger? }
333
+
334
+ # 【却下】すでに持っている
335
+ skip_if { player.tag_bundle.include?("歩の錬金術師") }
336
+
337
+ # 【条件】たくさん「と金」を作った (盤上にある)
338
+ and_cond do
339
+ player.soldiers_lookup2(:pawn, true).size >= 3
340
+ end
341
+
342
+ # 【条件】たくさん「と金」を作った (盤上にある)
343
+ # and_cond do
344
+ # max = 3
345
+ # found = false
346
+ # count = 0
347
+ # player.soldiers.each do |e|
348
+ # if e.piece.key == :pawn && e.promoted
349
+ # count += 1
350
+ # if count >= max
351
+ # found = true
352
+ # break
353
+ # end
354
+ # end
355
+ # end
356
+ # found
357
+ # end
358
+ },
359
+ },
360
+ {
361
+ key: "蓋歩",
362
+ description: "飛車を帰らせない",
363
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
364
+ func: -> {
365
+ # 【条件】打った歩の下には、1手前に相手の飛車が移動してきていて、その飛車の前方1マスは空いている
366
+ and_cond do
367
+ if hand_log = previous_hand_log(1)
368
+ if s = hand_log.move_hand&.soldier
369
+ if s.piece.key == :rook && s.normal? && opponent?(s)
370
+ if s.place == soldier.relative_move_to(:down)
371
+ if v = s.relative_move_to(:up)
372
+ board.cell_empty?(v)
373
+ end
374
+ end
375
+ end
376
+ end
377
+ end
378
+ end
379
+
380
+ # 【条件】その歩は桂か銀に支えられている
381
+ and_cond do
382
+ func = -> (vectors, piece_key) {
383
+ V.public_send(vectors).any? do |e|
384
+ if v = soldier.relative_move_to(e)
385
+ if s = board[v]
386
+ s.piece.key == piece_key && s.normal? && own?(s)
387
+ end
388
+ end
389
+ end
390
+ }
391
+ func[:tsugikei_vectors, :knight] || func[:wariuchi_vectors, :silver]
392
+ end
393
+ },
394
+ },
395
+ {
396
+ key: "金底の歩",
397
+ description: "打ち歩が一番下の段でかつ、その上に自分の金がある",
398
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
399
+ func: -> {
400
+ # 【条件】「最下段」である
401
+ and_cond { soldier.bottom_spaces.zero? }
402
+
403
+ # 【条件】上に自分の金がある
404
+ and_cond do
405
+ if v = soldier.relative_move_to(:up)
406
+ if s = board[v]
407
+ s.piece.key == :gold && own?(s)
408
+ end
409
+ end
410
+ end
411
+ },
412
+ },
413
+ {
414
+ key: "金底の香",
415
+ description: nil,
416
+ trigger: { piece_key: :lance, promoted: false, motion: :drop },
417
+ func: -> { instance_exec(&MotionDetector[:"金底の歩"].func) },
418
+ },
419
+ {
420
+ key: "銀裾の歩",
421
+ description: "打ち歩が一番下の段でかつ、その上に自分の銀がある",
422
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
423
+ func: -> {
424
+ # 【条件】「最下段」である
425
+ and_cond { soldier.bottom_spaces.zero? }
426
+
427
+ # 【条件】左右斜め上に自分の銀がある
428
+ and_cond do
429
+ V.bishop_up_diagonal_vectors.any? do |e|
430
+ if v = soldier.relative_move_to(e)
431
+ if s = board[v]
432
+ s.piece.key == :silver && s.normal? && own?(s)
433
+ end
434
+ end
435
+ end
436
+ end
437
+ },
438
+ },
439
+ {
440
+ key: "一間竜",
441
+ description: "上下左右の1つ離れたところのどこかに敵玉がある",
442
+ trigger: { piece_key: :rook, promoted: true, motion: :move },
443
+ func: -> {
444
+ and_cond do
445
+ V.ikkenryu_cross_vectors.any? do |e|
446
+ if v = soldier.relative_move_to(e)
447
+ if s = board[v]
448
+ s.piece.key == :king && opponent?(s)
449
+ end
450
+ end
451
+ end
452
+ end
453
+ },
454
+ },
455
+ {
456
+ key: "自陣飛車",
457
+ description: nil,
458
+ trigger: { piece_key: :rook, promoted: false, motion: :drop },
459
+ func: -> {
460
+ and_cond { soldier.own_side? }
461
+ },
462
+ },
463
+ {
464
+ key: "自陣角",
465
+ description: nil,
466
+ trigger: { piece_key: :bishop, promoted: false, motion: :drop },
467
+ func: -> {
468
+ and_cond { soldier.own_side? }
469
+ },
470
+ },
471
+ {
472
+ key: "角頭攻め",
473
+ description: nil,
474
+ trigger: { piece_key: :pawn, promoted: false, motion: :both },
475
+ func: -> {
476
+ and_cond do
477
+ v = false
478
+
479
+ # 【OR条件】対象を直接攻めている
480
+ v ||= op_solider_exist2(:up, :bishop)
481
+
482
+ # 【OR条件】角の上の歩を攻めている
483
+ #
484
+ # 次のように単に「角の上の歩」に対して「歩」を突いた場合としてしまうと初形の飛車先の歩交換で角頭攻めになってしまう
485
+ #
486
+ # > v銀v桂v香
487
+ # > v角
488
+ # > v歩v歩v歩
489
+ # > 歩
490
+ #
491
+ v ||= yield_self do
492
+ if soldier.not_own_side? # 自分の陣地より上(これをしないとお手伝いになってしまう)
493
+ if op_solider_exist2(:up, :pawn) # 歩を攻めている
494
+ if op_solider_exist2(:up_up, :bishop) # 歩の奥に角がある
495
+ # 「序盤の24歩」ではないこと
496
+ !(container.joban && soldier.column_eq?(2) && soldier.next_nyugyoku?)
497
+ end
498
+ end
499
+ end
500
+ end
501
+ end
502
+ },
503
+ },
504
+ {
505
+ key: "桂頭攻め",
506
+ description: nil,
507
+ trigger: { piece_key: :pawn, promoted: false, motion: :both },
508
+ func: -> {
509
+ and_cond do
510
+ v = false
511
+
512
+ # 【OR条件】対象を直接攻めている
513
+ v ||= op_solider_exist2(:up, :knight)
514
+
515
+ # 【OR条件】桂の上の歩を攻めている
516
+ v ||= yield_self do
517
+ if soldier.not_own_side? # 自分の陣地よりむこう(これをしないとお手伝いになってしまう)
518
+ if soldier.not_opp_side? # 相手の陣地よりこっち(23歩は桂を攻めている感じがしないため)
519
+ if op_solider_exist2(:up, :pawn) # 歩を攻めている
520
+ op_solider_exist2(:up_up, :knight) # 歩の奥に桂がある
521
+ end
522
+ end
523
+ end
524
+ end
525
+ end
526
+ },
527
+ },
528
+ {
529
+ key: "玉頭攻め",
530
+ description: "角頭攻めとは条件を変えている",
531
+ trigger: { piece_key: :pawn, promoted: false, motion: :both },
532
+ func: -> {
533
+ # 【条件】「玉頭」または「玉頭の何かの駒」を攻めている
534
+ and_cond do
535
+ op_solider_exist2(:up, :king) || (op_solider_exist1(:up) && op_solider_exist2(:up_up, :king))
536
+ end
537
+ },
538
+ },
539
+ {
540
+ key: "こびん攻め",
541
+ description: "玉または飛の斜めの歩を攻める",
542
+ trigger: { piece_key: :pawn, promoted: false, motion: :both },
543
+ func: -> {
544
+ # 【条件】2〜8筋である (端の場合は「こびん」とは言わないため)
545
+ and_cond { soldier.column_is2to8? }
546
+
547
+ # 【条件】相手が歩である
548
+ and_cond do
549
+ if v = soldier.relative_move_to(:up)
550
+ if s = board[v]
551
+ s.piece.key == :pawn && s.normal? && opponent?(s)
552
+ end
553
+ end
554
+ end
555
+
556
+ # 【条件】桂馬の効きの位置に「玉」または「飛車」がある
557
+ and_cond do
558
+ V.keima_vectors.any? do |e|
559
+ if v = soldier.relative_move_to(e)
560
+ if s = board[v]
561
+ (s.piece.key == :king || (s.piece.key == :rook && s.normal?)) && opponent?(s)
562
+ end
563
+ end
564
+ end
565
+ end
566
+ },
567
+ },
568
+ {
569
+ key: "と金攻め",
570
+ description: nil,
571
+ trigger: { piece_key: :pawn, promoted: true, motion: :move },
572
+ func: -> {
573
+ # 【却下】歩成り
574
+ skip_if { origin_soldier.normal? }
575
+
576
+ # 【条件】駒を取っている
577
+ and_cond { captured_soldier }
578
+
579
+ # 【条件】取った駒の価値が「盤上の歩」より高い (相手の歩を取ったところで効果はない)
580
+ and_cond { captured_soldier.abs_weight > Piece.fetch(:pawn).basic_weight }
581
+
582
+ # 【条件】敵玉が1つ存在する
583
+ and_cond { opponent_player.king_soldier_only_one_exist? }
584
+
585
+ # 【条件】移動先の近くに敵玉がいる (半径3)
586
+ and_cond { soldier.place.in_outer_area?(opponent_player.king_soldier.place, 3) }
587
+
588
+ # 【条件】相手玉に向かって進んでいる (玉と反対に移動したら駒を取ったとしても戦力低下になる場合もある)
589
+ and_cond { teki_king_ni_tikazuita? }
590
+ },
591
+ },
592
+ {
593
+ key: "位の確保",
594
+ description: "中盤戦になる前に5行目の歩を銀で支える",
595
+ trigger: { piece_key: :silver, promoted: false, motion: :move },
596
+ func: -> {
597
+ # 【却下】すでに開戦している
598
+ skip_if { container.outbreak_turn }
599
+
600
+ # 【条件】前線(6行目)にいる
601
+ and_cond { soldier.kurai_sasae? }
602
+
603
+ # 【条件】3〜7列である (両端2列は「位」とは言わないため)
604
+ and_cond { soldier.column_is3to7? }
605
+
606
+ # 【条件】前に歩がある
607
+ and_cond do
608
+ if v = soldier.relative_move_to(:up)
609
+ if s = board[v]
610
+ s.piece.key == :pawn && s.normal? && own?(s)
611
+ end
612
+ end
613
+ end
614
+
615
+ # 【却下】上の上(つまり歩の上)に何かある
616
+ skip_if do
617
+ if v = soldier.relative_move_to(:up_up)
618
+ board[v]
619
+ end
620
+ end
621
+ },
622
+ },
623
+ {
624
+ key: "突き違いの歩",
625
+ trigger: { piece_key: :pawn, promoted: false, motion: :move },
626
+ func: -> {
627
+ # 【却下】駒を取った
628
+ skip_if { captured_soldier }
629
+
630
+ # 【条件】歩の前に敵銀がある
631
+ and_cond do
632
+ if v = soldier.relative_move_to(:up)
633
+ if s = board[v]
634
+ s.piece.key == :silver && s.normal? && opponent?(s)
635
+ end
636
+ end
637
+ end
638
+
639
+ # 【条件】1手前、隣に相手の歩が突かれた
640
+ and_cond do
641
+ if hand_log = previous_hand_log(1)
642
+ if s = hand_log.move_hand&.soldier
643
+ Assertion.assert { opponent?(s) }
644
+ if s.piece.key == :pawn && s.normal? # 歩
645
+ if s.place.row == soldier.place.row # 行が同じ
646
+ s.place.column.distance(soldier.place.column) <= 1 # 列の差が1以下。つまり左右以内。
647
+ end
648
+ end
649
+ end
650
+ end
651
+ end
652
+ },
653
+ },
654
+ {
655
+ key: "浮き飛車",
656
+ description: "戻る場合も考慮する",
657
+ trigger: { piece_key: :rook, promoted: false, motion: :move },
658
+ func: -> {
659
+ # 【却下】すでに開戦している
660
+ skip_if { container.outbreak_turn }
661
+
662
+ # 【条件】前線(6行目)にいる
663
+ and_cond { soldier.funoue_line_ni_uita? }
664
+
665
+ # 【条件】移動元と同じ列であること
666
+ and_cond { soldier.place.column == origin_soldier.place.column }
667
+
668
+ # 【却下】同飛 (相手の駒を取る目的で移動していない)
669
+ skip_if { captured_soldier }
670
+ },
671
+ },
672
+ {
673
+ key: "二枚飛車",
674
+ description: "二枚飛車の間の駒が動いたら二枚飛車になる場合には対応していない",
675
+ trigger: { piece_key: :rook, promoted: :both, motion: :both },
676
+ func: -> {
677
+ # 【条件】敵玉が1つ存在する
678
+ and_cond { opponent_player.king_soldier_only_one_exist? }
679
+
680
+ # 【条件】敵玉と行が同じ (許容誤差±1)
681
+ and_cond { (opponent_player.king_soldier.place.row.value - soldier.place.row.value).abs <= 1 }
682
+
683
+ if false
684
+ # # 富豪的な配列プログラミング
685
+ #
686
+ # # 【条件】自分の飛車(龍を含む)が盤上に複数ある
687
+ # and_cond { player.soldiers_lookup1(:rook).many? }
688
+ #
689
+ # # 【条件】自分の飛車(龍を含む)が同じ行にある
690
+ # and_cond { player.soldiers_lookup1(:rook).collect { |s| s.place.row }.uniq.one? }
691
+ else
692
+ # 2つあるとして比較する方法
693
+ soldiers = player.soldiers_lookup1(:rook)
694
+ partner = (soldiers - [soldier]).first
695
+
696
+ # 【条件】もう一方の飛車が存在する
697
+ and_cond { partner }
698
+
699
+ # 【条件】もう一方の飛車と同じ行にある (この方法は遮る駒のチェックを行えない)
700
+ and_cond { soldier.place.row == partner.place.row }
701
+
702
+ # 【却下】移動してきた場合、移動元はもう一方の飛車と同じ行にある (この方法は遮る駒のチェックを行えない)
703
+ skip_if do
704
+ if s = origin_soldier
705
+ s.place.row == partner.place.row
706
+ end
707
+ end
708
+ end
709
+
710
+ # 【条件】打った飛車の左右に自分の飛車がいる (この方法は遮る駒のチェックを行える)
711
+ # and_cond do
712
+ # [:left, :right].any? do |left_or_right|
713
+ # found = false
714
+ # (1..).each do |x|
715
+ # v = soldier.relative_move_to(left_or_right, magnification: x)
716
+ # unless v
717
+ # break # 盤外
718
+ # end
719
+ # if s = board[v]
720
+ # if opponent?(s)
721
+ # break # 相手の駒が間にあるとだめ
722
+ # end
723
+ # if s.piece.key == :rook # 「飛」「龍」
724
+ # found = true
725
+ # break
726
+ # else
727
+ # break # 自分の他の駒が間にあるとだめ
728
+ # end
729
+ # else
730
+ # # 何もない
731
+ # end
732
+ # end
733
+ # found
734
+ # end
735
+ # end
736
+ },
737
+ },
738
+ {
739
+ key: "裸玉",
740
+ description: "玉のまわりに歩ぐらいしかない",
741
+ trigger: [
742
+ { piece_key: :king, promoted: false, motion: :move },
743
+ ],
744
+ func: -> {
745
+ min_score = Piece[:lance].basic_weight
746
+
747
+ # 【却下】移動先が潤っている
748
+ skip_if do
749
+ V.outer_vectors.any? do |e|
750
+ if v = soldier.relative_move_to(e)
751
+ if s = board[v]
752
+ if own?(s)
753
+ s.abs_weight >= min_score
754
+ end
755
+ end
756
+ end
757
+ end
758
+ end
759
+
760
+ # 【条件】移動元が潤っている (移動先の玉が近くにいるため除外すること)
761
+ and_cond do
762
+ V.outer_vectors.any? do |e|
763
+ if v = origin_soldier.relative_move_to(e)
764
+ if s = board[v]
765
+ if own?(s)
766
+ if s.piece.key != :king
767
+ s.abs_weight >= min_score
768
+ end
769
+ end
770
+ end
771
+ end
772
+ end
773
+ end
774
+ },
775
+ },
776
+ {
777
+ key: "飛車先交換",
778
+ description: nil,
779
+ trigger: [
780
+ { piece_key: :rook, promoted: false, motion: :move },
781
+ ],
782
+ func: -> {
783
+ # 1手前: △2四歩(23)
784
+ and_cond do
785
+ if hand_log = previous_hand_log(1)
786
+ if s = hand_log.move_hand&.soldier
787
+ # 次の assert は超重要で
788
+ # - 駒落ち
789
+ # - バリデーションなし
790
+ # - 戦法判定あり
791
+ # - 先後をまちがえたまま進める
792
+ # - 飛車を動かす
793
+ # のときひっかかる。
794
+ # 解決方法は assert を緩めるのではなく
795
+ # - バリデーションなし
796
+ # - 戦法判定なし
797
+ # としないといけない
798
+ #
799
+ # 再現コード
800
+ #
801
+ # info = Bioshogi::Parser.parse(<<~EOT, { validate_feature: false, analysis_feature: true })
802
+ # P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
803
+ # P2 * -HI * * * * * * *
804
+ # P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
805
+ # P4 * * * * * * * * *
806
+ # P5 * * * * * * * * *
807
+ # P6 * * * * * * * * *
808
+ # P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
809
+ # P8 * +KA * * * * * +HI *
810
+ # P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
811
+ # -
812
+ # +7968GI,T0
813
+ # -8232HI,T0
814
+ # %TORYO
815
+ Assertion.assert { opponent?(s) }
816
+ s.piece.key == :pawn && s.place == soldier.place
817
+ end
818
+ end
819
+ end
820
+
821
+ # 2手前: ▲2四歩(25)
822
+ and_cond do
823
+ if hand_log = previous_hand_log(2)
824
+ if s = hand_log.move_hand&.soldier
825
+ Assertion.assert { own?(s) }
826
+ s.piece.key == :pawn && s.place == soldier.place
827
+ end
828
+ end
829
+ end
830
+ },
831
+ },
832
+ {
833
+ key: "玉飛接近",
834
+ description: "龍は馬と似て守りに効いている場合もあるため接近してもよいとする",
835
+ trigger: [
836
+ { piece_key: :rook, promoted: false, motion: :move },
837
+ { piece_key: :king, promoted: false, motion: :move },
838
+ ],
839
+ func: -> {
840
+ # 【条件】自玉が1つ存在する
841
+ and_cond { player.king_soldier_only_one_exist? }
842
+
843
+ # 【却下】玉と飛の移動が合わせて2回以下 (これがあれば中飛車美濃囲いのときに玉飛接近にならない)
844
+ skip_if { (player.used_soldier_counter[:K0] + player.used_soldier_counter[:R0]) <= 2 }
845
+
846
+ fn = -> it {
847
+ partner = it.piece.key == :rook ? :king : :rook
848
+ V.outer_vectors.any? do |e|
849
+ if v = it.relative_move_to(e)
850
+ if s = board[v]
851
+ s.piece.key == partner && s.normal? && own?(s)
852
+ end
853
+ end
854
+ end
855
+ }
856
+
857
+ # 【条件】移動先の周囲に相手がいる
858
+ and_cond { fn[soldier] }
859
+
860
+ # 【スキップスキプ条件】移動元の周囲に相手がいる
861
+ skip_if { fn[origin_soldier] }
862
+ },
863
+ },
864
+ {
865
+ key: "端攻め",
866
+ description: nil,
867
+ trigger: [
868
+ { piece_key: :pawn, promoted: false, motion: :move },
869
+ ],
870
+ func: -> {
871
+ # 【条件】端である
872
+ and_cond { soldier.side_edge? }
873
+
874
+ # 【条件】上が敵歩である
875
+ and_cond do
876
+ if v = soldier.relative_move_to(:up)
877
+ if s = board[v]
878
+ s.piece.key == :pawn && s.normal? && opponent?(s)
879
+ end
880
+ end
881
+ end
882
+
883
+ # 【却下】駒を取る目的で突いた
884
+ skip_if { captured_soldier }
885
+ }
886
+ },
887
+ # {
888
+ # key: "守りの馬",
889
+ # description: nil,
890
+ # trigger: { piece_key: :bishop, promoted: true, motion: :move },
891
+ # func: -> {
892
+ # # 【条件】自玉が1つ存在する
893
+ # and_cond { player.king_soldier_only_one_exist? }
894
+ #
895
+ # # 【条件】移動先の近くに自玉がいる
896
+ # and_cond { soldier.place.in_outer_area?(player.king_soldier.place, 2) }
897
+ #
898
+ # # 【却下】移動元の近くに、すでに自玉がいる
899
+ # skip_if { origin_soldier.place.in_outer_area?(player.king_soldier.place, 2) }
900
+ # },
901
+ # },
902
+ # {
903
+ # key: "双馬結界",
904
+ # description: nil,
905
+ # trigger: { piece_key: :bishop, promoted: true, motion: :move },
906
+ # func: -> {
907
+ # # 【条件】自玉が1つ存在する
908
+ # and_cond { player.king_soldier_only_one_exist? }
909
+ #
910
+ # # 【条件】移動先の近くに自玉がいる
911
+ # and_cond { soldier.place.in_outer_area?(player.king_soldier.place, 2) }
912
+ #
913
+ # # 【却下】移動元の近くに、すでに自玉がいる
914
+ # skip_if { origin_soldier.place.in_outer_area?(player.king_soldier.place, 2) }
915
+ # },
916
+ # },
917
+ {
918
+ key: "双玉接近",
919
+ description: nil,
920
+ trigger: { piece_key: :king, promoted: false, motion: :move },
921
+ func: -> {
922
+ # 【条件】敵玉が1つ存在する
923
+ and_cond { opponent_player.king_soldier_only_one_exist? }
924
+
925
+ # 【条件】移動先の近くに敵玉がいる
926
+ and_cond { soldier.place.in_outer_area?(opponent_player.king_soldier.place, 2) }
927
+
928
+ # 【却下】移動元の近くに敵玉がいる
929
+ skip_if { origin_soldier.place.in_outer_area?(opponent_player.king_soldier.place, 2) }
930
+ },
931
+ },
932
+ # {
933
+ # key: "玉頭戦",
934
+ # description: nil,
935
+ # trigger: { piece_key: :king, promoted: false, motion: :move },
936
+ # func: -> {
937
+ # # 【条件】敵玉が1つ存在する
938
+ # and_cond { opponent_player.king_soldier_only_one_exist? }
939
+ #
940
+ # # 【条件】同じ列か1つずれの状態かつ、行の差が4以内である(間が5マス以内)
941
+ # fn = -> soldier {
942
+ # vector = soldier.place.vector_from(opponent_player.king_soldier.place)
943
+ # p ["#{__FILE__}:#{__LINE__}", __method__, vector]
944
+ # vector.x.abs <= 1 && vector.y.abs <= 6
945
+ # }
946
+ # and_cond { fn[soldier] }
947
+ #
948
+ # # 【却下】すでに玉頭戦状態だった
949
+ # skip_if { fn[origin_soldier] }
950
+ # },
951
+ # },
952
+ {
953
+ key: "天空の城",
954
+ description: nil,
955
+ trigger: [
956
+ { piece_key: :king, promoted: false, motion: :move },
957
+ { piece_key: :silver, promoted: true, motion: :move },
958
+ { piece_key: :gold, promoted: false, motion: :both },
959
+ ],
960
+ func: -> {
961
+ # 【条件】一般的な駒落ち以上とする
962
+ and_cond { preset_is(:x_taden) }
963
+
964
+ # 【条件】自玉が1つ存在する
965
+ and_cond { player.king_soldier_only_one_exist? }
966
+
967
+ # 【条件】自玉は4から6行目にいる
968
+ and_cond { player.king_soldier.middle_row? }
969
+
970
+ # 【却下】すでに持っている
971
+ skip_if { player.tag_bundle.include?("天空の城") }
972
+
973
+ # 【条件】移動先の近くに自玉がいる (半径1)
974
+ and_cond { soldier.place.in_outer_area?(player.king_soldier.place, 1) }
975
+
976
+ # 【条件】自玉のまわりに価値のある駒がある
977
+ and_cond do
978
+ min_score = ClusterScoreInfo["天空の城構成員"].min_score
979
+ score = 0
980
+ V.outer_vectors.any? do |e|
981
+ if v = player.king_soldier.relative_move_to(e)
982
+ if s = board[v]
983
+ if own?(s)
984
+ score += s.abs_weight
985
+ score >= min_score
986
+ end
987
+ end
988
+ end
989
+ end
990
+ end
991
+
992
+ # 【必要条件6】駒得している
993
+ and_cond { player.current_score > opponent_player.current_score }
994
+ },
995
+ },
996
+ {
997
+ key: "端玉",
998
+ description: "端に入ったときだけ判定する",
999
+ trigger: { piece_key: :king, promoted: false, motion: :move },
1000
+ func: -> {
1001
+ # 【条件】左右の端 (かどを除く) に移動した
1002
+ and_cond { soldier.both_side_without_corner? }
1003
+
1004
+ # 【却下】移動元が左右の端 (かどを除く)
1005
+ skip_if { origin_soldier.both_side_without_corner? }
1006
+ },
1007
+ },
1008
+ {
1009
+ key: "中段玉",
1010
+ description: nil,
1011
+ trigger: { piece_key: :king, promoted: false, motion: :move },
1012
+ func: -> {
1013
+ # 【条件】移動元は自陣にいる
1014
+ and_cond { origin_soldier.own_side? }
1015
+
1016
+ # 【条件】移動先に自陣にいない
1017
+ and_cond { soldier.not_own_side? }
1018
+ },
1019
+ },
1020
+ {
1021
+ key: "パンティを脱ぐ",
1022
+ description: "開戦前かつ、跳んだ桂が下から3つ目かつ、(近い方の)端から3列目かつ、移動元の隣(端に近い方)に自玉がある",
1023
+ trigger: { piece_key: :knight, promoted: false, motion: :move },
1024
+ func: -> {
1025
+ # 【却下】すでに開戦している
1026
+ skip_if { container.outbreak_turn }
1027
+
1028
+ # 【条件】下から3行目である
1029
+ and_cond { soldier.bottom_spaces == 2 }
1030
+
1031
+ # 【条件】端から3列目である
1032
+ and_cond { soldier.left_right_space_min == 2 }
1033
+
1034
+ # 【条件】移動元は「端から2列目」である (▲41から飛んだ場合を除外している)
1035
+ and_cond { origin_soldier.left_right_space_min == 1 }
1036
+
1037
+ # 【条件】移動元の端側に自玉がいる
1038
+ and_cond do
1039
+ if v = origin_soldier.relative_move_to(origin_soldier.left_or_right)
1040
+ if s = board[v]
1041
+ s.piece.key == :king && own?(s)
1042
+ end
1043
+ end
1044
+ end
1045
+ },
1046
+ },
1047
+
1048
+ ################################################################################ 銀
1049
+
1050
+ {
1051
+ key: "腹銀",
1052
+ description: "銀を打ったか移動させたとき左右どちらかに敵玉がある",
1053
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1054
+ func: -> {
1055
+ and_cond do
1056
+ V.left_right_vectors.any? do |e|
1057
+ if v = soldier.relative_move_to(e)
1058
+ if s = board[v]
1059
+ s.piece.key == :king && opponent?(s)
1060
+ end
1061
+ end
1062
+ end
1063
+ end
1064
+ },
1065
+ },
1066
+ {
1067
+ key: "尻銀",
1068
+ description: "銀を打ったか移動させたとき下に敵玉がある",
1069
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1070
+ func: -> {
1071
+ and_cond do
1072
+ if v = soldier.relative_move_to(:down)
1073
+ if s = board[v]
1074
+ s.piece.key == :king && opponent?(s)
1075
+ end
1076
+ end
1077
+ end
1078
+ },
1079
+ },
1080
+ {
1081
+ key: "肩銀",
1082
+ description: "銀を打ったか移動させたとき左斜め前か右斜め前に玉がある",
1083
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1084
+ func: -> {
1085
+ and_cond do
1086
+ V.bishop_up_diagonal_vectors.any? do |up_left|
1087
+ if v = soldier.relative_move_to(up_left)
1088
+ if s = board[v]
1089
+ s.piece.key == :king && opponent?(s)
1090
+ end
1091
+ end
1092
+ end
1093
+ end
1094
+ },
1095
+ },
1096
+ {
1097
+ key: "裾銀",
1098
+ description: "銀を打ったか移動させたとき左斜め後か右斜め後に玉がある",
1099
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1100
+ func: -> {
1101
+ and_cond do
1102
+ V.wariuchi_vectors.any? do |down_left|
1103
+ if v = soldier.relative_move_to(down_left)
1104
+ if s = board[v]
1105
+ s.piece.key == :king && opponent?(s)
1106
+ end
1107
+ end
1108
+ end
1109
+ end
1110
+ },
1111
+ },
1112
+ {
1113
+ key: "頭銀",
1114
+ description: "銀を打ったか移動させたとき前に敵玉がある",
1115
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1116
+ func: -> {
1117
+ and_cond do
1118
+ if v = soldier.relative_move_to(:up)
1119
+ if s = board[v]
1120
+ s.piece.key == :king && opponent?(s)
1121
+ end
1122
+ end
1123
+ end
1124
+ },
1125
+ },
1126
+
1127
+ ################################################################################ 金
1128
+
1129
+ {
1130
+ key: "腹金",
1131
+ description: "金を打ったか移動させたとき左右どちらかに敵玉がある",
1132
+ trigger: { piece_key: :gold, promoted: false, motion: :both },
1133
+ func: -> { instance_exec(&MotionDetector[:"腹銀"].func) },
1134
+ },
1135
+ {
1136
+ key: "尻金",
1137
+ description: "金を打ったか移動させたとき下に敵玉がある",
1138
+ trigger: { piece_key: :gold, promoted: false, motion: :both },
1139
+ func: -> { instance_exec(&MotionDetector[:"尻銀"].func) },
1140
+ },
1141
+ {
1142
+ key: "肩金",
1143
+ description: "金を打ったか移動させたとき左斜め前か右斜め前に玉がある",
1144
+ trigger: { piece_key: :gold, promoted: false, motion: :both },
1145
+ func: -> { instance_exec(&MotionDetector[:"肩銀"].func) },
1146
+ },
1147
+ {
1148
+ key: "裾金",
1149
+ description: "金を打ったか移動させたとき左斜め後か右斜め後に玉がある",
1150
+ trigger: { piece_key: :gold, promoted: false, motion: :both },
1151
+ func: -> { instance_exec(&MotionDetector[:"裾銀"].func) },
1152
+ },
1153
+ {
1154
+ key: "頭金",
1155
+ description: "金を打ったか移動させたとき前に敵玉がある",
1156
+ trigger: { piece_key: :gold, promoted: false, motion: :both },
1157
+ func: -> { instance_exec(&MotionDetector[:"頭銀"].func) },
1158
+ },
1159
+
1160
+ ################################################################################
1161
+
1162
+ {
1163
+ key: "垂れ歩",
1164
+ description: "打った歩の前が空で次に成れる余地がある場合",
1165
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1166
+ func: -> {
1167
+ # 【条件】2, 3, 4 行目である
1168
+ and_cond { soldier.tarefu_desuka? }
1169
+
1170
+ # 【条件】先が空である
1171
+ and_cond do
1172
+ if v = soldier.relative_move_to(:up)
1173
+ board.cell_empty?(v)
1174
+ end
1175
+ end
1176
+ },
1177
+ },
1178
+
1179
+ # 単に「18角打」をチェックした方がいい → やめ → 自力判定する
1180
+ {
1181
+ key: "遠見の角",
1182
+ description: "打った角の位置が下から2番目かつ近い方の端から1番目(つまり自分の香の上の位置)",
1183
+ trigger: { piece_key: :bishop, promoted: false, motion: :both },
1184
+ func: -> {
1185
+ # 【条件】中盤以降である (そうしないと序盤の77角打まで該当してしまう) :OPTIONAL:
1186
+ and_cond { container.outbreak_turn }
1187
+
1188
+ # 【条件】自陣から打っている
1189
+ and_cond { soldier.own_side? }
1190
+
1191
+ # 【条件】端から打っている
1192
+ if false
1193
+ and_cond { soldier.side_edge? }
1194
+ end
1195
+
1196
+ # 【条件】相手の陣地に直通しているかつ長さが 5 以上である
1197
+ and_cond do
1198
+ threshold = 5 # 成立するステップ数。4 だとマッチしすぎるため 5 にする
1199
+ V.bishop_up_diagonal_vectors.any? do |up_left| # 左上と右上を試す
1200
+ matched = false
1201
+ step = 0 # 斜めの効きの数 (駒に衝突したらそこも含める)
1202
+ Dimension::Row.dimension_size.times do |i|
1203
+ if v = soldier.relative_move_to(up_left, magnification: 1 + i)
1204
+ step += 1 # 効きの数+1
1205
+ if step >= threshold && v.opp_side?(location) # 相手の陣地に入れるか?
1206
+ matched = true
1207
+ break
1208
+ end
1209
+ board[v] and break # 相手の駒または自分の駒がある場合は終わる
1210
+ else
1211
+ break # 外に出た
1212
+ end
1213
+ end
1214
+ matched
1215
+ end
1216
+ end
1217
+ },
1218
+ },
1219
+ {
1220
+ key: "割り打ちの銀",
1221
+ description: "打った銀の後ろの左右両方に相手の飛か金がある",
1222
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1223
+ func: -> {
1224
+ and_cond do
1225
+ V.wariuchi_vectors.all? do |e|
1226
+ if v = soldier.relative_move_to(e)
1227
+ if s = board[v]
1228
+ if opponent?(s)
1229
+ (s.piece.key == :rook && s.normal?) || s.piece.key == :gold
1230
+ end
1231
+ end
1232
+ end
1233
+ end
1234
+ end
1235
+ },
1236
+ },
1237
+ {
1238
+ key: "たすきの銀",
1239
+ description: "打った銀の斜め前に飛があり対極に金がある",
1240
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1241
+ func: -> {
1242
+ and_cond do
1243
+ V.tasuki_vectors.any? do |up_left, down_right|
1244
+ if v = soldier.relative_move_to(up_left)
1245
+ if s = board[v]
1246
+ if s.piece.key == :rook && s.normal? && opponent?(s) # 左上に飛車がある
1247
+ if v = soldier.relative_move_to(down_right)
1248
+ if s = board[v]
1249
+ (s.piece.key == :gold || (s.piece.key == :silver && s.promoted)) && opponent?(s) # 右下に金または成銀がある
1250
+ end
1251
+ end
1252
+ end
1253
+ end
1254
+ end
1255
+ end
1256
+ end
1257
+ },
1258
+ },
1259
+ {
1260
+ key: "たすきの角",
1261
+ description: "打った角の斜め前に飛があり対極に金がある",
1262
+ trigger: { piece_key: :bishop, promoted: false, motion: :both },
1263
+ func: -> { instance_exec(&MotionDetector[:"たすきの銀"].func) },
1264
+ },
1265
+ {
1266
+ key: "壁金",
1267
+ description: "飛車や角の位置に玉よりも先に金が移動した",
1268
+ trigger: { piece_key: :gold, promoted: false, motion: :move },
1269
+ func: -> {
1270
+ # 【条件】端から2列目である
1271
+ and_cond { soldier.left_right_space_min == 1 }
1272
+
1273
+ # 【条件】下から2行目である
1274
+ and_cond { soldier.bottom_spaces == 1 }
1275
+
1276
+ # 【条件】下に桂がある
1277
+ and_cond do
1278
+ if v = soldier.relative_move_to(:down)
1279
+ if s = board[v]
1280
+ s.piece.key == :knight && own?(s)
1281
+ end
1282
+ end
1283
+ end
1284
+
1285
+ # 【条件】上に歩がある
1286
+ and_cond do
1287
+ if v = soldier.relative_move_to(:up)
1288
+ if s = board[v]
1289
+ s.piece.key == :pawn && own?(s)
1290
+ end
1291
+ end
1292
+ end
1293
+
1294
+ # 【条件】移動元は端から3列目である
1295
+ and_cond { origin_soldier.left_right_space_min == 2 }
1296
+
1297
+ # 【条件】自玉が1つ存在する
1298
+ and_cond { player.king_soldier_only_one_exist? }
1299
+
1300
+ # 【条件】玉との横軸の距離は3以内である (最長3 = 居玉) 銀と同じ方向に玉がいるというだけで穴熊状態の可能性もある
1301
+ and_cond { soldier.place.column.distance(player.king_soldier.place.column) <= 3 }
1302
+
1303
+ # 【条件】玉は中心から2以内にいる = 銀より内側にいる (居玉 = 0, 早囲い = 2, 美濃囲い = 3, 穴熊 = 4)
1304
+ and_cond { player.king_soldier.place.column.distance_from_center <= 3 }
1305
+
1306
+ # 【条件】玉は自分の陣地にいる
1307
+ and_cond { player.king_soldier.own_side? }
1308
+ },
1309
+ },
1310
+ {
1311
+ key: "壁銀",
1312
+ description: "飛車や角の位置に玉よりも先に銀が移動した",
1313
+ trigger: { piece_key: :silver, promoted: false, motion: :move },
1314
+ func: -> { instance_exec(&MotionDetector[:"壁金"].func) },
1315
+ },
1316
+ {
1317
+ key: "桂頭の銀",
1318
+ description: "打った銀の上に相手の桂がある",
1319
+ trigger: { piece_key: :silver, promoted: false, motion: :both },
1320
+ func: -> {
1321
+ # 【条件】上に相手の桂がある
1322
+ and_cond do
1323
+ if v = soldier.relative_move_to(:up)
1324
+ if s = board[v]
1325
+ s.piece.key == :knight && s.normal? && opponent?(s)
1326
+ end
1327
+ end
1328
+ end
1329
+
1330
+ # 【条件】「22銀」や「82銀」ではない :OPTIONAL:
1331
+ # - 端玉に対しての腹銀が「桂頭の銀」扱いになる場合が多いため除外している
1332
+ # - ただ本当に21や81の桂に対して「桂頭の銀」をかましている場合もなくはない
1333
+ skip_if do
1334
+ soldier.column_is2or8? && soldier.top_spaces == 1
1335
+ end
1336
+ },
1337
+ },
1338
+ {
1339
+ key: "桂頭の玉",
1340
+ description: "「桂頭の玉、寄せにくし」の略",
1341
+ trigger: { piece_key: :king, promoted: false, motion: :move },
1342
+ func: -> {
1343
+ # 【条件】上に相手の桂がある
1344
+ and_cond do
1345
+ if v = soldier.relative_move_to(:up)
1346
+ if s = board[v]
1347
+ s.piece.key == :knight && s.normal? && opponent?(s)
1348
+ end
1349
+ end
1350
+ end
1351
+ },
1352
+ },
1353
+ {
1354
+ key: "歩頭の桂",
1355
+ description: "打ったまたは移動した桂の上に相手の歩がある",
1356
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1357
+ func: -> {
1358
+ and_cond do
1359
+ if v = soldier.relative_move_to(:up)
1360
+ if s = board[v]
1361
+ s.piece.key == :pawn && s.normal? && opponent?(s)
1362
+ end
1363
+ end
1364
+ end
1365
+ },
1366
+ },
1367
+ {
1368
+ key: "急所の桂",
1369
+ description: nil,
1370
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1371
+ func: -> {
1372
+ # 【条件】前進で取られるところに桂打ち(または移動)した
1373
+ and_cond do
1374
+ if v = soldier.relative_move_to(:up)
1375
+ if s = board[v]
1376
+ if opponent?(s)
1377
+ s.promoted || s.piece.forward_movable
1378
+ end
1379
+ end
1380
+ end
1381
+ end
1382
+
1383
+ # 【条件】桂の利きが価値の高い駒に当たっている
1384
+ and_cond do
1385
+ V.keima_vectors.any? do |e|
1386
+ if v = soldier.relative_move_to(e)
1387
+ if s = board[v]
1388
+ if opponent?(s)
1389
+ s.abs_weight > soldier.abs_weight
1390
+ end
1391
+ end
1392
+ end
1393
+ end
1394
+ end
1395
+ },
1396
+ },
1397
+
1398
+ {
1399
+ key: "金頭の桂",
1400
+ description: "打ったまたは移動した桂の上に相手の金がある",
1401
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1402
+ func: -> {
1403
+ and_cond do
1404
+ if v = soldier.relative_move_to(:up)
1405
+ if s = board[v]
1406
+ s.piece.key == :gold && opponent?(s)
1407
+ end
1408
+ end
1409
+ end
1410
+ },
1411
+ },
1412
+ {
1413
+ key: "桂頭の桂",
1414
+ description: nil,
1415
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1416
+ func: -> {
1417
+ # 【条件】上に相手の桂がある
1418
+ and_cond do
1419
+ if v = soldier.relative_move_to(:up)
1420
+ if s = board[v]
1421
+ s.piece.key == :knight && s.normal? && opponent?(s)
1422
+ end
1423
+ end
1424
+ end
1425
+ },
1426
+ },
1427
+ {
1428
+ key: "銀ばさみ",
1429
+ description: "動かした歩の左右どちらかに相手の銀があり、その向こうに自分の歩がある。また歩の前に何もない。",
1430
+ trigger: { piece_key: :pawn, promoted: false, motion: :both },
1431
+ func: -> {
1432
+ # 【却下】すでに開戦している
1433
+ skip_if { container.outbreak_turn }
1434
+
1435
+ # 【却下】同歩
1436
+ skip_if { captured_soldier }
1437
+
1438
+ # 【条件】進めた歩の前が空である
1439
+ and_cond do
1440
+ if v = soldier.relative_move_to(:up)
1441
+ board.cell_empty?(v)
1442
+ end
1443
+ end
1444
+
1445
+ # 左右どちらかが成立している
1446
+ and_cond do
1447
+ V.ginbasami_verctors.any? do |right, right_right, right_right_up|
1448
+ # 【条件】右に相手の銀ある
1449
+ yield_self {
1450
+ if v = soldier.relative_move_to(right)
1451
+ if s = board[v]
1452
+ s.piece.key == :silver && s.normal? && opponent?(s)
1453
+ end
1454
+ end
1455
+ } or next
1456
+
1457
+ # 【条件】右右に自分の歩がある
1458
+ yield_self {
1459
+ if v = soldier.relative_move_to(right_right)
1460
+ if s = board[v]
1461
+ s.piece.key == :pawn && s.normal? && own?(s)
1462
+ end
1463
+ end
1464
+ } or next
1465
+
1466
+ # 【条件】右右上が空である
1467
+ if v = soldier.relative_move_to(right_right_up)
1468
+ board.cell_empty?(v)
1469
+ end
1470
+ end
1471
+ end
1472
+ },
1473
+ },
1474
+ {
1475
+ key: "端玉には端歩",
1476
+ description: nil,
1477
+ trigger: { piece_key: :pawn, promoted: false, motion: :move },
1478
+ func: -> {
1479
+ # 【条件】敵玉が1つ存在する
1480
+ and_cond { opponent_player.king_soldier_only_one_exist? }
1481
+
1482
+ # 【条件】端である
1483
+ and_cond { soldier.side_edge? }
1484
+
1485
+ # 【条件】上が相手の歩である (▲16歩△14歩の状態で▲15歩としたということ)
1486
+ and_cond do
1487
+ if v = soldier.relative_move_to(:up)
1488
+ if s = board[v]
1489
+ s.piece.key == :pawn && s.normal? && opponent?(s)
1490
+ end
1491
+ end
1492
+ end
1493
+
1494
+ # 【条件】奥に敵玉がいる (13→12→11と探す)
1495
+ and_cond do
1496
+ # この 2 は 15 - 2 = 13 の 2 で、15を基点にしているとすれば14に歩があり13から調べるため
1497
+ # Dimension::Row.dimension_size は書かなくてもいい
1498
+ (2..).any? do |y|
1499
+ if v = soldier.relative_move_to(:up, magnification: y)
1500
+ if s = board[v]
1501
+ if s.piece.key == :king && opponent?(s)
1502
+ true
1503
+ else
1504
+ break # 駒があるが玉でない場合は切り上げる
1505
+ end
1506
+ end
1507
+ else
1508
+ break # 一番上まで調べたが玉はいなかった
1509
+ end
1510
+ end
1511
+ end
1512
+
1513
+ # 【条件】下に「自分の香飛龍」 (17→18→19と探す)
1514
+ and_cond do
1515
+ # この 2 は突いた歩の 2 つ下から香を調べるため
1516
+ (2..).any? do |y|
1517
+ if v = soldier.relative_move_to(:down, magnification: y)
1518
+ if s = board[v]
1519
+ if s.boar_mode? && own?(s) # 「自分の香飛龍」か?
1520
+ true
1521
+ else
1522
+ break # 駒があるが「自分の香飛龍」ではなかったため切り上げる
1523
+ end
1524
+ end
1525
+ else
1526
+ break # 一番下まで調べたが「自分の香飛龍」はいなかった
1527
+ end
1528
+ end
1529
+ end
1530
+ },
1531
+ },
1532
+ {
1533
+ key: "歩切れ",
1534
+ description: "中盤以降に絞らないとタグを入れる意味がない",
1535
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1536
+ func: -> {
1537
+ # 【条件】中盤以降である
1538
+ and_cond { container.outbreak_turn }
1539
+
1540
+ # 【却下】歩がある
1541
+ skip_if { player.piece_box.has_key?(:pawn) }
1542
+ },
1543
+ },
1544
+ {
1545
+ key: "田楽刺し",
1546
+ description: "角の頭に打ってその奥に玉などの大駒がある。「底歩に香」の手筋があるためこれは角のみを対象とする",
1547
+ trigger: { piece_key: :lance, promoted: false, motion: :drop },
1548
+ func: -> {
1549
+ and_cond do
1550
+ mode = :walk_to_bishop
1551
+ (1..).each do |y|
1552
+ if v = soldier.relative_move_to(:up, magnification: y)
1553
+ if s = board[v]
1554
+ if opponent?(s)
1555
+ case mode
1556
+ when :walk_to_bishop # 角を探す
1557
+ if s.piece.key == :bishop && s.normal?
1558
+ mode = :walk_to_dengaku_target
1559
+ end
1560
+ when :walk_to_dengaku_target # 大駒を探す
1561
+ if s.piece.dengaku_target
1562
+ mode = :dengaku_matched
1563
+ break
1564
+ end
1565
+ else
1566
+ raise "must not happen"
1567
+ end
1568
+ else
1569
+ break # 自分の駒が間にある場合は田楽指しではない
1570
+ end
1571
+ else
1572
+ # 駒がない場合はさらに奥に進む
1573
+ end
1574
+ else
1575
+ break # 盤の外に出た場合は終わる
1576
+ end
1577
+ end
1578
+ mode == :dengaku_matched
1579
+ end
1580
+ },
1581
+ },
1582
+ {
1583
+ key: "底歩に香",
1584
+ description: nil,
1585
+ trigger: { piece_key: :lance, promoted: false, motion: :drop },
1586
+ func: -> {
1587
+ # 【条件】底歩がある
1588
+ and_cond do
1589
+ if s = board[soldier.move_to_top_edge]
1590
+ s.piece.key == :pawn && s.normal? && opponent?(s)
1591
+ end
1592
+ end
1593
+
1594
+ # 【条件】そこ歩の上に金がある
1595
+ and_cond do
1596
+ if s = board[soldier.move_to_top_edge]
1597
+ if v = s.relative_move_to(:up)
1598
+ if s = board[v]
1599
+ s.piece.key == :gold && opponent?(s)
1600
+ end
1601
+ end
1602
+ end
1603
+ end
1604
+
1605
+ # 【条件】打った香車の1つ前の升目が空いている
1606
+ and_cond do
1607
+ if v = soldier.relative_move_to(:up)
1608
+ board.cell_empty?(v)
1609
+ end
1610
+ end
1611
+
1612
+ # 【条件】敵金まで香が通っている
1613
+ and_cond do
1614
+ found = false
1615
+ (1..).each do |y|
1616
+ if v = soldier.relative_move_to(:up, magnification: y)
1617
+ if s = board[v]
1618
+ if opponent?(s)
1619
+ if s.bottom_spaces == 1 # つまり金である
1620
+ found = true
1621
+ end
1622
+ else
1623
+ # 自分の駒が間にある場合は香が相手まで通っていない
1624
+ break
1625
+ end
1626
+ else
1627
+ # 駒がない場合はさらに奥に進む
1628
+ end
1629
+ else
1630
+ # 盤の外に出た場合は終わる(前の条件があるので、ここに来ることはない)
1631
+ break
1632
+ end
1633
+ end
1634
+ found
1635
+ end
1636
+ },
1637
+ },
1638
+ {
1639
+ # https://yokohamayanke.com/1078/ によると金底の香の状態でも「下段の香」として紹介されている
1640
+ # いろんな条件を考えたが結局「下段」のみのチェックとする
1641
+ key: "下段の香",
1642
+ description: "打った香が一番下",
1643
+ trigger: { piece_key: :lance, promoted: false, motion: :drop },
1644
+ func: -> {
1645
+ # 【条件】「最下段」である
1646
+ and_cond { soldier.bottom_spaces.zero? }
1647
+ },
1648
+ },
1649
+ {
1650
+ key: "歩裏の香",
1651
+ description: nil,
1652
+ trigger: { piece_key: :lance, promoted: false, motion: :drop },
1653
+ func: -> {
1654
+ # 【条件】下(方向)に相手の歩がある
1655
+ and_cond do
1656
+ found = false
1657
+ Dimension::Row.dimension_size.times do |i|
1658
+ if v = soldier.relative_move_to(:down, magnification: 1 + i)
1659
+ if s = board[v]
1660
+ if s.piece.key == :pawn && s.normal? && opponent?(s)
1661
+ found = true
1662
+ break
1663
+ end
1664
+ end
1665
+ else
1666
+ break
1667
+ end
1668
+ end
1669
+ found
1670
+ end
1671
+ },
1672
+ },
1673
+ {
1674
+ key: "歩裏の歩",
1675
+ description: nil,
1676
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1677
+ func: -> { instance_exec(&MotionDetector[:"歩裏の香"].func) },
1678
+ },
1679
+ {
1680
+ key: "マムシのと金",
1681
+ description: nil,
1682
+ trigger: { piece_key: :pawn, promoted: true, motion: :move },
1683
+ func: -> {
1684
+ # 【条件】移動元の駒は「と」である (すでに成っている)
1685
+ and_cond { origin_soldier.promoted }
1686
+
1687
+ # 【条件】敵玉が1つ存在する
1688
+ and_cond { opponent_player.king_soldier_only_one_exist? }
1689
+
1690
+ # 【条件】敵玉に近づく
1691
+ and_cond { teki_king_ni_tikazuita? }
1692
+
1693
+ # 【却下】駒を取っている (意図して近づいてはいないため)
1694
+ skip_if { captured_soldier }
1695
+ },
1696
+ },
1697
+
1698
+ {
1699
+ key: "ふんどしの桂",
1700
+ description: "打った桂の2つ前の左右に自分より価値の高い相手の駒がある",
1701
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1702
+ func: -> {
1703
+ and_cond do
1704
+ V.keima_vectors.all? do |e|
1705
+ if v = soldier.relative_move_to(e)
1706
+ if s = board[v]
1707
+ if opponent?(s)
1708
+ s.abs_weight > soldier.abs_weight
1709
+ end
1710
+ end
1711
+ end
1712
+ end
1713
+ end
1714
+ },
1715
+ },
1716
+
1717
+ {
1718
+ key: "控えの桂",
1719
+ description: "打った桂の利きにある相手の駒を集め、それが1つ以上かつすべて歩である",
1720
+ trigger: { piece_key: :knight, promoted: false, motion: :drop },
1721
+ func: -> {
1722
+ # 【条件】打った位置が6行目以降である
1723
+ and_cond { soldier.top_spaces >= Dimension::Row.promotable_depth + 2 }
1724
+
1725
+ # 打った桂の利きの2箇所にある相手の駒を取得する
1726
+ soldiers = V.keima_vectors.collect { |e|
1727
+ if v = soldier.relative_move_to(e)
1728
+ if s = board[v]
1729
+ if opponent?(s)
1730
+ s
1731
+ end
1732
+ end
1733
+ end
1734
+ }.compact
1735
+
1736
+ # 【条件】 相手の駒は1つ以上ある
1737
+ and_cond { !soldiers.empty? }
1738
+
1739
+ # 【条件】 相手の駒は「歩」である
1740
+ and_cond do
1741
+ soldiers.all? { |e| e.piece.key == :pawn }
1742
+ end
1743
+ },
1744
+ },
1745
+ {
1746
+ key: "高跳びの桂",
1747
+ description: nil,
1748
+ trigger: { piece_key: :knight, promoted: false, motion: :move },
1749
+ func: -> {
1750
+ # 【条件】奇数列である
1751
+ and_cond { soldier.place.column.value.odd? }
1752
+
1753
+ # 【条件】位の行である
1754
+ and_cond { soldier.kurai? }
1755
+ },
1756
+ },
1757
+ {
1758
+ key: "土下座の歩",
1759
+ description: nil,
1760
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1761
+ func: -> {
1762
+ # 【条件】8,9行目である
1763
+ and_cond { soldier.bottom_spaces < 2 }
1764
+
1765
+ # 【条件】一つ上が空である
1766
+ and_cond do
1767
+ if v = soldier.relative_move_to(:up)
1768
+ board.cell_empty?(v)
1769
+ end
1770
+ end
1771
+
1772
+ # 【条件】二つ上に相手の前に進める駒がある (成銀や馬があっても土下座の対象とする)
1773
+ and_cond do
1774
+ if v = soldier.relative_move_to(:up_up)
1775
+ if s = board[v]
1776
+ if opponent?(s)
1777
+ s.piece.forward_movable || s.promoted
1778
+ end
1779
+ end
1780
+ end
1781
+ end
1782
+ },
1783
+ },
1784
+ {
1785
+ key: "たたきの歩",
1786
+ description: "取ると取り返せるような場合もたたきの歩として判別されるのであまり正しくない",
1787
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1788
+ func: -> {
1789
+ # 【条件】打った位置が1から4行目である
1790
+ and_cond { soldier.top_spaces.between?(1, Dimension::Row.promotable_depth) }
1791
+
1792
+ # 【条件】相手が「成駒」または「飛金銀香玉」である
1793
+ and_cond do
1794
+ if v = soldier.relative_move_to(:up)
1795
+ if s = board[v]
1796
+ if opponent?(s)
1797
+ s.promoted || s.piece.tatakare_target
1798
+ end
1799
+ end
1800
+ end
1801
+ end
1802
+
1803
+ # 【却下】打った歩に結びついている利きがある (これはたたきというより打ち込みのため)
1804
+ # 本当はすべての利きを調べてないといけないのだけど重くなるので、
1805
+ # 「打った位置の後ろに自分の(前に進めることのできる)駒がない」だけを判定している
1806
+ skip_if do
1807
+ if v = soldier.relative_move_to(:down)
1808
+ if s = board[v]
1809
+ if own?(s)
1810
+ s.promoted || s.piece.forward_movable
1811
+ end
1812
+ end
1813
+ end
1814
+ end
1815
+
1816
+ # 【却下】連打の歩 :OPTIONAL:
1817
+ skip_if do
1818
+ if hand_log = previous_hand_log(2) # 前回の自分の手
1819
+ if drop_hand = hand_log.drop_hand # 打った手
1820
+ if s = drop_hand.soldier # 駒
1821
+ Assertion.assert { own?(s) }
1822
+ s.piece.key == :pawn && s.place == soldier.relative_move_to(:up)
1823
+ end
1824
+ end
1825
+ end
1826
+ end
1827
+ },
1828
+ },
1829
+ {
1830
+ key: "継ぎ歩",
1831
+ description: "条件が成立しない方を先に判定した方が早めに打ち切れるので2手目1手目の順で見る",
1832
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1833
+ func: -> {
1834
+ # 0手前: ▲25歩打 継ぎ歩 したらここに来る
1835
+
1836
+ # 2手前: ▲24歩(25) 突き
1837
+ and_cond do
1838
+ if hand_log = previous_hand_log(2)
1839
+ if s = hand_log.move_hand&.soldier # 最初を突き捨てとするため hand ではなく move_hand にしている
1840
+ if s.piece.key == :pawn && s.normal? && own?(s)
1841
+ s.place == soldier.relative_move_to(:up)
1842
+ end
1843
+ end
1844
+ end
1845
+ end
1846
+
1847
+ # 1手前: △24同歩 取らされる
1848
+ and_cond do
1849
+ if hand_log = previous_hand_log(1)
1850
+ if s = hand_log.move_hand&.soldier
1851
+ if s.piece.key == :pawn && s.normal? && opponent?(s)
1852
+ s.place == soldier.relative_move_to(:up)
1853
+ end
1854
+ end
1855
+ end
1856
+ end
1857
+ },
1858
+ },
1859
+ {
1860
+ key: "連打の歩",
1861
+ description: "",
1862
+ trigger: { piece_key: :pawn, promoted: false, motion: :drop },
1863
+ func: -> {
1864
+ # 0手前: ▲25歩打 継ぎ歩 したらここに来る
1865
+
1866
+ # 2手前: ▲24歩打
1867
+ and_cond do
1868
+ if hand_log = previous_hand_log(2)
1869
+ if s = hand_log.drop_hand&.soldier
1870
+ if s.piece.key == :pawn && own?(s)
1871
+ s.place == soldier.relative_move_to(:up)
1872
+ end
1873
+ end
1874
+ end
1875
+ end
1876
+
1877
+ # 1手前: △24同何か 取らされる
1878
+ and_cond do
1879
+ if hand_log = previous_hand_log(1)
1880
+ if s = hand_log.move_hand&.soldier
1881
+ if opponent?(s)
1882
+ s.place == soldier.relative_move_to(:up)
1883
+ end
1884
+ end
1885
+ end
1886
+ end
1887
+ },
1888
+ },
1889
+ {
1890
+ key: "継ぎ桂",
1891
+ description: "継ぐのは前なので打った桂の2つ後ろの左右のどちらかに自分の桂がある",
1892
+ trigger: { piece_key: :knight, promoted: false, motion: :both },
1893
+ func: -> {
1894
+ and_cond do
1895
+ V.tsugikei_vectors.any? do |e|
1896
+ if v = soldier.relative_move_to(e)
1897
+ if s = board[v]
1898
+ s.piece.key == :knight && s.normal? && own?(s)
1899
+ end
1900
+ end
1901
+ end
1902
+ end
1903
+ },
1904
+ },
1905
+ {
1906
+ key: "跳ね違いの桂",
1907
+ description: "移動元から見て移動してない方に相手が1手前に移動した桂があるか?",
1908
+ trigger: { piece_key: :knight, promoted: :both, motion: :move },
1909
+ func: -> {
1910
+ and_cond do
1911
+ # △33桂(21)▲13桂成(25)で考える
1912
+ # 跳ね違いは相手の桂を捌けなくする目的でもあるため「成っていない桂」のチェックとする
1913
+ V.keima_vectors.any? do |e|
1914
+ if v = origin_soldier.relative_move_to(e) # 25から33と13を見る
1915
+ if s = board[v] # そこにある駒
1916
+ if opponent?(s) && s.piece.key == :knight && s.normal? # その駒は相手の駒かつ桂
1917
+ if hand_log = previous_hand_log(1) # それは1手前に「動かした」駒か?
1918
+ hand_log&.move_hand&.soldier == s
1919
+ end
1920
+ end
1921
+ end
1922
+ end
1923
+ end
1924
+ end
1925
+ },
1926
+ },
1927
+ {
1928
+ key: "オリオン囲い",
1929
+ description: "玉の上に銀が3つ。玉の左右は空",
1930
+ trigger: [
1931
+ { piece_key: :silver, promoted: false, motion: :both },
1932
+ { piece_key: :king, promoted: false, motion: :move },
1933
+ ],
1934
+ func: -> {
1935
+ # 【条件】一般的な駒落ち以上とする
1936
+ and_cond { preset_is(:x_taden) }
1937
+
1938
+ # 【条件】自玉が1つ存在する
1939
+ and_cond { player.king_soldier_only_one_exist? }
1940
+
1941
+ # 【条件】玉の上に銀が3つ
1942
+ and_cond do
1943
+ V.front_vectors.all? do |e|
1944
+ if v = player.king_soldier.relative_move_to(e)
1945
+ if s = board[v]
1946
+ s.piece.key == :silver && s.normal? && own?(s)
1947
+ end
1948
+ end
1949
+ end
1950
+ end
1951
+
1952
+ # 【条件】玉の左右は空である
1953
+ and_cond do
1954
+ V.left_right_vectors.all? do |e|
1955
+ if v = player.king_soldier.relative_move_to(e)
1956
+ board.cell_empty?(v)
1957
+ end
1958
+ end
1959
+ end
1960
+ },
1961
+ },
1962
+ {
1963
+ key: "入玉",
1964
+ description: "玉が4行目から3行目に移動した",
1965
+ trigger: { piece_key: :king, promoted: false, motion: :move },
1966
+ func: -> {
1967
+ # 【条件】3行目に移動する
1968
+ and_cond { soldier.just_nyuugyoku? }
1969
+
1970
+ # 【条件】4行目から移動する
1971
+ and_cond { origin_soldier.next_nyugyoku? }
1972
+ },
1973
+ },
1974
+ {
1975
+ key: "タッチダウン",
1976
+ description: "自分玉が相手玉の位置に移動した",
1977
+ trigger: { piece_key: :king, promoted: false, motion: :move },
1978
+ func: -> {
1979
+ # 【条件】一番上である
1980
+ and_cond { soldier.top_spaces == 0 }
1981
+
1982
+ # 【条件】5列名である
1983
+ and_cond { soldier.column_is5? }
1984
+
1985
+ # 【条件】一般的な駒落ち以上とする
1986
+ and_cond { preset_is(:x_taden) }
1987
+ },
1988
+ },
1989
+ {
1990
+ key: "角不成",
1991
+ description: "相手陣地に入るときと出るときの両方チェックする",
1992
+ trigger: { piece_key: :bishop, promoted: false, motion: :move },
1993
+ func: -> {
1994
+ and_cond { origin_soldier.tsugini_nareru_on?(place) }
1995
+ },
1996
+ },
1997
+ {
1998
+ key: "飛車不成",
1999
+ description: "角不成と同じ方法でよい",
2000
+ trigger: { piece_key: :rook, promoted: false, motion: :move },
2001
+ func: -> {
2002
+ and_cond { origin_soldier.tsugini_nareru_on?(place) }
2003
+ },
2004
+ },
2005
+ {
2006
+ key: "銀不成",
2007
+ description: "角不成と同じ方法でよい",
2008
+ trigger: { piece_key: :silver, promoted: false, motion: :move },
2009
+ func: -> {
2010
+ and_cond { origin_soldier.tsugini_nareru_on?(place) }
2011
+ },
2012
+ },
2013
+
2014
+ ################################################################################
2015
+ ]
2016
+
2017
+ def triggers
2018
+ TriggerExpander.expand(trigger)
2019
+ end
2020
+ end
2021
+ end
2022
+ end