bioshogi 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/.dumbjump +4 -0
  3. data/A/342/206/222B/342/206/222C/346/210/246/346/263/225.txt +2 -2
  4. data/Gemfile.lock +1 -1
  5. data/README.org +3 -3
  6. data/lib/bioshogi/ai/brain.rb +6 -6
  7. data/lib/bioshogi/analysis/analyzer.rb +66 -8
  8. data/lib/bioshogi/analysis/analyzer_mod.rb +2 -9
  9. data/lib/bioshogi/analysis/attack_info.rb +231 -227
  10. data/lib/bioshogi/analysis/{tech_accessor.rb → basic_accessor.rb} +4 -4
  11. data/lib/bioshogi/analysis/board_piller_methods.rb +9 -9
  12. data/lib/bioshogi/analysis/defense_info.rb +132 -132
  13. data/lib/bioshogi/analysis/file_normalizer.rb +1 -1
  14. data/lib/bioshogi/analysis/frequency.rb +368 -311
  15. data/lib/bioshogi/analysis/note_info.rb +6 -6
  16. data/lib/bioshogi/analysis/rocket_analyzer.rb +45 -58
  17. data/lib/bioshogi/analysis/shape_info.rb +73 -19
  18. data/lib/bioshogi/analysis/style_accessor.rb +22 -19
  19. data/lib/bioshogi/analysis/tactic_hit_turn_table.rb +8 -3
  20. data/lib/bioshogi/analysis/tactic_hit_turn_table_generator.rb +15 -14
  21. data/lib/bioshogi/analysis/tactic_info.rb +2 -2
  22. data/lib/bioshogi/analysis/technique_info.rb +3 -4
  23. data/lib/bioshogi/analysis/technique_verify_info.rb +627 -0
  24. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/220/215/344/272/272/343/201/253/345/256/232/350/267/241/343/201/252/343/201/227.kif +4 -2
  25. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/244/247/351/247/222/345/205/250/343/203/226/343/203/203/343/203/201.kif +4 -0
  26. data/lib/bioshogi/analysis//345/202/231/350/200/203//345/257/276/347/251/264/347/206/212.kif +3 -2
  27. data/lib/bioshogi/analysis//345/202/231/350/200/203//346/214/201/344/271/205/346/210/246.kif +2 -2
  28. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/251/264/347/206/212.kif +3 -2
  29. data/lib/bioshogi/analysis//345/202/231/350/200/203//347/251/264/347/206/212/343/201/256/345/247/277/347/204/274/343/201/215.kif +3 -2
  30. data/lib/bioshogi/analysis//345/202/231/350/200/203//350/203/214/346/260/264/343/201/256/351/231/243.kif +7 -3
  31. data/lib/bioshogi/analysis//345/202/231/350/200/203//351/225/267/346/211/213/346/225/260.kif +1 -2
  32. data/lib/bioshogi/analysis//345/202/231/350/200/203//351/247/222/346/237/261.kif +4 -2
  33. 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 +1 -1
  34. 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 +4 -2
  35. 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 +1 -1
  36. 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 +1 -1
  37. data/lib/bioshogi/analysis//345/233/262/343/201/204//343/202/253/343/202/277/345/233/262/343/201/204.kif +3 -1
  38. 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 +1 -1
  39. 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 +1 -1
  40. 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 +1 -1
  41. 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 +6 -3
  42. 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 +1 -1
  43. data/lib/bioshogi/analysis//345/233/262/343/201/204//344/270/255/344/275/217/343/201/276/343/201/204.kif +2 -0
  44. 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 +1 -1
  45. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/217/263/347/237/242/345/200/211.kif +1 -1
  46. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/347/251/264/347/206/212.kif +1 -1
  47. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/347/276/216/346/277/203.kif +1 -1
  48. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/236/232/351/212/200/345/206/240.kif +2 -2
  49. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/346/256/265/347/253/257/347/216/211.kif +3 -3
  50. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/233/233/350/247/222/347/237/242/345/200/211.kif +1 -1
  51. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/234/237/345/261/205/347/237/242/345/200/211.kif +1 -1
  52. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/235/212/344/270/273/347/276/216/346/277/203.kif +1 -1
  53. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/247/345/261/261/347/276/216/346/277/203.kif +1 -1
  54. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/247/351/232/205/345/233/262/343/201/204.kif +1 -1
  55. data/lib/bioshogi/analysis//345/233/262/343/201/204//345/244/251/351/207/216/347/237/242/345/200/211.kif +1 -1
  56. 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 +2 -1
  57. 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 +1 -1
  58. 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 +4 -2
  59. 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 +1 -1
  60. 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 +1 -1
  61. 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 +1 -1
  62. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/202/252/345/275/242/347/237/242/345/200/211.kif +1 -1
  63. 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 +4 -1
  64. 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 +5 -2
  65. 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 +1 -1
  66. 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 +2 -2
  67. 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 +1 -1
  68. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/226/207/351/216/256/345/233/262/343/201/204.kif +1 -1
  69. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/234/250/346/235/221/347/276/216/346/277/203.kif +1 -1
  70. 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 +1 -1
  71. data/lib/bioshogi/analysis//345/233/262/343/201/204//346/265/201/343/202/214/347/237/242/345/200/211.kif +1 -1
  72. 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 +1 -1
  73. 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 +1 -1
  74. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/211/207/347/251/264/347/206/212.kif +1 -1
  75. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/237/242/345/200/211/347/251/264/347/206/212.kif +1 -1
  76. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/256/261/345/205/245/343/202/212/345/250/230.kif +2 -2
  77. data/lib/bioshogi/analysis//345/233/262/343/201/204//347/267/217/347/237/242/345/200/211.kif +1 -1
  78. 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 +1 -1
  79. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/217/212/346/260/264/347/237/242/345/200/211.kif +1 -1
  80. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/217/261/347/237/242/345/200/211.kif +1 -1
  81. 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 +1 -1
  82. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/243/276/345/233/272/343/202/201.kif +1 -1
  83. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/247/222/347/237/242/345/200/211.kif +1 -1
  84. data/lib/bioshogi/analysis//345/233/262/343/201/204//350/261/206/350/205/220/347/237/242/345/200/211.kif +1 -1
  85. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/200/243/347/233/237/347/276/216/346/277/203.kif +1 -1
  86. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/345/244/232/344/274/235.kif +1 -1
  87. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/204/241/345/217/214.kif +3 -2
  88. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/233/276/345/233/262/343/201/204.kif +1 -1
  89. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/207/221/347/276/216/346/277/203.kif +2 -0
  90. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/345/206/240/347/251/264/347/206/212.kif +1 -1
  91. 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 +2 -2
  92. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/212/200/347/276/216/346/277/203.kif +2 -2
  93. 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 +1 -1
  94. data/lib/bioshogi/analysis//345/233/262/343/201/204//351/253/230/347/237/242/345/200/211.kif +1 -1
  95. 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 +1 -1
  96. data/lib/bioshogi/analysis//346/210/246/346/263/225/2/346/211/213/347/233/256/342/226/2633/343/203/213/351/243/233/346/210/246/346/263/225.kif +2 -1
  97. 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 +1 -1
  98. 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 +1 -1
  99. data/lib/bioshogi/analysis//346/210/246/346/263/225/5/346/211/213/347/210/206/345/274/276.kif +5 -1
  100. data/lib/bioshogi/analysis//346/210/246/346/263/225/5/347/255/213/344/275/215/345/217/226/343/202/212.kif +2 -2
  101. data/lib/bioshogi/analysis//346/210/246/346/263/225/6/347/255/213/344/275/215/345/217/226/343/202/212.kif +1 -1
  102. 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 +5 -2
  103. 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 +5 -3
  104. 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 +1 -1
  105. 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 +2 -2
  106. 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 +3 -2
  107. 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 +1 -1
  108. 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 +3 -2
  109. 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 +1 -1
  110. 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 +1 -1
  111. 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 +1 -1
  112. 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 +1 -1
  113. 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 +4 -2
  114. 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 +1 -1
  115. 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 +3 -0
  116. 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 +6 -2
  117. 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 +1 -1
  118. 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 +1 -1
  119. 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 +6 -3
  120. 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 +3 -2
  121. 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 +1 -1
  122. 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 +1 -1
  123. 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 +27 -0
  124. 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 +3 -1
  125. 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 +3 -1
  126. 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 +4 -3
  127. 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 +6 -2
  128. 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 +1 -1
  129. 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 +1 -1
  130. 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 +1 -1
  131. 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 +1 -1
  132. 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 +1 -1
  133. 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 +2 -2
  134. 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 +1 -1
  135. 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 +5 -3
  136. 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 +2 -1
  137. 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 +6 -3
  138. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/200/351/226/223/351/243/233/350/273/212.kif +1 -1
  139. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/346/256/265/345/217/263/347/216/211.kif +3 -2
  140. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/211/351/226/223/351/243/233/350/273/212.kif +1 -1
  141. 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 +1 -1
  142. 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 +2 -1
  143. 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 +2 -1
  144. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/216/237/351/243/233/350/273/212.kif +2 -2
  145. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/270/255/345/272/247/351/243/233/350/273/212.kif +2 -2
  146. 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 +1 -1
  147. 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 +3 -2
  148. 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 +1 -1
  149. data/lib/bioshogi/analysis//346/210/246/346/263/225//344/271/235/351/226/223/351/243/233/350/273/212.kif +1 -1
  150. 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 +1 -1
  151. 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 +1 -1
  152. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/213/207/346/260/227/346/265/201.kif +1 -1
  153. 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 +1 -1
  154. 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 +4 -1
  155. 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 +1 -1
  156. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/217/263/347/216/211.kif +1 -1
  157. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/220/214/345/236/213/347/237/242/345/200/211.kif +2 -2
  158. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/233/233/346/211/213/350/247/222.kif +1 -1
  159. 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 +3 -2
  160. 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 +2 -1
  161. 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 +1 -1
  162. 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 +1 -1
  163. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/254/211/351/207/216/346/265/201.kif +4 -1
  164. 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 +1 -2
  165. 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/346/243/222/351/212/200.kif +6 -3
  166. 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 +2 -3
  167. 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 +2 -0
  168. data/lib/bioshogi/analysis//346/210/246/346/263/225//345/261/261/347/224/260/345/256/232/350/267/241.kif +1 -1
  169. 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 +3 -2
  170. 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 +1 -1
  171. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/210/270/{351/203/250 → 350/276/272}/346/265/2014/342/206/2223/346/210/246/346/263/225.kif +3 -3
  172. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/345/254/211/351/207/216/346/265/201.kif +2 -0
  173. 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 +3 -1
  174. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/347/261/263/351/225/267/347/216/211.kif +1 -1
  175. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/226/260/351/254/274/346/256/272/343/201/227.kif +1 -1
  176. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/234/250/346/235/221/345/256/232/350/267/241.kif +5 -3
  177. 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 +1 -1
  178. 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 +2 -1
  179. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/347/216/211.kif +1 -1
  180. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/243/222/351/207/221.kif +1 -1
  181. 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 +2 -2
  182. 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 +2 -2
  183. data/lib/bioshogi/analysis//346/210/246/346/263/225//346/250/252/346/255/251/345/217/226/343/202/212.kif +2 -2
  184. 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 +1 -1
  185. 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 +1 -1
  186. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/216/211/351/240/255/351/212/200.kif +3 -1
  187. 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 +2 -6
  188. 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 +2 -0
  189. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/234/237/351/203/250/346/265/201.kif +5 -3
  190. 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 +3 -1
  191. 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 +1 -1
  192. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/250/262/345/272/255/346/210/246/346/263/225.kif +1 -1
  193. 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 +1 -1
  194. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/251/264/350/247/222/346/210/246/346/263/225.kif +4 -3
  195. 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 +1 -1
  196. 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 +1 -1
  197. data/lib/bioshogi/analysis//346/210/246/346/263/225//347/255/213/351/201/225/343/201/204/350/247/222.kif +3 -2
  198. 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 +8 -2
  199. 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 +2 -1
  200. 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 +3 -1
  201. 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 +1 -1
  202. 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 +1 -1
  203. 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 +1 -1
  204. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/205/260/346/216/233/343/201/221/351/212/200.kif +1 -2
  205. 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 +5 -4
  206. 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 +5 -3
  207. 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 +4 -2
  208. 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 +1 -1
  209. 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 +1 -1
  210. 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 +2 -1
  211. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/242/226/351/243/233/350/273/212.kif +7 -2
  212. 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 +1 -1
  213. 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 +5 -2
  214. 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 +4 -1
  215. 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 +2 -0
  216. 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 +1 -1
  217. 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 +2 -2
  218. 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 +1 -1
  219. data/lib/bioshogi/analysis//346/210/246/346/263/225//350/266/205/346/200/245/346/210/246.kif +1 -1
  220. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/200/206/346/243/222/351/212/200.kif +1 -1
  221. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/201/240/345/261/261/346/265/201.kif +3 -2
  222. 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 +24 -11
  223. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/207/221/346/262/242/346/265/201.kif +1 -1
  224. 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 +1 -1
  225. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/207/221/351/212/200/346/251/213.kif +2 -2
  226. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/212/200/351/233/262/351/233/200.kif +1 -1
  227. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/214/206/345/210/200/346/210/246/346/263/225.kif +54 -0
  228. 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 +1 -1
  229. 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 +3 -2
  230. 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 +5 -2
  231. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/233/200/345/210/272/343/201/227.kif +2 -2
  232. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/233/201/346/234/250/345/217/263/347/216/211.kif +3 -2
  233. data/lib/bioshogi/analysis//346/210/246/346/263/225//351/242/250/350/273/212.kif +1 -1
  234. 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 +1 -1
  235. 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 +54 -0
  236. 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 +1 -1
  237. 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 +1 -1
  238. 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 +1 -1
  239. 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 +27 -9
  240. data/lib/bioshogi/analysis//346/211/213/347/255/213//343/203/221/343/203/263/343/203/204/343/202/222/350/204/261/343/201/220.kif +11 -11
  241. 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 +12 -14
  242. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/200/243/346/211/223/343/201/256/346/255/251.kif +2 -1
  243. data/lib/bioshogi/analysis//346/211/213/347/255/213//351/201/240/350/246/213/343/201/256/350/247/222.kif +16 -6
  244. data/lib/bioshogi/analysis.rb +4 -0
  245. data/lib/bioshogi/board/csa_formatter.rb +2 -2
  246. data/lib/bioshogi/board/kakinoki_formatter.rb +5 -5
  247. data/lib/bioshogi/board/reader_methods.rb +8 -4
  248. data/lib/bioshogi/board_parser/kakinoki_board_parser.rb +2 -2
  249. data/lib/bioshogi/container/checkmate_yomiage.rb +1 -1
  250. data/lib/bioshogi/dimension/base.rb +49 -10
  251. data/lib/bioshogi/dimension/column.rb +131 -0
  252. data/lib/bioshogi/dimension/module_methods.rb +19 -20
  253. data/lib/bioshogi/dimension/row.rb +128 -0
  254. data/lib/bioshogi/formatter/sugatayaki_validator.rb +1 -1
  255. data/lib/bioshogi/hand/drop.rb +1 -1
  256. data/lib/bioshogi/hand/move.rb +6 -6
  257. data/lib/bioshogi/input_adapter/ki2_adapter.rb +10 -10
  258. data/lib/bioshogi/input_adapter/shared_validation.rb +1 -1
  259. data/lib/bioshogi/location.rb +22 -2
  260. data/lib/bioshogi/official_formatter.rb +37 -37
  261. data/lib/bioshogi/order_info.rb +5 -3
  262. data/lib/bioshogi/piece/piece_vector.rb +16 -10
  263. data/lib/bioshogi/piece.rb +2 -2
  264. data/lib/bioshogi/place.rb +155 -62
  265. data/lib/bioshogi/player/soldier_methods.rb +2 -2
  266. data/lib/bioshogi/screen_image/core_methods.rb +2 -2
  267. data/lib/bioshogi/screen_image/pentagon.rb +2 -2
  268. data/lib/bioshogi/screen_image/soldier_methods.rb +1 -1
  269. data/lib/bioshogi/screen_image/stand.rb +5 -5
  270. data/lib/bioshogi/soldier/technique_matcher_methods.rb +51 -0
  271. data/lib/bioshogi/soldier.rb +14 -79
  272. data/lib/bioshogi/soldier_walker.rb +1 -1
  273. data/lib/bioshogi/turn_info.rb +2 -2
  274. data/lib/bioshogi/v/preset_vectors.rb +129 -0
  275. data/lib/bioshogi/v.rb +4 -2
  276. data/lib/bioshogi/version.rb +1 -1
  277. data/lib/bioshogi.rb +2 -0
  278. data//347/275/256/343/201/215/346/217/233/343/201/210/346/216/250/345/245/250.txt +1 -1
  279. metadata +14 -7
  280. data/lib/bioshogi/analysis/technique_matcher_info.rb +0 -810
  281. data/lib/bioshogi/dimension/place_x.rb +0 -27
  282. data/lib/bioshogi/dimension/place_y.rb +0 -57
