« 新・関数で出来ますか~? 第8回 王手飛車! | メイン | 新・関数で出来ますか~? 第9回 王手!(オリジナル) »

2017年8 月12日 (土曜日)

コメント

くまぷー

お待たせしました。

maron

【第6回:飛車】
◆よい子:100=REPT("王手!",OR(ISEVEN(SMALL(MMULT(COUNTIF(I9:Q17,"<>"&I9:Q17),COUNTIF(I9:Q17,"<>"&I9:Q17)),{1,2}))))
◆ズルっこ:71{=IF(AND(MOD(AB18-AB19:AB20,9),INT(AB18/9)-INT(AB19:AB20/9)),"","王手!")}

【第7回:角】
◆よい子:123{=REPT("王手!",OR(COUNTIF(OFFSET(H8,MAX((I9:Q17="王")*ROW(1:9))+(MAX((I:Q="王")*COLUMN(A:I))-ROW(1:9))*{1,-1},ROW(1:9)),"角")))}
◆ズルっこ:92{=REPT("王手!",OR(COUNTIF(OFFSET(H1,AB18/9-2+(MOD(AB18,9)+1-ROW(1:9))*{1,-1},ROW(1:9)),"角")))}

y sakuda

データ部分は分かってたけど一切つかいませんでした。
飛車103です。
=REPT("王手!",MAX(MMULT((I9:Q17="王")+(I9:Q17>Z6)%,A1:A9+1),MMULT(A1:I1+1,(I9:Q17="王")+(I9:Q17>Z6)%))>1)

もっともこれはちょいズルで101になりますが100が切れないのじゃ面白くないですね。
=REPT("王手!",MAX(MMULT((I9:Q17="王")+(I9:Q17>Z6)%,A1:A9+1),MMULT(A1:I1+1,(I9:Q17="王")+(I9:Q17>Z6)%))>1)

角ですが117です。
=REPT("王手!",OR(MOD(MMULT(LARGE(IF(I9:Q17="王",181,I9:Q17>"")*ROW(1:9)*19+COLUMN(A:I),{1,2;1,3}),{1;-1}),{18,20})=0))

y sakuda

飛車のCountifは全く考えなかったですね。
角筋のは私変なことやってますが、ちょいとコメントしておきます。

本来 Row*9+Column で良いわけですが、これだと、各筋が番外にはみ出したところと、盤面の反対側の数行下が同じ番号になってしまうのはご承知のとおりです。
で、そうならないためには行の差を19以上にすればそうならないので、行に19かけてます。
その場合、Modは 18、20で取ることになります。
また、王をLargeの1で判別する必要があるので、181を加えてます。
181の意味は18と20の最小公倍数+1で180に何が掛っても18、20の剰余は0になります。

y sakuda

maronさんのどうもよく理解できない^^;
特に角の方はリソース不足って言われて動かないから余計わかんないw
頭悪いの歴然とさらしてる・・・・・

maron

>角の方はリソース不足
◆列を、(I:Q="王")*COLUMN(A:I)しているせいでしょうか
角126:{=REPT("王手!",OR(COUNTIF(OFFSET(H8,MAX((I9:Q17="王")*ROW(1:9))+(MAX((I9:Q17="王")*COLUMN(A:I))-ROW(1:9))*{1,-1},ROW(1:9)),"角")))}

◆なお、行も全体参照にすると、循環参照になりました
121:{=REPT("王手!",OR(COUNTIF(OFFSET(H8,MAX((9:17="王")*ROW(1:9))+(MAX((I:Q="王")*COLUMN(A:I))-ROW(1:9))*{1,-1},ROW(1:9)),"角")))}

jyo3

飛飛王

の配置に関心がありました、、けど、、、

くまぷー

>角筋のは私変なことやってますが、ちょいとコメントしておきます。

