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

2017年8 月19日 (土曜日)

コメント

jyo3

横のケーキを切って、、、

縦に、、、積んで、、、イチゴの、、あるところを

探した、、、感じ、、、

で、、、わかりやすいとは、、、思います。
・・・ていうか、、、

難しいことできない、、、ジョーだから、、、

maron

【第9回】
160:{=REPT("王手飛車!",COUNT(FIND({13;23;31;32},SUBSTITUTE(MMULT(1^COLUMN(A:I),SUMIF(AB18:AB20,AB20+(MOD(AB20,9)+ROW(1:9)-9)*{8,-10},AA18:AA20)*10^ROW(1:9)),0,)*1))=2)}

【第10回】
386:{=REPT("王手!",OR(COUNTIF(OFFSET(H7:J9,AB18/9-9,MOD(AB18,9)),{"竜","馬"}),COUNT(FIND({13;16;31;61},SUBSTITUTE(MMULT(1^COLUMN(A:I),INT(SUMIF(AB18:AB22,AB18+(MOD(AB18,9)+ROW(1:9)-9)*{8,-10},AA20:AA24)/2)*10^ROW(1:9)),0,))),COUNT(FIND({12;14;21;41},SUBSTITUTE(MMULT(1^COLUMN(A:I),INT(SUMIF(AB18:AB22,AB18*{1,0}+90*{0,1}+MOD(AB18,9)*{-1,1}+(ROW(1:9)-1)*{1,9},AA20:AA24)/2)*10^ROW(1:9)),0,)))))}

jyo3

で、、、

なんとなく、、、
min さんにばればれ、、、&、、、きっちり、、、
min さんは、、、整理の予感、、、

sakuda さんのと、、、
maron さんのは、、、

私では、理解不能の、、、予感、、

くまぷーさんの、、、だって、、、もう、、、

nonndakara,wakannnai

maron

◆回を間違いました
◆【第8回】と【第9回】でした

jyo3

今、maron さんのを、みた・・・
うひゃーー、、
suujiga,数字が、すうじが、、、
こんなに解析して、、、くださって、、、感謝ですーーー、、、

すげーーーー

min

出先から
王手飛車
193
{=REPT("王手飛車!",COUNT(FIND({"飛角王","飛角","角飛","王角飛","王角","角王"},I1:I17&J2:J18&K3:K19&L4:L20&M5:M21&N6:N22&O7:O23&P8:P24&Q9:Q25&0&I9:I25&J8:J24&K7:K23&L6:L22&M5:M21&N4:N20&O3:O19&P2:P18&Q1:Q17))>1)}
これはもう少し減らせます。
実際にやってませんが。

jyo3

もしかして、、、
maron さんって、、、

若くて、、
体力あって、、
・・・私にない2つ、、、
もってそうーーー

jyo3

あ、、、
min さんの
王手飛車、、、

わたしと、、、

かなり、にてて、、、少し、、、違う、、、

でも、考えは、、、おなじ、、ね、、、

予感、アタリ、、、

min

出先から
坂本竜馬でやってみましした。
442
{=IF(COUNT(1/(FIND(OFFSET(G7:I9,SUM((I9:Q17="王")*ROW(1:9)),SUM((I9:Q17="王")*COLUMN(A:I))),"坂本竜馬")-1),FIND({"王角","王馬","角王","馬王"},I1:I17&J2:J18&K3:K19&L4:L20&M5:M21&N6:N22&O7:O23&P8:P24&Q9:Q25&0&I9:I25&J8:J24&K7:K23&L6:L22&M5:M21&N4:N20&O3:O19&P2:P18&Q1:Q17),FIND({"王飛","王竜","飛王","竜王"},I9:I17&J9:J17&K9:K17&L9:L17&M9:M17&N9:N17&O9:O17&P9:P17&Q9:Q17&0&TRANSPOSE(I9:Q9&I10:Q10&I11:Q11&I12:Q12&I13:Q13&I14:Q14&I15:Q15&I16:Q16&I17:Q17))),"王手!","")}
これもcountを使っているので40位は減らせると思います。
今は実際にやれませんが。

jyo3

minさんの
442も、、すごいなーーー、、、
いっぱい工夫、、、