@@ -0,0 +1,627 @@
1
+ # frozen-string-literal: true
2
+
3
+ # :OPTIONAL: は考慮する必要があるもの。
4
+
5
+ module Bioshogi
6
+ module Analysis
7
+ class TechniqueVerifyInfo
8
+ ROW_IS_2 = 1 # ▲から見て2段目のこと
9
+
10
+ include ApplicationMemoryRecord
11
+ memory_record [
12
+ {
13
+ key: "金底の歩",
14
+ description: "打ち歩が一番下の段でかつ、その上に自分の金がある",
15
+ func: proc {
16
+ #【条件1】「最下段」であること
17
+ verify_if { soldier.bottom_spaces.zero? }
18
+
19
+ #【条件2】上に自分の金があること
20
+ verify_if do
21
+ if v = soldier.relative_move_to(:up)
22
+ if s = board[v]
23
+ s.piece.key == :gold && own?(s)
24
+ end
25
+ end
26
+ end
27
+ },
28
+ },
29
+
30
+ {
31
+ key: "一間竜",
32
+ description: "上下左右の1つ離れたところのどこかに相手の玉がある",
33
+ func: proc {
34
+ verify_if do
35
+ V.ikkenryu_vectors.any? do |e|
36
+ if v = soldier.relative_move_to(e)
37
+ if s = board[v]
38
+ s.piece.key == :king && opponent?(s)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ },
44
+ },
45
+
46
+ {
47
+ key: "こびん攻め",
48
+ description: "玉または飛の斜めの歩を攻める",
49
+ func: proc {
50
+ #【条件1】2〜8筋であること (端の場合は「こびん」とは言わないため)
51
+ verify_if { soldier.column_is_second_to_eighth? }
52
+
53
+ #【条件2】相手が歩であること
54
+ verify_if do
55
+ if v = soldier.relative_move_to(:up)
56
+ if s = board[v]
57
+ s.piece.key == :pawn && s.normal? && opponent?(s)
58
+ end
59
+ end
60
+ end
61
+
62
+ #【条件3】桂馬の効きの位置に「玉」または「飛車」があること
63
+ verify_if do
64
+ V.keima_vectors.any? do |e|
65
+ if v = soldier.relative_move_to(e)
66
+ if s = board[v]
67
+ (s.piece.key == :king || (s.piece.key == :rook && s.normal?)) && opponent?(s)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ },
73
+ },
74
+
75
+ {
76
+ key: "位の確保",
77
+ description: "中盤戦になる前に5段目の歩を銀で支える",
78
+ func: proc {
79
+ #【条件1】前線(6段目)にいること
80
+ verify_if { soldier.kurai_sasae? }
81
+
82
+ #【条件2】3〜7列であること (両端2列は「位」とは言わないため)
83
+ verify_if { soldier.column_is_three_to_seven? }
84
+
85
+ #【条件3】前に歩があること
86
+ verify_if do
87
+ if v = soldier.relative_move_to(:up)
88
+ if s = board[v]
89
+ s.piece.key == :pawn && s.normal? && own?(s)
90
+ end
91
+ end
92
+ end
93
+
94
+ #【条件4】歩の上に何もないこと (歩の上に何か駒があった場合は無効) :OPTIONAL:
95
+ skip_if do
96
+ if v = soldier.relative_move_to(:up_up)
97
+ board[v]
98
+ end
99
+ end
100
+ },
101
+ },
102
+
103
+ {
104
+ key: "パンツを脱ぐ",
105
+ description: "開戦前かつ、跳んだ桂が下から3つ目かつ、(近い方の)端から3つ目かつ、移動元の隣(端に近い方)に自分の玉がある",
106
+ func: proc {
107
+ #【条件1】下から3段目であること
108
+ verify_if { soldier.bottom_spaces == 2 }
109
+
110
+ #【条件2】端から3つ目であること
111
+ verify_if { soldier.column_spaces_min == 2 }
112
+
113
+ #【条件3】動元は「端から2つ目」であること (▲41から飛んだ場合を除外する)
114
+ verify_if { origin_soldier.column_spaces_min == 1 }
115
+
116
+ #【条件4】移動元の端側に「玉」があること
117
+ verify_if do
118
+ if v = origin_soldier.relative_move_to(soldier.left_or_right_to_closer_side)
119
+ if s = board[v]
120
+ s.piece.key == :king && own?(s)
121
+ end
122
+ end
123
+ end
124
+ },
125
+ },
126
+
127
+ {
128
+ key: "腹銀",
129
+ description: "銀を打ったとき左右どちらかに相手の玉がある",
130
+ func: proc {
131
+ verify_if do
132
+ V.left_right_vectors.any? do |e|
133
+ if v = soldier.relative_move_to(e)
134
+ if s = board[v]
135
+ s.piece.key == :king && opponent?(s)
136
+ end
137
+ end
138
+ end
139
+ end
140
+ },
141
+ },
142
+
143
+ {
144
+ key: "尻銀",
145
+ description: "銀を打ったとき下に相手の玉がある",
146
+ func: proc {
147
+ verify_if do
148
+ if v = soldier.relative_move_to(:down)
149
+ if s = board[v]
150
+ s.piece.key == :king && opponent?(s)
151
+ end
152
+ end
153
+ end
154
+ },
155
+ },
156
+
157
+ {
158
+ key: "垂れ歩",
159
+ description: "打った歩の前が空で次に成れる余地がある場合",
160
+ func: proc {
161
+ #【条件1】2, 3, 4 段目であること
162
+ verify_if { soldier.tarefu_desuka? }
163
+
164
+ #【条件2】先が空であること
165
+ verify_if do
166
+ if v = soldier.relative_move_to(:up)
167
+ board.empty_cell?(v)
168
+ end
169
+ end
170
+ },
171
+ },
172
+
173
+ # 単に「18角打」をチェックした方がいい → やめ → 自力判定する
174
+ {
175
+ key: "遠見の角",
176
+ description: "打った角の位置が下から2番目かつ近い方の端から1番目(つまり自分の香の上の位置)",
177
+ func: proc {
178
+ #【条件1】中盤以降であること (そうしないと序盤の77角打まで該当してしまう) :OPTIONAL:
179
+ verify_if { executor.container.outbreak_turn }
180
+
181
+ #【条件2】自陣から打っていること
182
+ verify_if { soldier.own_side? }
183
+
184
+ #【条件3】端から打っていること
185
+ if false
186
+ verify_if { soldier.column_is_edge? }
187
+ end
188
+
189
+ #【条件4】相手の陣地に直通しているかつ長さが 5 以上であること
190
+ verify_if do
191
+ threshold = 5 # 成立するステップ数。4 だとマッチしすぎるため 5 にする
192
+ V.bishop_naname_mae_vectors.any? do |up_left| # 左上と右上を試す
193
+ matched = false
194
+ step = 0 # 斜めの効きの数 (駒に衝突したらそこも含める)
195
+ Dimension::Row.dimension_size.times do |i|
196
+ if v = soldier.relative_move_to(up_left, magnification: 1 + i)
197
+ step += 1 # 効きの数+1
198
+ if step >= threshold && v.opp_side?(location) # 相手の陣地に入れるか?
199
+ matched = true
200
+ break
201
+ end
202
+ board[v] and break # 相手の駒または自分の駒がある場合は終わる
203
+ else
204
+ break # 外に出た
205
+ end
206
+ end
207
+ matched
208
+ end
209
+ end
210
+ },
211
+ },
212
+
213
+ {
214
+ key: "割り打ちの銀",
215
+ description: "打った銀の後ろの左右両方に相手の飛か金がある",
216
+ func: proc {
217
+ verify_if do
218
+ V.wariuchi_vectors.all? do |e|
219
+ if v = soldier.relative_move_to(e)
220
+ if s = board[v]
221
+ if opponent?(s)
222
+ (s.piece.key == :rook && s.normal?) || s.piece.key == :gold
223
+ end
224
+ end
225
+ end
226
+ end
227
+ end
228
+ },
229
+ },
230
+
231
+ {
232
+ key: "たすきの銀",
233
+ description: "打った銀の斜め前に飛があり対極に金がある",
234
+ func: proc {
235
+ verify_if do
236
+ V.tasuki_vectors.any? do |up_left, down_right|
237
+ if v = soldier.relative_move_to(up_left)
238
+ if s = board[v]
239
+ if s.piece.key == :rook && s.normal? && opponent?(s) # 左上に飛車がある
240
+ if v = soldier.relative_move_to(down_right)
241
+ if s = board[v]
242
+ (s.piece.key == :gold || (s.piece.key == :silver && s.promoted)) && opponent?(s) # 右下に金または成銀がある
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end
250
+ },
251
+ },
252
+
253
+ {
254
+ key: "たすきの角",
255
+ description: "打った角の斜め前に飛があり対極に金がある",
256
+ func: proc {
257
+ instance_eval(&TechniqueVerifyInfo[:"たすきの銀"].func)
258
+ },
259
+ },
260
+
261
+ {
262
+ key: "桂頭の銀",
263
+ description: "打った銀の上に相手の桂がある",
264
+ func: proc {
265
+ #【条件1】上に相手の桂がある
266
+ verify_if do
267
+ if v = soldier.relative_move_to(:up)
268
+ if s = board[v]
269
+ s.piece.key == :knight && s.normal? && opponent?(s)
270
+ end
271
+ end
272
+ end
273
+
274
+ #【条件2】「22銀」や「82銀」ではないこと :OPTIONAL:
275
+ # - 端玉に対しての腹銀が「桂頭の銀」扱いになる場合が多いため除外している
276
+ # - ただ本当に21や81の桂に対して「桂頭の銀」をかましている場合もなくはない
277
+ skip_if do
278
+ soldier.column_is_second_or_eighth? && soldier.top_spaces == 1
279
+ end
280
+ },
281
+ },
282
+
283
+ {
284
+ key: "歩頭の桂",
285
+ description: "打った桂の上に相手の歩がある",
286
+ func: proc {
287
+ verify_if do
288
+ if v = soldier.relative_move_to(:up)
289
+ if s = board[v]
290
+ s.piece.key == :pawn && s.normal? && opponent?(s)
291
+ end
292
+ end
293
+ end
294
+ },
295
+ },
296
+
297
+ {
298
+ key: "銀ばさみ",
299
+ description: "動かした歩の左右どちらかに相手の銀があり、その向こうに自分の歩がある。また歩の前に何もないこと。",
300
+ func: proc {
301
+ #【条件1】「同歩」でないこと
302
+ verify_if { !executor.move_hand.captured_soldier }
303
+
304
+ #【条件2】進めた歩の前が空であること
305
+ verify_if do
306
+ if v = soldier.relative_move_to(:up)
307
+ board.empty_cell?(v)
308
+ end
309
+ end
310
+
311
+ # 左右どちらかが成立していること
312
+ verify_if do
313
+ V.ginbasami_verctors.any? do |right, right_right, right_right_up|
314
+ #【条件3】右に相手の銀ある
315
+ yield_self {
316
+ if v = soldier.relative_move_to(right)
317
+ if s = board[v]
318
+ s.piece.key == :silver && s.normal? && opponent?(s)
319
+ end
320
+ end
321
+ } or next
322
+
323
+ #【条件4】右右に自分の歩がある
324
+ yield_self {
325
+ if v = soldier.relative_move_to(right_right)
326
+ if s = board[v]
327
+ s.piece.key == :pawn && s.normal? && own?(s)
328
+ end
329
+ end
330
+ } or next
331
+
332
+ #【条件5】右右上が空である
333
+ if v = soldier.relative_move_to(right_right_up)
334
+ board.empty_cell?(v)
335
+ end
336
+ end
337
+ end
338
+ },
339
+ },
340
+
341
+ {
342
+ key: "端玉には端歩",
343
+ description: nil,
344
+ func: proc {
345
+ #【条件1】端であること
346
+ verify_if { soldier.column_is_edge? }
347
+
348
+ #【条件2】上が相手の歩であること (▲16歩△14歩の状態で▲15歩としたということ)
349
+ verify_if do
350
+ if v = soldier.relative_move_to(:up)
351
+ if s = board[v]
352
+ s.piece.key == :pawn && s.normal? && opponent?(s)
353
+ end
354
+ end
355
+ end
356
+
357
+ #【条件3】奥に相手の玉がいること (13→12→11と探す)
358
+ verify_if do
359
+ # この 2 は 15 - 2 = 13 の 2 で、15を基点にしているとすれば14に歩があり13から調べるため
360
+ # Dimension::Row.dimension_size は書かなくてもいい
361
+ (2..).any? do |y|
362
+ if v = soldier.relative_move_to(:up, magnification: y)
363
+ if s = board[v]
364
+ if s.piece.key == :king && opponent?(s)
365
+ true
366
+ else
367
+ break # 駒があるが玉でない場合は切り上げる
368
+ end
369
+ end
370
+ else
371
+ break # 一番上まで調べたが玉はいなかった
372
+ end
373
+ end
374
+ end
375
+
376
+ #【条件4】下に「自分の香飛龍」 (17→18→19と探す)
377
+ verify_if do
378
+ # この 2 は突いた歩の 2 つ下から香を調べるため
379
+ (2..).any? do |y|
380
+ if v = soldier.relative_move_to(:down, magnification: y)
381
+ if s = board[v]
382
+ if s.boar_mode? && own?(s) # 「自分の香飛龍」か?
383
+ true
384
+ else
385
+ break # 駒があるが「自分の香飛龍」ではなかったため切り上げる
386
+ end
387
+ end
388
+ else
389
+ break # 一番下まで調べたが「自分の香飛龍」はいなかった
390
+ end
391
+ end
392
+ end
393
+ },
394
+ },
395
+
396
+ {
397
+ key: "田楽刺し",
398
+ description: "角の頭に打ってその奥に玉などの大駒がある",
399
+ func: proc {
400
+ verify_if do
401
+ mode = :walk_to_bishop
402
+ (1..).each do |y|
403
+ if v = soldier.relative_move_to(:up, magnification: y)
404
+ if s = board[v]
405
+ if opponent?(s)
406
+ case mode
407
+ when :walk_to_bishop # 角を探す
408
+ if s.piece.key == :bishop && s.normal?
409
+ mode = :walk_to_dengaku_target
410
+ end
411
+ when :walk_to_dengaku_target # 大駒を探す
412
+ if s.piece.dengaku_target
413
+ mode = :dengaku_matched
414
+ break
415
+ end
416
+ else
417
+ raise "must not happen"
418
+ end
419
+ else
420
+ break # 自分の駒が間にある場合は田楽指しではない
421
+ end
422
+ else
423
+ # 駒がない場合はさらに奥に進む
424
+ end
425
+ else
426
+ break # 盤の外に出た場合は終わる
427
+ end
428
+ end
429
+ mode == :dengaku_matched
430
+ end
431
+ },
432
+ },
433
+
434
+ {
435
+ key: "ふんどしの桂",
436
+ description: "打った桂の2つ前の左右に自分より価値の高い相手の駒がある",
437
+ func: proc {
438
+ verify_if do
439
+ V.keima_vectors.all? do |e|
440
+ if v = soldier.relative_move_to(e)
441
+ if s = board[v]
442
+ if opponent?(s)
443
+ s.abs_weight > soldier.abs_weight
444
+ end
445
+ end
446
+ end
447
+ end
448
+ end
449
+ },
450
+ },
451
+
452
+ {
453
+ key: "土下座の歩",
454
+ description: nil,
455
+ func: proc {
456
+ #【条件1】8,9段目であること
457
+ verify_if { soldier.bottom_spaces < 2 }
458
+
459
+ #【条件2】一つ上が空であること
460
+ verify_if do
461
+ if v = soldier.relative_move_to(:up)
462
+ board.empty_cell?(v)
463
+ end
464
+ end
465
+
466
+ #【条件3】二つ上に相手の前に進める駒があること (成銀や馬があっても土下座の対象とする)
467
+ verify_if do
468
+ if v = soldier.relative_move_to(:up_up)
469
+ if s = board[v]
470
+ if opponent?(s)
471
+ s.piece.maesusumeru || s.promoted
472
+ end
473
+ end
474
+ end
475
+ end
476
+ },
477
+ },
478
+
479
+ {
480
+ key: "たたきの歩",
481
+ description: "取ると取り返せるような場合もたたきの歩として判別されるのであまり正しくない",
482
+ func: proc {
483
+ #【条件1】打った位置が1から4段目である
484
+ verify_if { soldier.top_spaces.between?(1, Dimension::Row.promotable_depth) }
485
+
486
+ #【条件2】相手が「成駒」または「飛金銀香玉」である
487
+ verify_if do
488
+ if v = soldier.relative_move_to(:up)
489
+ if s = board[v]
490
+ if opponent?(s)
491
+ s.promoted || s.piece.tatakare_target
492
+ end
493
+ end
494
+ end
495
+ end
496
+
497
+ #【条件3】打った歩に結びついている利きがないこと
498
+ # とするのが本当は正しいのだけど大変なので
499
+ # 「打った位置の後ろに自分の(前に進めることのできる)駒がないこと」だけを判定している
500
+ skip_if do
501
+ if v = soldier.relative_move_to(:down)
502
+ if s = board[v]
503
+ if own?(s)
504
+ s.promoted || s.piece.maesusumeru
505
+ end
506
+ end
507
+ end
508
+ end
509
+
510
+ #【条件4】連打の歩ではないこと :OPTIONAL:
511
+ skip_if do
512
+ if hand_log = executor.container.hand_logs[-2] # 前回の自分の手
513
+ if drop_hand = hand_log.drop_hand # 打った手
514
+ if s = drop_hand.soldier # 駒
515
+ Assertion.assert { own?(s) }
516
+ s.piece.key == :pawn && s.place == soldier.relative_move_to(:up)
517
+ end
518
+ end
519
+ end
520
+ end
521
+ },
522
+ },
523
+
524
+ {
525
+ key: "継ぎ歩",
526
+ description: "条件が成立しない方を先に判定した方が早めに打ち切れるので2手目1手目の順で見る",
527
+ func: proc {
528
+ # 0手前: ▲25歩打 継ぎ歩 したらここに来る
529
+
530
+ # 2手前: ▲24歩(25) 突き
531
+ verify_if do
532
+ if hand_log = executor.container.hand_logs[-2]
533
+ if s = hand_log.move_hand&.soldier # 最初を突き捨てとするため hand ではなく move_hand にしている
534
+ if s.piece.key == :pawn && s.normal? && own?(s)
535
+ s.place == soldier.relative_move_to(:up)
536
+ end
537
+ end
538
+ end
539
+ end
540
+
541
+ # 1手前: △24同歩 取らされる
542
+ verify_if do
543
+ if hand_log = executor.container.hand_logs[-1]
544
+ if s = hand_log.move_hand&.soldier
545
+ if s.piece.key == :pawn && s.normal? && opponent?(s)
546
+ s.place == soldier.relative_move_to(:up)
547
+ end
548
+ end
549
+ end
550
+ end
551
+ },
552
+ },
553
+
554
+ {
555
+ key: "連打の歩",
556
+ description: "",
557
+ func: proc {
558
+ # 0手前: ▲25歩打 継ぎ歩 したらここに来る
559
+
560
+ # 2手前: ▲24歩打
561
+ verify_if do
562
+ if hand_log = executor.container.hand_logs[-2]
563
+ if s = hand_log.drop_hand&.soldier
564
+ if s.piece.key == :pawn && own?(s)
565
+ s.place == soldier.relative_move_to(:up)
566
+ end
567
+ end
568
+ end
569
+ end
570
+
571
+ # 1手前: △24同何か 取らされる
572
+ verify_if do
573
+ if hand_log = executor.container.hand_logs[-1]
574
+ if s = hand_log.move_hand&.soldier
575
+ if opponent?(s)
576
+ s.place == soldier.relative_move_to(:up)
577
+ end
578
+ end
579
+ end
580
+ end
581
+ },
582
+ },
583
+
584
+ {
585
+ key: "継ぎ桂",
586
+ description: "継ぐのは前なので打った桂の2つ後ろの左右のどちらかに自分の桂がある",
587
+ func: proc {
588
+ verify_if do
589
+ V.tsugikei_vectors.any? do |e|
590
+ if v = soldier.relative_move_to(e)
591
+ if s = board[v]
592
+ s.piece.key == :knight && s.normal? && own?(s)
593
+ end
594
+ end
595
+ end
596
+ end
597
+ },
598
+ },
599
+
600
+ {
601
+ key: "入玉",
602
+ description: "玉が4段目から3段目に移動した",
603
+ func: proc {
604
+ verify_if { soldier.just_nyuugyoku? }
605
+ verify_if { origin_soldier.atoippo_nyuugyoku? }
606
+ },
607
+ },
608
+
609
+ {
610
+ key: "角不成",
611
+ description: "相手陣地に入るときと出るときの両方チェックする",
612
+ func: proc {
613
+ verify_if { origin_soldier.tsugini_nareru_on?(place) }
614
+ },
615
+ },
616
+
617
+ {
618
+ key: "飛車不成",
619
+ description: "角不成と同じ方法でよい",
620
+ func: proc {
621
+ verify_if { origin_soldier.tsugini_nareru_on?(place) }
622
+ },
623
+ },
624
+ ]
625
+ end
626
+ end
627
+ end
@@ -11,8 +11,8 @@
11
11
  手合割:平手
