« 第135回 将棋盤で石数え | メイン | 第136回 一人ぼっちはいくつ? »

2012年9 月 8日 (土曜日)

コメント

ジョー3

で、
ちょっとだけ、、
233
{=MAX(OR(D4:F6>""),ROUND((COUNTIF(D4:F6,"●")-SUM((D4:F6>D3:F5&D5:F7&C4:E6&E4:G6)*1))/(1+(SUM((D4:F6>"")*(D3:F5&D5:F7&C4:E6&E4:G6&$E$5="●"))=4)*0.7),0))-(COUNTIF(D4:F6,"●")=6)*(OR(AND(E4:E6=""),AND(D5:F5=""),D6&E5&F4="",D4&E5&F6=""))}
220
{=MAX(OR(D4:F6>""),ROUND((SUM((D4:F6>"")*(D3:F5&D5:F7&C4:E6&E4:G6>"")))/(1+(SUM((D4:F6>"")*(D3:F5&D5:F7&C4:E6&E4:G6&$E$5="●"))=4)*0.7),0))-(COUNTIF(D4:F6,"●")=6)*(OR(AND(E4:E6=""),AND(D5:F5=""),D6&E5&F4="",D4&E5&F6=""))}

でも、、ぜーーんぶ
・・・・・・
気に入らない。
今回は、、、ひらめきが無い。。。

くまぷー

sakudaさんです。
----------------------------------
最終的に368で終わりました。
{=CHOOSE(MIN(4,MAX((D4:F6>"")*(LEN(D3:F5&E4:G6&D5:F7&C4:E6)+1)))+1,0,1,2,IF(SUM(N(((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))=3))=1,3,IF(SUM(N(((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))=1))=4,(SUM(N((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6)={2,9,2;9,9,9;2,9,2}))=1)+3,COUNT(0/((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))))),COUNT(0/((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))))}

基本的には●が存在するセルが幾つのセルとつながっているか数えています。
ただし、最初のChooseの所では●が全く無かった時も判別するために小細工してます。

(D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6)
{1,0,1;2,0,1;2,1,0}<=4と2の二つに分かれた時のものです。
●□●
●□●
●●□

それで、接続個数のMaxにより
1⇒2個
3、4⇒すべて一塊になっているので上の配列の数字がある個数を数える
で、問題はMAXが2の場合でややこしくなりました。
①2が1個の場合、3
②2が2個以上の場合、1(端)が4個以外の場合は配列の数字がある個数
③2が2個以上で、1が4個の場合二つの塊と判断し更に次の判別が必要になりました。
 角のセルに2が1カ所だけ現れた場合は4と2に分かれるパターンで4
 それ以外の場合は3
Maxが2の時の整理がうまくできれば確かに200くらいでできそうなんですが、なんともなりませんでした。

しかし、この問題、質問掲示板ででたら、躊躇なく「一つの式では無理です」でしょうし、ワークセルを使ったとしても
「非常に困難です」としか答えようがないですね。
元々ジョー3もおっしゃっているように、人間が判断すれば極簡単でコンピュータにやらせようとすると難しいという
典型的な問題ですね。

ジョー3

あ、、、
3つ並べて、f9 1万回・・・・
全部同じだった。

でも、、、、

3つとも同じ間違いかも。・・・・・・
・・・・・・・・・・・・・・

ジョー3

>元々ジョー3もおっしゃっているように、人間が判断すれば極簡単でコンピュータにやらせようとすると難しいという
典型的な問題ですね。

にんげんって、、、、すごいーーーーー
えくせるは、、、、、おろかだーーーー
・・・・・・・・・・・・・・・・・・・・あはは、、、、、

でもね、、、

159が、、、、
エクセルをすごいと思わせるかも、、、、

あ、、、それ以上もあるかもね、、、

くまぷー