わたしのは、、、素材、、に、、過ぎない、、、

jyo3

王手飛車問題ですが、、
196 のは、、
{=IF(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))>1,"王手飛車!","")}

y sakuda

まだ、皆さんの研究してませんが、両方共全くダメでした。
王手飛車288

{=REPT("王手飛車!",(COUNT(0/MOD(MMULT(LARGE(IF(I9:Q17="角",181,I9:Q17>"")*ROW(1:9)*19+COLUMN(A:I),{1,2;1,3}),{1;-1}),{18,20}))=2)-AND(OR(MMULT({1,1},MOD(MMULT(LARGE((I9:Q17>"")*ROW(1:9)*19+COLUMN(A:I),{1,2;1,3}),{1;-1}),{18,20}))=0),MAX((I9:Q17="角")*ROW(1:9))<>LARGE((I9:Q17>"")*ROW(1:9),2)))}

飛角竜馬 976
{=REPT("王手!",OR(OFFSET(G7,MAX((I9:Q17="王")*ROW(1:9)),MAX((I9:Q17="王")*COLUMN(A:I)),3,3)={"竜","馬","竜";"馬",0,"馬";"竜","馬","竜"},INT((ABS(MMULT(MOD(LARGE((I9:Q17>"")*(ROW(1:9)*9+COLUMN(A:I))-(MAX((I9:Q17="王")*ROW(1:9))=ROW(1:9))/2+(I9:Q17="王")*2%+(I9:Q17="飛")*3%+(I9:Q17="竜")*3%,{1,2;2,3;3,4;4,5}),1),{1;-1})))/1%+1%)=1,INT((ABS(MMULT(MOD(LARGE((I9:Q17>"")*(COLUMN(A:I)*9+ROW(1:9))-(MAX((I9:Q17="王")*COLUMN(A:I))=COLUMN(A:I))/2+(I9:Q17="王")*2%+(I9:Q17="飛")*3%+(I9:Q17="竜")*3%,{1,2;2,3;3,4;4,5}),1),{1;-1})))/1%+1%)=1,INT(MMULT(MOD(LARGE(IF(MOD(ROW(1:9)*19+COLUMN(A:I)-MAX((I9:Q17="王")*ROW(1:9)*19+COLUMN(A:I)),20)=0,(I9:Q17>"")*(ROW(1:9)*19+COLUMN(A:I))+(I9:Q17="王")*2%+(I9:Q17="角")*3%+(I9:Q17="馬")*3%,),{1,2;2,3;3,4;4,5}),1),{1;-1})/1%+1%)={1,-1},INT(MMULT(MOD(LARGE(IF(MOD(ROW(1:9)*19+COLUMN(A:I)-MAX((I9:Q17="王")*ROW(1:9)*19+COLUMN(A:I)),18)=0,(I9:Q17>"")*(ROW(1:9)*19+COLUMN(A:I))+(I9:Q17="王")*2%+(I9:Q17="角")*3%+(I9:Q17="馬")*3%,),{1,2;2,3;3,4;4,5}),1),{1;-1})/1%+1%)={1,-1}))}

y sakuda

なるほどーー
全然方向性違ってた・・・・

jyo3

うひゃーーー
976も、、、

長いだけでない、、、

長いだけで、いろいろ繰り返しなら・・・わかりやすいが、、、

})))/1%+1%)=
とか、、
3%,{1,2;2,3;3,4;4,5}),1),{1;-1})
すげーーー、、、数字類、、、

min

ジョー3さん
"飛角王","王角飛"
はいらなかったのですね。
深く考えませんでした。

そうなると推定18文字減ることになる。

y sakuda

これで配列を作り、MMULTで隣どおしの差を求めてます。
その差のMOD1が0.01の時王手とみなしてます。

min

sakudaさんの解読
携帯からでは難しい

それにしてもすご、。。

jyo3

sugo スゴ  すご・・・・・・・

のんだから、、、、
のんでなくても、、、

わからない、、、てくにっく


こんなに、、、、、もうしわけない・・・かんじ、、、

y sakuda

>携帯からでは難しい

最初の部分の隣接の判定は説明不要だと思います。