12
12
  先手の戦法:力戦
13
13
  後手の戦法:力戦
14
- 先手の手筋:土下座の歩, 連打の歩
15
- 後手の手筋:連打の歩
14
+ 先手の手筋:土下座の歩, たたきの歩, 連打の歩
15
+ 後手の手筋:たたきの歩, 連打の歩
16
16
  先手の備考:居飛車, 名人に定跡なし, 相居飛車, 対居飛車, 持久戦, 短手数
17
17
  後手の備考:居飛車, 相居飛車, 対居飛車, 持久戦, 短手数
18
18
  先手の棋風:王道
@@ -71,12 +71,14 @@
71
71
  48 3三金(22) (00:03/00:01:13)
72
72
  49 6六馬(44) (00:01/00:01:11)
73
73
  50 8七歩打 (00:14/00:01:27)
74
+ *△手筋:たたきの歩
74
75
  51 8七銀(88) (00:04/00:01:15)
75
76
  52 8六歩打 (00:02/00:01:29)
76
77
  *△手筋:連打の歩
77
78
  53 9八銀(87) (00:00/00:01:15)
78
79
  54 8七角打 (00:02/00:01:31)
79
80
  55 8三歩打 (00:03/00:01:18)
81
+ *▲手筋:たたきの歩
80
82
  56 8三飛(82) (00:02/00:01:33)