{=MAX(LEN(SUBSTITUTE(IF(D4:F6="",,D4:F6&D3:F5&E4:G6&C4:E6&D5:F7&IF(D3:F5>"",D2:F4,)&IF(E4:G6>"",F4:H6,)&IF(D5:F7>"",D6:F8,)&IF(C4:E6>"",B4:D6,)&IF(D3:F5&C4:E6>"",C3:E5,)&IF(D3:F5&E4:G6>"",E3:G5,)&IF(E4:G6&D5:F7>"",E5:G7,)&IF(D5:F7&C4:E6>"",C5:E7,)&IF((C4:E6>"")*(C3:E5>"")+(D3:F5>"")*(D2:F4>""),C2:E4,)&IF((E4:G6>"")*(E3:G5>"")+(D3:F5>"")*(D2:F4>""),E2:G4,)&IF((E4:G6>"")*(E5:G7>"")+(D5:F7>"")*(D6:F8>""),E6:G8,)&IF((C4:E6>"")*(C5:E7>"")+(D5:F7>"")*(D6:F8>""),C6:E8,)&IF(LEN(D3:F5&D2:F4&C2:E4)=3,B2:D4,)&IF(LEN(D3:F5&D2:F4&E2:G4)=3,F2:H4,)&IF(LEN(D5:F7&D6:F8&C6:E8)=3,B6:D8,)&IF(LEN(D5:F7&D6:F8&E6:G8)=3,F6:H8,)&IF(LEN(D3:F5&D2:F4&C2:E4&B2:D4)=4,B3:D5,)&IF(LEN(D3:F5&D2:F4&E2:G4&F2:H4)=4,F3:H5,)&IF(LEN(D5:F7&D6:F8&C6:E8&B6:D8)=4,B5:D7,)&IF(LEN(D5:F7&D6:F8&E6:G8&F6:H8)=4,F5:H7,)),0,"")))}

え~と、789文字です。

考え方:
1.セルが空白でなければ縦横方向に隣のセルを調べ、それをつなげて文字列を作る。
2.九つのセルすべてに1の作業を行う。
3.If文で文字数を稼ぐために引数を省力したので(If(条件,A,"")と
  するところをIf(条件,A,)としたので1でつなげた文字列に0がまじっているので
  Substituteで0を""に置換する。
4.Maxで最大数をとる。(完了)

考え方にひらめきがないので超長大になりました。

くまぷー

考え方:
1.セルが空白でなければ縦横方向に隣のセルを調べ、それをつなげて文字列を作る。
2.九つのセルすべてに1の作業を行う。
3.If文で文字数を稼ぐために引数を省力したので(If(条件,A,"")と
  するところをIf(条件,A,)としたので1でつなげた文字列に0がまじっているので
  Substituteで0を""に置換する。
 4.Lenで文字列の長さをだす。
5.Maxで最大数をとる。(完了)

すみません。4が抜けました。

ジョー3

感動・・・力作・・・789
で、、チェック!!!
・・・・・・・・・・・・・・そしたら、、、、
くまぷーさんと
1万回答えが合いました。

からくち

皆さんの式を拝見させていただきました

●_●_□
●_□_●
□_□_●

●_●_●
●_□_●
□_□_●

この2パターンの両方を試してください


{=CHOOSE(LOOKUP(MAX(LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6)),{0,1,2,3})+1,OR(D4:F6>0)*1,2,IF(SUM((D4:F6="")*{1,2,3;4,5,6;7,8,9})=15,3,SUM((LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6)=2)*1)+2),COUNT(0/(LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6))))}

残念ですが時間が取れず、ただ書いただけです
ただし不具合の有無は、、、疑問です

ジョー3

CHOOSE・・・・・
最初・・・
これで、100未満頑張ろうとした。・・・・出来ませんでした。

くまぷー

からくちさん、どもです。

□_●_●
□_●_●
●_□_□

上のパターンを確認して下さい。

くまぷー

sakudaさん、どもです。

□_□_●
●_□_●
●_●_□

上のパターンを確認して下さい。

からくち

>上のパターンを確認して下さい。
やはり、、、

上記修正版
{=CHOOSE(LOOKUP(MAX(LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6)),{0,1,2,3})+1,OR(D4:F6>0)*1,2,IF(SUM((D4:F6="")*{1,2,3;4,5,6;7,8,9})=15,3,SUM((LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6)=2)*1)+MIN(2,SUM((LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6)=1)*1))),COUNT(0/(LEN(D4:F6)*LEN(D3:F5&D5:F7&C4:E6&E4:G6))))}

くまぷー

>くまぷーさんと
>1万回答えが合いました。

ありがとうございます。
私もジョー3さんのをチェックしましたが
間違いのパターンを発見できませんでした。