角筋 ↓は右下がり
INT(ABS(MMULT(MOD(LARGE(IF(MOD(ROW(1:9)*19+COLUMN(A:I)-MAX((I9:Q17="王")*ROW(1:9)*19+COLUMN(A:I)),20)=0,(I9:Q17>"")*(ROW(1:9)*19+COLUMN(A:I))+(I9:Q17="王")*2%+(I9:Q17="角")*3%+(I9:Q17="馬")*3%,),{1,2;2,3;3,4;4,5}),1),{1;-1}))/1%+1%)=1
このMod20を18 に変えて左下がり


飛筋は↓
INT((ABS(MMULT(MOD(LARGE((I9:Q17>"")*(ROW(1:9)*9+COLUMN(A:I))-(MAX((I9:Q17="王")*ROW(1:9))=ROW(1:9))/2+(I9:Q17="王")*2%+(I9:Q17="飛")*3%+(I9:Q17="竜")*3%,{1,2;2,3;3,4;4,5}),1),{1;-1})))/1%+1%)=1
これを、列に替えたものとペアです。

つまり200見当の式が4つに100ちょっとの隣接判定で1000弱ってことになります。
さすがにこん長いの書いたことありませんからつかれましたw

min

解説ありがとうございました。
雰囲気はわかりました。
携帯からだと式が全部表示されないので、今度じっくり見ます。

y sakuda

アイデアは単純なんですが、実際にやるといろいろ・・・・
飛車、竜の場合、例えば王が行の左端(実際の端ということではなく、他の駒が左側にないということ)で、飛車が前の行の右端にあるとアタリ判定がでちゃったんで、王と飛車が同一行にある場合に限る小細工。

角の場合は折り返しを避けるために、×9ではなく×19でやれば良かったはずが、右下がりの対角線の場合だけ異常が起こり、小細工

てなことで原型から大分のびました^^

maron

◆よい子の693
{=REPT("王手!",OR(COUNTIF(OFFSET(G7:I9,MAX((I9:Q17="王")*ROW(1:9)),MAX((I9:Q17="王")*COLUMN(A:I))),{"竜","馬"}),COUNT(FIND({12,21},SUBSTITUTE(SUM(COUNTIF(OFFSET(H8,MAX((I9:Q17="王")*ROW(1:9))+MAX((I9:Q17="王")*COLUMN(A:I))-ROW(1:9),ROW(1:9)),{"王","角","馬","飛","竜"})*{1,2,2,3,3}*10^ROW(1:9))&9&SUM(COUNTIF(OFFSET(H8,MAX((I9:Q17="王")*ROW(1:9))-MAX((I9:Q17="王")*COLUMN(A:I))+ROW(1:9),ROW(1:9)),{"王","角","馬","飛","竜"})*{1,2,2,3,3}*10^ROW(1:9)),0,))),COUNT(FIND({13,31},SUBSTITUTE(SUM(COUNTIF(OFFSET(H8,MAX((I9:Q17="王")*ROW(1:9)),ROW(1:9)),{"王","角","馬","飛","竜"})*{1,2,2,3,3}*10^ROW(1:9))&9&SUM(COUNTIF(OFFSET(H8,ROW(1:9),MAX((I9:Q17="王")*COLUMN(A:I))),{"王","角","馬","飛","竜"})*{1,2,2,3,3}*10^ROW(1:9)),0,)))))}

y sakuda

maronさんの・・・・隣接の部分はなるほどーーです。
が・・・・・後のは何が何だかわかんないです。後でというか明日すっきりした頭でじっくり考えます。
でも700アンダーってのはすごいです。
前のもそうですが、私はCountifどうもうまく使えないです。

maron

◆【第8回】の*1を-にしたら、160→159の150台になったのに、安易でした・・・
159:{=REPT("王手飛車!",COUNT(FIND({13;23;31;32},-SUBSTITUTE(MMULT(1^COLUMN(A:I),SUMIF(AB18:AB20,AB20+(MOD(AB20,9)+ROW(1:9)-9)*{8,-10},AA18:AA20)*10^ROW(1:9)),0,)))=2)}

◆それにしても、sakudaさんのチェック用マクロはすごくて、便利ですね

maron