81
83
  57 8四歩打 (00:02/00:01:20)
82
84
  *▲手筋:連打の歩
@@ -11,6 +11,8 @@
11
11
  手合割:平手
12
12
  先手の戦法:力戦
13
13
  後手の戦法:力戦
14
+ 先手の手筋:遠見の角
15
+ 後手の手筋:遠見の角
14
16
  先手の備考:居飛車, 大駒全ブッチ, 名人に定跡なし, 相居飛車, 対居飛車, 背水の陣, 急戦, 短手数
15
17
  後手の備考:居飛車, 大駒コンプリート, 相居飛車, 対居飛車, 急戦, 短手数
16
18
  先手の棋風:王道
@@ -43,9 +45,11 @@
43
45
  23 2二角成(77) (00:06/00:00:38)
44
46
  24 2二金(32) (00:02/00:00:42)
45
47
  25 7七角打 (00:02/00:00:40)
48
+ *▲手筋:遠見の角
46
49
  26 8九飛成(86) (00:19/00:01:01)
47
50
  27 2二角成(77) (00:01/00:00:41)
48
51
  28 3三角打 (00:06/00:01:07)
52
+ *△手筋:遠見の角
49
53
  29 3三馬(22) (00:50/00:01:31)
50
54
  30 3三桂(21) (00:01/00:01:08)