多少でも解説があるのは有難いです。
それでも私には難しいのですが・・・(^^ゞ

>>角の方はリソース不足

私の方では動いています。
これも難しい・・・

maron

>これも難しい・・・
◆王の行方向の位置により、H8から下に、MAX((I9:Q17="王")*ROW(1:9))
◆王の列方向の位置により、それに(MAX((I9:Q17="王")*COLUMN(A:I))-ROW(1:9))*{1,-1}分上下に
◆ROW(1:9)で、列方向にセル指定して、これで王を含む、/\のセルを指定して、
◆COUNTIF(・・・・・,"角")としています

くまぷー

maronさん、さっそくの解説有り難うございます。

なんとなくわかったようなりました (^^ゞ
式を書きっぱなしだと
なんだか、わからない人の方が圧倒的多数だとおみます。

将棋でも高段者の戦いは「解説」無しでは
私のような者には楽しめません。

繰り返し有り難うございます m(__)m

y sakuda

maronさん解説ありがとうございます。
角の方は分かった^^
OffsetのColumnのところにRow(1:9)ってのは考えて見ればどうってことない話なんですが、目からうろこ^^
Offsetで取り出した配列に何か関数で操作しようとするとエラーになっちゃうんでこういう場合はほとんど考慮の対象外にしちゃってるんで、こういうの思いつかないですねーー

分かったと言っても応用して見ろと言われるとダメみたいな気がしますけどねーー

y sakuda

くまぷーさん、まだ、不明点ありますかーー

y sakuda

maronさんの飛車何となく分かった。
ただ、初め
COUNTIF(I9:Q17,"<>"&I9:Q17)
で空の所が81になっちゃうってのが不思議でした。いかにCountif使ったことないかってことですよねーー
ただ、Small1,2で本当にアタリの所がヒットするのか、それにヒットするとこだけEvenになるのか今一つ整理しきれてません。
これも使って良いよーーって言われても応用不能w

jyo3

飛車  96
=IF(LEN(CONCAT(OFFSET(I8:Q8,INT((AB18-81)/9),))&CONCAT(OFFSET(I9:I17,,MOD(AB18,9))))>2,"王手!","")

2016で、、、、出来た関数使用。なので、、、違反ですが、、、

別手法は、、、また、、別の時に、、、

皆さんの関数・・・すごいです。

y sakuda

2016使ってないので、Concatってのは知りませんでしたけど、以前からここなんかの解くにはまとめてConcatinationする手がないのが癪の種でした^^
できたんですねーーそんなの。

でも・・・・こういうとこ以外で使い道あんまりなさそうですねーーw

maron

◆EXCEL2013なので、CONCATは使ったことはありませんが、
◆文字列をつなぐには、便利な関数の様に思います

jyo3

>できたんですねーーそんなの。
>◆文字列をつなぐには、便利な関数の様に思います
次の問題以降では、、、もちろん、、、
CONCATは
使いません。、、、けど、、、

y sakuda

王手飛車の方新アイデアでないので、飛角龍馬の問題を推定して考えてます。
所が・・・・
多分王を加えて駒は5個、この場合合駒の有無を確認したアタリの判別が難しい。
飛について行方向の王手の確認やって見たところ、それだけで300超。
龍も考えるとその4倍。
角と馬だって斜め方向のアタリの確認王手飛車程簡単じゃないはずだから・・・・
そう考えると2000じゃすまないですねーー
式の最大長8192だそうですから、長さ的には許容範囲ですが、ちゃんと動かせるかなーー。

逆に最初全く思いつかなかった、馬の縦横のアタリとか龍の斜めのアタリはそれぞれ100ちょっとで何とかなりそうなんですけどねーー。

jyo3

>そう考えると2000じゃすまないですね
そういって頂けると、、、500台も、、、短く感じます。
思考に、、、抜け、、があったら大変だから・・・

500回ぐらい、、、目視で、、確認します。、、、そのうち、、

くまぷー

ただ今、体育館より無事、生還しました~
ボロボロです~
これからシャワーを浴びて休憩です。
死んでしまうかも・・・(´;ω;`)ウッ…

y sakuda

お疲れ様でーーす。
死ぬ前にジョー3のオリジナル出題してくれますかーーw

くまぷー

>死ぬ前にジョー3のオリジナル出題してくれますかーーw

了解! 公開しました。

コメントの確認

コメントのプレビュー

プレビュー中です。コメントはまだ投稿されていません。

処理中...
コメントを投稿できませんでした。エラー:
コメントを投稿しました。 さらにコメントを投稿する

入力された文字と数字は画像と一致していません。再度入力してください。

最後に、下の画像の中に見える文字と数字を入力してください。これはプログラムを使ってコメントを自動的に投稿するのを防ぐために行われています。

画像を読み取れない場合は 別の画像を表示してください。

処理中...

コメントを投稿

アカウント情報

(名前は必須です。メールアドレスは公開されません。)

2024年8 月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

TOP メニュー