◆そう言えば昔、成果物をすごいとほめたら、「成果物がすごいのではなく、それを作った人がすごいんだ」と言われたことがあります

◆まさに、sakudaさんはすごいですね

y sakuda

VBA好評みたいでうれしいですが・・・・
中ご覧になれば分かりますが、書き流しの簡単なものです。
なんせ、チェック内容は単純ですから凝りようがありません。VBAちょっとかじった方ならだれでも作れます。
特に自分用でしたら、起動部とかオプションとかはコード直接いじっちゃうとかできますからややこしいことやる必要ありませんしね。

一日以内にほとんどトラぶらないのをでっち上げるのは慣れです。

jyo3

みなさーん
大変、有難うございました。、、
ある意味、この忙しい時期に、、、
ある意味、変な問題に、、、お付き合いいただきまして、、、

今日は、出かけますが、、、帰ってから、ゆっくり見たいです、

VBAも、関心ありますので、・・・
こちらも、、、ちかいうちに、ゆっくり見たいです。
sakudaさん、、教材としても、、
嬉しいです。

くまぷー

お早うございます。
いや~、みなさんのは私には全然思いつかない手です。
どうしてそんな発想ができるのか。

今回も完全に参りました。

y sakuda

maronさんの今朝再度眺めてやっと分かった^^
文字列化して操作するって発想、このシリーズのどれかの時試したんですが・・・・
私の場合、10^Row(1:16)になってしまい、精度が保てずそこで断念してしまいました。
Offset使うと後何も操作できなくなる場合が多く、そこも発展性がなくなっちゃいました。
Countifで有無をチェックするってのは今回一回もやってません。前半でもmaronさんがやってらっしゃったけど、応用できなかったと言うかまるで頭に浮かんでこなかった・・・・

y sakuda

今回これで終わりかしら?
私自信はなにも問題思いつきませんが・・・・
難しそうに見えるが、上手い手を見つければ簡単にできるってのも良いですが、こういうセル一つでできるんか?ってのも面白いんですけどね。

y sakuda

ジョー3の500台の奴、昨晩パッと見で分かったつもりになってましたが、丸で分かってなかったです。
=I9:I17&J9:J17
この形、思いつく以前にできるって知らなかったみたいですねーー。
ジョー3もExcel良く知ってる^^

y sakuda

うーーん
(I9:Q17="王")*((J8:R16="竜")
この発想もなかった。いい味ですねーー
maronさんのとジョー3の分かったから、今度はminさんのだな。
これもさっぱりわかんねー
こうやって見ると私のが一番単純な発想w(無知の勝利)

min

参考
441
{=IF(COUNT(1/(FIND(OFFSET(G7:I9,SUM((I9:Q17="王")*ROW(1:9)),SUM((I9:Q17="王")*COLUMN(A:I))),"0竜馬")-1),FIND({"王角","王馬","角王","馬王"},I1:I17&J2:J18&K3:K19&L4:L20&M5:M21&N6:N22&O7:O23&P8:P24&Q9:Q25&0&I9:I25&J8:J24&K7:K23&L6:L22&M5:M21&N4:N20&O3:O19&P2:P18&Q1:Q17),FIND({"王飛","王竜","飛王","竜王"},I9:I17&J9:J17&K9:K17&L9:L17&M9:M17&N9:N17&O9:O17&P9:P17&Q9:Q17&0&TRANSPOSE(I9:Q9&I10:Q10&I11:Q11&I12:Q12&I13:Q13&I14:Q14&I15:Q15&I16:Q16&I17:Q17))),"王手!","")}

以下分割
88
1/(FIND(OFFSET(G7:I9,SUM((I9:Q17="王")*ROW(1:9)),SUM((I9:Q17="王")*COLUMN(A:I))),"0竜馬")-1)
155
FIND({"王角","王馬","角王","馬王"},I1:I17&J2:J18&K3:K19&L4:L20&M5:M21&N6:N22&O7:O23&P8:P24&Q9:Q25&0&I9:I25&J8:J24&K7:K23&L6:L22&M5:M21&N4:N20&O3:O19&P2:P18&Q1:Q17)
174
FIND({"王飛","王竜","飛王","竜王"},I9:I17&J9:J17&K9:K17&L9:L17&M9:M17&N9:N17&O9:O17&P9:P17&Q9:Q17&0&TRANSPOSE(I9:Q9&I10:Q10&I11:Q11&I12:Q12&I13:Q13&I14:Q14&I15:Q15&I16:Q16&I17:Q17)))

