★第8回 「王手飛車」解答例
=IF(OR(AND((INT(AB19/9)-INT(AB20/9))^2=(MOD(AB19,9)-MOD(AB20,9))^2,(INT(AB19/9)-INT(AB20/9))*(INT(AB18/9)-INT(AB20/9))+(MOD(AB19,9)-MOD(AB20,9))*(MOD(AB18,9)-MOD(AB20,9))=0),AND((INT(AB20/9)-INT(AB19/9))^2=(MOD(AB20,9)-MOD(AB19,9))^2,(INT(AB18/9)-INT(AB20/9))*(MOD(AB19,9)-MOD(AB20,9))=(INT(AB19/9)-INT(AB20/9))*(MOD(AB18,9)-MOD(AB20,9)),MOD(AB20,9)<MAX(MOD(AB18,9),MOD(AB19,9)),MOD(AB20,9)>MIN(MOD(AB18,9),MOD(AB19,9)),INT(AB20/9)<MAX(INT(AB18/9),INT(AB19/9)),INT(AB20/9)>MIN(INT(AB18/9),INT(AB19/9)))),"王手飛車!","") 515
盤面の駒はAA18:AD98の表、特にAB列の数値により表示されます。
そこでAB列の数値を参照して数式を作ります。例えばAB18の
数値を見れば、王の表示位置がわかります。
王の表示列:=MOD(AB18,9)+1 (盤面左からの列数)
王の表示行:=INT(AB18/9)-1 (ワークシートの行数)
飛車・角の位置も同様です。
飛車の表示列:=MOD(AB19,9)+1 (盤面左からの列数)
飛車の表示行:=INT(AB19/9)-1 (ワークシートの行数)
角の表示列:=MOD(AB20,9)+1 (盤面左からの列数)
角の表示行:=INT(AB20/9)-1 (ワークシートの行数)
王手飛車になるケースを2つに分けて考えます。
(1) 王、飛、角が一直線に並ぶ場合。この場合は角が王と飛に挟まれる場合のみ「王手飛車」です。ただし一直線に並んでも、角の利き筋に王・飛が位置していなければなりません。
1. 王、飛、角が一直線に並ぶ条件(共通の1点、 傾きが同じ)
(INT(AB18/9)-INT(AB20/9))*(MOD(AB19,9)-MOD(AB20,9))=(INT(AB19/9)-INT(AB20/9))*(MOD(AB18,9)-MOD(AB20,9))
2. 角が王と飛に挟まれる条件(下の4式が同時に成立)
角の行位置 < Max(王の行位置 , 飛の行位置)
角の列位置 < Max(王の列位置 , 飛の列位置)
角の行位置 > Min(王の行位置 , 飛の行位置)
角の列位置 > Min(王の列位置 , 飛の列位置)
3. 角の利き筋に王・飛が位置する条件
(INT(AB20/9)-INT(AB19/9))^2=(MOD(AB20,9)-MOD(AB19,9))^2
よって・・・
=AND((INT(AB20/9)-INT(AB19/9))^2=(MOD(AB20,9)-MOD(AB19,9))^2,(INT(AB18/9)-INT(AB20/9))*(MOD(AB19,9)-MOD(AB20,9))=(INT(AB19/9)-INT(AB20/9))*(MOD(AB18,9)-MOD(AB20,9)),MOD(AB20,9)<MAX(MOD(AB18,9),MOD(AB19,9)),MOD(AB20,9)>MIN(MOD(AB18,9),MOD(AB19,9)),INT(AB20/9)<MAX(INT(AB18/9),INT(AB19/9)),INT(AB20/9)>MIN(INT(AB18/9),INT(AB19/9)))
(2) 角・王・飛が一直線に並ばない場合。
1. 角→王 、角→飛のなす角が直角
(INT(AB18/9)-INT(AB20/9))*(MOD(AB19,9)-MOD(AB20,9))=(INT(AB19/9)-INT(AB20/9))*(MOD(AB18,9)-MOD(AB20,9))
2. 角の利き筋に王・飛が位置する条件
(INT(AB20/9)-INT(AB19/9))^2=(MOD(AB20,9)-MOD(AB19,9))^2
よって「王手飛車!」は(1) または(2)が成立すればよいので、答えは最初に示した解答例のようになる。 (くまぷー)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★第9回 「王手オリジナル」解答例
自分を含めて、回答まで行かなかったら、どうしましょ、、
(忙しくて、時間が取れない)
と、少し思いましたが、、
皆さんから、時間をいただきまして、有難うございました。
さて、
出題者回答ですが、、、
飛竜部分は
1行目
2行目
3行目
・・・
9行目
と切り取って、、、&でくっつけて
飛王、王飛、竜王、王竜・・・を探して・・・あるかで、決まり
角馬部分は
1行目
〇2行目
〇〇3行目
・・・・・・
9行目
とずらしてから・・・探しに行くという・・・
簡単な作戦、、、
だが、これを短縮となると、、、、
つかれますーーー・・・技術がない私は、、、、
で、、、
557?
{=IF(COUNT(FIND({"王飛";"飛王";"王竜";"竜王"},I9:Q9&I10:Q10&I11:Q11&I12:Q12&I13:Q13&I14:Q14&I15:Q15&I16:Q16&I17:Q17))
+COUNT(FIND({"王飛","飛王","王竜","竜王"},I9:I17&J9:J17&K9:K17&L9:L17&M9:M17&N9:N17&O9:O17&P9:P17&Q9:Q17))
+COUNT(FIND({"角王";"王角";"馬王";"王馬"},A9:Q9&B10:R10&C11:S11&D12:T12&E13:U13&F14:V14&G15:W15&H16:X16&I17:Y17))
+COUNT(FIND({"角王";"王角";"馬王";"王馬"},I9:Y9&H10:X10&G11:W11&F12:V12&E13:U13&D14:T14&C15:S15&B16:R16&A17:Q17))
+SUM(((I9:Q17="王")*((J8:R16="竜")+(H10:P18="竜")+(H8:P16="竜")+(J10:R18="竜")+(I8:Q16="馬")+(I10:Q18="馬")+(H9:P17="馬")+(J9:R17="馬")))),"王手!","")}
ちょっとだけ角をまとめて、
524
{=IF(COUNT(FIND({"王飛";"飛王";"王竜";"竜王"},I9:Q9&I10:Q10&I11:Q11&I12:Q12&I13:Q13&I14:Q14&I15:Q15&I16:Q16&I17:Q17))
+COUNT(FIND({"王飛","飛王","王竜","竜王"},I9:I17&J9:J17&K9:K17&L9:L17&M9:M17&N9:N17&O9:O17&P9:P17&Q9:Q17))
+COUNT(FIND({"角王";"王角";"馬王";"王馬"},A9:Q9&B10:R10&C11:S11&D12:T12&E13:U13&F14:V14&G15:W15&H16:X16&I17:Y17
&9&
I9:Y9&H10:X10&G11:W11&F12:V12&E13:U13&D14:T14&C15:S15&B16:R16&A17:Q17))
+SUM(((I9:Q17="王")*((J8:R16="竜")+(H10:P18="竜")+(H8:P16="竜")+(J10:R18="竜")+(I8:Q16="馬")+(I10:Q18="馬")+(H9:P17="馬")+(J9:R17="馬")))),"王手!","")}
+技術でうまくまとめれば、
400台、300台と、思ったが・・・・・わたしには、、、・・・根気と、技術がない・・・・ (ジョー3さん)
最近のコメント