51
55
  31 2二角打 (00:01/00:01:32)
@@ -13,12 +13,12 @@
13
13
  後手の戦法:対振り持久戦
14
14
  先手の囲い:振り飛車穴熊
15
15
  後手の囲い:居飛車銀冠
16
- 先手の手筋:垂れ歩
16
+ 先手の手筋:たたきの歩, 垂れ歩
17
17
  後手の手筋:土下座の歩, 桂頭の銀
18
18
  先手の備考:振り飛車, 穴熊, 大駒全ブッチ, 対居飛車, 対抗形, 持久戦, 短手数
19
19
  後手の備考:居飛車, 対振り飛車, 対穴熊, 大駒コンプリート, 対抗形, 穴熊の姿焼き, 持久戦, 短手数
20
20
  先手の棋風:王道
21
- 後手の棋風:変態
21
+ 後手の棋風:王道
22
22
  手数----指手---------消費時間--
23
23
  1 7六歩(77) (00:03/00:00:03)
24
24
  2 3四歩(33) (00:00/00:00:00)
@@ -89,6 +89,7 @@
89
89
  59 4五銀(56) (00:00/00:01:01)
90
90
  60 4四銀(55) (00:03/00:01:08)
91
91
  61 5三歩打 (00:08/00:01:09)
92
+ *▲手筋:たたきの歩
92
93
  62 7二飛(52) (00:03/00:01:11)
93
94
  63 4四銀(45) (00:02/00:01:11)
94
95
  64 4四馬(99) (00:02/00:01:13)