>f9で確認300回目ぐらいで、、、読みぬけが・・・出たーーーーー

・・・と仰っていましたが、出品されたものでは解決済みなのですね?

ジョー3

>出品されたものでは解決済みなのですね?
の・・・つもりが余計悪くなったり・・・・

かも、、、、

くまぷー

からくちさん、修正版ですが・・・

●_□_●
●_●_□
□_●_●

上のパターンを確認して下さい。

min

遅くなりました。
ちょっと寝てしまい、今目が覚めました。
みなさんの式は良く見てませんが、
とりあえず式をだします。

一番最初単純に
175
{=MAX(SUM(--(D4:F6>"")-(D4:F6=D3:F5&C4:E6&E4:G6&D5:F7&"●"))-(SUM((D4:F6="●")*(D3:F5&D5:F7&C4:E6&E4:G6="●"))>=4)*(2+AND(SUM(--(D4:F6>""))=6,D4=F6,F4=D6))*(E5=""),--(D4:F6>""))}
でした。
最終的には、
159
{=MAX(SUM(LEN(D4:F6)*(D3:F5&C4:E6&E4:G6&D5:F7>""))-(SUM(N(D4:F6&0&D3:F5&D5:F7&C4:E6&E4:G6="●0●"))>3)*(2+IF(SUM(LEN(D4:F6))=6,D4&F4=F6&D6))*(E5=""),LEN(D4:F6))}
これでもおんなじ
{=MAX(SUM(LEN(D4:F6)*(D3:F5&C4:E6&E4:G6&D5:F7>""))-(SUM(LEN(D4:F6)*(D3:F5&D5:F7&C4:E6&E4:G6="●"))>3)*(2+IF(SUM(LEN(D4:F6))=6,D4&F4=F6&D6))*(E5=""),LEN(D4:F6))}

さて判定はいかに?

ジョー3

minさん、、、式が難しそうでもないのに・・・・へーーー
すごいですねーーー
参ったです

くまぷー

minさんの3作をチェックしましたが
間違いのパターンを発見できませんでした。

しかし・・・よく言われることですが・・・
minさん、よく頭の中を見てみたい・・・

からくち

>修正版ですが・・・
なるほど、、、途中で引っかかってしまうのか
根本的に直さないと駄目ですね、、、時間が無い

もっとも時間があったら、、、
0~9までの512パターン
と言う事は、、、
=DEC2BIN()で000000000~111111111
と、ピッタシ
試してみたい、、、

min

あ、提示した175は最初のものではなかったです。
ま、どうでもいいんですが。。

min


では自分のためにも解説してみます。
考え方は単純で比較的すんなり思いつきましたが、
それ以外はいい方法を思いつきませんでした。
ジョー3さんとほぼおんなじ考え方ですが、

159
{=MAX(SUM(LEN(D4:F6)*(D3:F5&C4:E6&E4:G6&D5:F7>""))-(SUM(N(D4:F6&0&D3:F5&D5:F7&C4:E6&E4:G6="●0●"))>3)*(2+IF(SUM(LEN(D4:F6))=6,D4&F4=F6&D6))*(E5=""),LEN(D4:F6))}
式を分解してみます。

{=MAX(
SUM(LEN(D4:F6)*(D3:F5&C4:E6&E4:G6&D5:F7>""))
●が入っていてなおかつ上下左右に●が入っているセルの個数合計を求める
(この時点ですべて単独の●しかない場合は、0になる)

-
ここから次の部分を引いていく
(SUM(N(D4:F6&0&D3:F5&D5:F7&C4:E6&E4:G6="●0●"))
各セルに上下左右のセルをつなげて●●のセルになるセル
つまり、つながっているセルの端っこのセルが何個あるかを求める
たとえば
●●●
□□●
●●□
ならば
○●●
□□○
○○□
の白○の部分の個数を求める

>3)
これが3より大きければ
(この9セルの場合「>3」でなく「=4」でもいいのですが)

*(2
2を倍するして引く

+IF(SUM(LEN(D4:F6))=6,
さらに●の入っているセルが6個で
D4&F4=F6&D6))
●●●
□□□
●●●
または
●●□
●□●
□●●
のパタンだともう1引く必要がある。

*(E5="")
ただし
●●●
□●□
●●●
の場合、つまりは真ん中のセルが●の場合は端っこセルが4こでもつながっているため
引かない必要があるので「*(E5="")」をかける。

,LEN(D4:F6))}
このままだと入力されている●がすべてつながっていないと0になるので
「=MAX(*******,LEN(D4:F6))」で●が入っているセルがある場合は1を求める。