その他
24

y sakuda

minさんの隣接判定
FIND(OFFSET(G7:I9,SUM((I9:Q17="王")*ROW(1:9)),SUM((I9:Q17="王")*COLUMN(A:I))),"坂本竜馬")
これも理解するのにちょいと時間かかったです。
分かって見ればなるほどーーですね。

maron

◆発想
◆【第8回】は対象範囲内にある、王・飛・角の有無をAA・AB列を使って、1・2・3に数値化して、角・王、角・飛の有無をCOUNTします。
◆それを9ケタの数値にして、0を削除して、角による、王手飛車なので、FINDで王手・飛車とりをCOUNTして、COUNT=2にしています

◆【第9回】は対象範囲内にある、王・飛・竜・角・馬の有無をSUMIF関数を使ってAA・AB列を参照して数値化して、1・2・3になるように、INT(・・・/2)としています
◆後は、【第8回】と考え方はほぼ同じです

jyo3

さて、また、作りたくなった。、、、問題、、、あはは、、、

で、、、

自分で考えた手法・・・、、、
それを、見つけるための、、問題でなくて、、、

ふっと、無責任に、、思った、、問題、、、
それなら、、、いくらでもできそう・・・
(今、草刈りして、疲れて、ビールが、、、そう言っている)

だから、簡単か、難しいか、、わからない問題。
3問セット、、、今作りかけてますーーー・・・

詰将棋でなく・・・
詰むや詰まざるや、、、、
的なものです、、、

y sakuda

>だから、簡単か、難しいか、、わからない問題。
いいんじゃないですかーー
難しけりゃ難しいで誰かなんかやるにきまってますもんw

min

>これもcountを使っているので40位は減らせると思います。

完全短縮しなければさほど重くなることはない頭で考えていたのですが、
予想が外れ、結構重くなることが分かりました。
PCが固まることはないとは思いますが、

>良い子はマネをしてはいけません ( >_<)
441を395 {=IF(COUNT(1/(FIND(OFFSET(G7:I9,SUM((I9:Q17="王")*ROW(1:9)),SUM((I9:Q17="王")*COLUMN(A:I))),"0竜馬")-1),FIND({"王角","王馬","角王","馬王"},I:I&J2:J18&K3:K19&L4:L20&M5:M21&N6:N22&O7:O23&P8:P24&Q9:Q25&0&I9:I25&J8:J24&K7:K23&L6:L22&M5:M21&N4:N20&O3:O19&P2:P18&Q:Q),FIND({"王飛","王竜","飛王","竜王"},I1:I17&J:J&K:K&L:L&M:M&N:N&O:O&P:P&Q:Q&0&TRANSPOSE(A9:Q9&10:10&11:11&12:12&13:13&14:14&15:15&16:16&17:17))),"王手!","")}

失礼しました。

min

ちなみに完全短縮したら、固まります。

くまぷー

お早うございます。

>ちなみに完全短縮したら、固まります。

試してみました。
かなり、遅いですが固まりませんでした。

くまぷー

>今回これで終わりかしら?

ジョー3さんのがあと一つです。

jyo3

>441を395>
やはりねーーーできるんだーーーー、、、すごい、、

>ジョー3さんのがあと一つです。
あれ、、、あったけーーーー

修正しかけは、、、記憶してたけど、、

くまぷー

>>ジョー3さんのがあと一つです。
>あれ、、、あったけーーーー

孫のやつです。

jyo3

>孫のやつです。
簡単すぎですね、、、
・・・・きっと、、、

もう一つ、、、足して、三題に、したらいいかなーーー

jyo3

>もう一つ、、、足して、三題に、したらいいかなーーー
暇そうだったら、、、出しますね、、、

くまぷー

これから第10回の用意をします。

コメントの確認

コメントのプレビュー

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

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

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

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

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

処理中...

コメントを投稿

アカウント情報

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

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 メニュー