長くなった割にはわかりやすくないかな??

min

>よく頭の中を見てみたい・・・
頭の中は結構空っぽです。
ただ、今回の問題は9セルだったので
pcを使わなくてもパタンを考えやすかったです。

y sakuda

済みません。どこが違っているか確認してないのですが、間違えた式を出しちゃったみたいです。
正しいのは
{=CHOOSE(MIN(4,MAX((D4:F6>"")*(LEN(D3:F5&E4:G6&D5:F7&C4:E6)+1)))+1,0,1,2,IF(SUM(N(((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))=2))=1,3,IF(SUM(N(((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))=1))=4,(SUM(N((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6)={2,9,2;9,9,9;2,9,2}))=1)+3,COUNT(0/((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))))),COUNT(0/((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))))}

です。

皆さんのじっくり考えてませんが、全然分からん。

y sakuda

上の修正版ですが、チェックしてたら、皆さんのと違う答えがでたんで、そのパターンを完成品の所に貼り付けるとOK。
で、どうやら、式を文字列化したあといじって文字列修正するのわすれてたみたいです。
それにしてもminさんのすごいですね。
今日明日、時間がないので、月曜日以降みなさんのじっくり解析します。

y sakuda

それにしても、できないんじゃないかと思ったような問題にまがいなりにも答えが提出されるのが凄いですねーー

min

>答えが提出されるのが凄いですね
今回は9セルでパタンが限定されたので、
そういう意味でもいい問題でした。

ほんとは、違う方法をやりたかった。
居眠りして寝れなくなったので
そのやりたかった方法を試してみます。
多分出来ないと思うけど。

y sakuda

違ってたところ確認しました。真ん中より少し前の
((D4:F6>"")*LEN(D3:F5&E4:G6&D5:F7&C4:E6))=3
これが=2が正しかった。
確かにフェイルして直した覚えがありました。

見ても全然違いが分からないので違ったところを探す式を作るはめになったw

ni

みなさん、すごいですね。
私は結局ギブアップです。

min

>そのやりたかった方法を試してみます。
何となく出来ました。
短くなると思ったんですが長くなりました。
165
{=MAX(SUM(TEXT(FREQUENCY(LEN(D4:F6)*LEN(D3:F5&C4:E6&E4:G6&D5:F7&0),{1,2}),CHOOSE({1;2;3},"!0","[=4]"&(2-IF(SUM(LEN(D4:F6))=6,D4&F4=F6&D6))*(E5=""),))*1),LEN(D4:F6))}

ジョー3

>みなさん、すごいですね。
>私は結局ギブアップです。
わたしも、ほとんどギブアップ。
ぐちゃぐちゃというか、、
つぎはぎというか、、、、
3×3なのに、、不思議な複雑さだった。

・・・・・・・・・・・・・・

一人ぼっちは、何個ですか?
ぐらいの問題が易しくて良かったかも

ジョー3

minさんの
165も・・・すごい、、、
私の身についてない・・・技が・・・ちらちら・・・・・

くまぷー

>一人ぼっちは、何個ですか?
>ぐらいの問題が易しくて良かったかも

それ、頂きです!
第136回はそれにしましょう。
内容が分かってしまったのでさっそく出題しますね。

y sakuda

皆さんの回答眺めていたんですが、ちゃんと理解できたと思えるのは皆無^^;
私のだってその部類かもしれませんがw

くまぷー

>ちゃんと理解できたと思えるのは皆無^^; ×2

ジョー3

>ちゃんと理解できたと思えるのは皆無^^; ×3・・・・

エレガントな回答を引き出せ無かった点では、、、残念。
子供にも単純そうで、エクセル君には複雑・・・証明・・・だけ、、の収穫
お付き合いいただいたかたがたに、、、感謝。

ナイトと宝石には、、、面白い解き方があることを願ってます。


コメントの確認

コメントのプレビュー

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

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

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

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

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

処理中...

コメントを投稿

アカウント情報

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

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