保存してなかったので、自信がないが、
こんな式だったかなーーー。
39文字
=LEFT("Q",OR(ROW()*2+COLUMN()={10,29}))
いづれにしても、完敗だからねーー
もう少し、短くなるように頑張ってみるけど、
(ジョー3さん談)
« 表計算一筆書き(第52問)・・・7人の美女 | メイン | もう一つの「7人の美女」 »
最後に、下の画像の中に見える文字と数字を入力してください。これはプログラムを使ってコメントを自動的に投稿するのを防ぐために行われています。
画像を読み取れない場合は 別の画像を表示してください。
アカウント情報
(名前は必須です。メールアドレスは公開されません。)
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
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 |
Excel35です。
=LEFT("Q",MOD(ROW()*2,19)=COLUMN())
>いづれにしても、完敗だからねーー
×2 www
で、7人ではなく11人美女が居るやつ2種類
Excel38
=LEFT("Q",OR(ROW()+{1,12}=COLUMN()*2))
Excel39
=LEFT("Q",MOD(ROW()*2-2,11)=COLUMN()-1)
投稿情報: y sakuda | 2008年11 月15日 (土曜日) 午後 08時18分
45:=LEFT("Q",ISREF($K$8 (A1,C2,E3,G4,I5,K6,B8)))
31:=LEFT("Q",ISREF($K$8 A1))&C2&B8
29:=IF(ISREF($K$8 A1),"Q",C2&B8)
32:=IF((B1=0)*(A2=0),"Q","")&C2&B11
31:=LEFT("Q",(B1=0)*(A2=0))&C2&B11
30:=LEFT("Q",COUNT(B1-A2))&C2&B11
28:=IF(COUNT(B1-A2),"Q",C2&B11)
27:=IF(-(B1<>0)=A2,"Q",C2&B11)
26:=IF(-(B1>0)=A2,"Q",C2&B11)
23:=IF(B1>0>A2,C2&B11,"Q")
22:=IF(B1>0>A2,C2&J9,"Q")
ほぼminmaxさんと同じだと思います。
B11→J9で一文字短縮になかなか気付きませんでした。
投稿情報: kir | 2008年11 月15日 (土曜日) 午後 08時20分
Excel45・・・
=LEFT("Q",ISREF($K$9 (K7,C9,H5,G2,F4,E6,D3)))
何の芸もございません(^^ゞ
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 08時26分
ところでkirさんの22文字・・・
B3のQとI10のQがケンカをするのでは?
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 08時28分
kirさんとほぼ同じようですが。
29文字2種
=MID("Q",TYPE(B1+A2),1)&B3&K8
=REPT("Q",COUNT(B1+A2))&B3&K8
紙に書いたもの
27文字
=IF(COUNT(B1+A2),"Q",B3&K8)
26文字
=IF(B1=(A2>0)*1,"Q",B3&K8)
ここまでは理屈が分かります。
ここからは実際にパソコンに入力してから
無駄を省いたのですが理屈が分かりません。
24文字
=IF(B1=(A2>0),"Q",B3&K8)
22文字
=IF(A2>0=B1,"Q",B3&K8)
(=FALSE=0→FALSEですよね。
なのに
=FALSE=空欄セルはTRUEになる)
ついでにこれだと11クイーンは28でした。
=LEFT(IF(A2>0=B1,"Q",B3&G2))
やっぱりkirさんはすごいです。
あ、kirさんの22はちょっと直せば何とかなりそうですね。
投稿情報: minmax | 2008年11 月15日 (土曜日) 午後 08時34分
二人ともトンデモネーナ・・・・
>ここまでは理屈が分かります。
分からんw
前の時もそうだけど、ぜんぜーーんわかんないw
投稿情報: y sakuda | 2008年11 月15日 (土曜日) 午後 08時45分
こうやってみるとジョー3もくまぷーさんも私も正常人というか凡人と言うか、なぜか安心してしまうw
投稿情報: y sakuda | 2008年11 月15日 (土曜日) 午後 08時47分
kirさん、minmaxさんお二人とも
究極ですねぇ~、ついていけません^^;
私は平凡にRC36文字で、、
=IF(MOD(COLUMN()*7+ROW(),17),"","Q")
投稿情報: む印 | 2008年11 月15日 (土曜日) 午後 08時47分
>kirさん、minmaxさんお二人とも
究極ですねぇ~、ついていけません^^; ×2
ほんと。頭の中はどうなってんだろ?
かち割って中を見てみたい(^^ゞ
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 08時53分
minmaxさんの・・・
=LEFT(IF(A2>0=B1,"Q",B3&G2))
・・を見て初めて気づきました。
leftの第2引数を省略できるのを
知りませんでした。(^^ゞ
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 08時59分
ところで出題者はどこにいってしまったんだ?
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 09時01分
>ところで出題者はどこにいってしまったんだ?
ぽかーーん・・・・・・
みんな凄い。
投稿情報: ジョー3 | 2008年11 月15日 (土曜日) 午後 09時08分
>こうやってみるとジョー3もくまぷーさんも私も正常人というか凡人と言うか、なぜか安心してしまうw
安心、安心、
投稿情報: | 2008年11 月15日 (土曜日) 午後 09時10分
名前まで忘れた。↑
投稿情報: ジョー3 | 2008年11 月15日 (土曜日) 午後 09時11分
二つのセルを
&で
結んで、、、
ちょっとやってはいたが、
でも、うまく行かなかった。
思考がついて行かなかった。
投稿情報: ジョー3 | 2008年11 月15日 (土曜日) 午後 09時16分
kir、minmaxご両氏の毒気に当てられて立ち直れてませんがw
常連さんがだいたい出そろったみたいなので(かずさんがまだかな?)
基本形のプログラム(対称チェック等一切なし)をアップします。
4~11のボードでできるようになってますが、いきなり11なんかは
やらない方がよろしいかと思います(少々時間がかかるかも)
今ご覧の方たちにはどうやって動かすかの説明は不要と思いますが
一応・・・・
1.新規ブックを立ち上げ、ALT+F11でVBEを立ち上げます
2.挿入⇒標準モジュール で標準モジュールを一つ追加し
↓のコードを丸ごと貼り付け
3.VBEを閉じてExcel画面に戻り、ALT+F8 でマクロダイアローグを出し、
mainを選択して実行
4.InputBoxが出ますので、4~11の数字を入力してOK
なお、まともな(対称等をはずしたもの)バージョンができたら、差し支えなければ、
くまぷーさんに送ります。(本当に回して比較する気もないので、回転対称の排除に少々難航チュウw)
Dim wBord(11) As Long, wNo As Long
Sub ListProc(ByVal pN As Long)
Dim wSht As Worksheet
wNo = wNo + 1
Set wSht = Worksheets.Add(after:=Worksheets(Worksheets.Count))
With wSht
.Name = pN & "Queen No " & wNo
.Range(.Columns(1), .Columns(pN)).ColumnWidth = 2
With .Range(.Cells(1, 1), .Cells(pN, pN))
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
End With
End With
For I = 1 To pN
With wSht
.Cells(I, wBord(I)) = "Q"
End With
Next
End Sub
Function QCheck(ByVal pI As Long, ByVal pN As Long)
Dim I As Long
QCheck = True
For I = 1 To pI - 1
If wBord(I) = wBord(pI) Then
QCheck = False
Exit Function
Else
If Abs(wBord(I) - wBord(pI)) = pI - I Then
QCheck = False
End If
End If
Next
End Function
Sub Queen(ByVal pI As Long, ByVal pN As Long)
Dim I As Long
For I = 1 To pN
wBord(pI) = I
If QCheck(pI, pN) Then
If pI = pN Then
ListProc pN
Else
Queen pI + 1, pN
End If
End If
Next
wBord(pI) = 0
End Sub
Sub Main()
Dim wSObj As Worksheet, wFlg As Boolean, wN As Variant
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each wSObj In ThisWorkbook.Worksheets
If InStr(wSObj.Name, "Queen") > 0 Then
wSObj.Delete
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
wFlg = True
wNo = 0
Do While wFlg
wN = InputBox("ボードサイズ(4~11)を入力してください", "N Queen")
If IsNumeric(wN) Then
wFlg = wN < 4 Or wNo > 11
Else
If wN = "" Then
Exit Sub
End If
End If
If wFlg Then
MsgBox "ボードサイズが異常です", vbOKOnly
End If
Loop
Application.ScreenUpdating = False
Queen 1, wN
Application.ScreenUpdating = True
End Sub
不等号は全角に直しましたが、ブランクまでは手が回らずインデントが無くなっちゃってるとこはご勘弁願います^^;
投稿情報: y sakuda | 2008年11 月15日 (土曜日) 午後 09時21分
F9で、遊んでも見た。
もっと色々の不規則に見える
パターンまではいかなかった。
で、これも、不満足。
=IF(OR(ROW()*11+COLUMN()-MID(NOW(),12,1)={12,25,38,51,64,77,90}),"Q","")
投稿情報: ジョー3 | 2008年11 月15日 (土曜日) 午後 09時24分
>いきなり11なんかは
>やらない方がよろしいかと思います(少々時間がかかるかも)
4,5,6,9・・・・そして、
11を、やってみました。
これも面白い。
投稿情報: ジョー3 | 2008年11 月15日 (土曜日) 午後 09時36分
sakudaさん、さっそく遊んでみました。
Q11でやったら、仰せの通りけっこう
時間がかかり、シート数が2600だか2800だかになりました。
>差し支えなければ、くまぷーさんに送ります。
お待ちしています。
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 09時41分
>F9で、遊んでも見た。
これも面白いです。(^O^)
投稿情報: くまぷー | 2008年11 月15日 (土曜日) 午後 09時43分
超人的な解答を見てしまっては恥ずかしいのですが、
表明したので、平凡なRCですが、一応紹介します。(^^)ゞ
三四郎35
=If(Row(A1)*2 MOD 17+Col(A1)=9,"*")
Excel化すると37になるようです。
=LEFT("*",MOD(ROW()*2,17)+COLUMN()=9)
「桂馬」で、原形の37は直ぐに作れましたが・・・
三四郎37
=If((Row(A1)*2+Col(H1)) MOD 19=1,"*")
投稿情報: 悪児 | 2008年11 月16日 (日曜日) 午前 04時34分
いやいや凄いことに…
σ(・・)は全く圏外でした。
この土日はネットも圏外なので…
投稿情報: かず | 2008年11 月16日 (日曜日) 午前 05時35分
悪児さん、久しぶりに参加してくれて
うれしいです。
>超人的な解答
本当に超人的ですね。
レベルが高くなって私には理解できません。(T.T)
投稿情報: くまぷー | 2008年11 月16日 (日曜日) 午前 06時04分
かずさん、お早うございます。
>σ(・・)は全く圏外
私も今日はバドの試合で
一日中、圏外です。(^^ゞ
投稿情報: くまぷー | 2008年11 月16日 (日曜日) 午前 06時10分
sakudaさんから、改訂版のプログラムを
頂きました。これから、体育館に行かなければ
ならないので帰って来たら、みなさんに
紹介させて頂きます (^.^/~~~
投稿情報: くまぷー | 2008年11 月16日 (日曜日) 午前 06時56分
おはようございます。
>ところでkirさんの22文字・・・
あ~やっちまった~!ホント爪が甘い。
>前の時もそうだけど、ぜんぜーーんわかんないw
1)基点作成:=IF((B1=0)*(A2=0),"Q","")
K11にQを作る。(未入力セル=0なので、右隣も下もそうなのはK11のみ)
2)基点複製(桂馬):&C2
K11をI10で、I10をG9で・・・C2をA1でというように、最初のK11をコピーしていきます。
3)基点複製(残り)&B11
桂馬だけだと一個たりない。I1セルでK11を参照させた。
・・・A1の数式だと一見?かもだけど、Qが表示されてるセルの式を見ると分かりやすいかも。
別の言い方をすればK11に数式入力で11×11へコピペという感じ?
投稿情報: kir | 2008年11 月16日 (日曜日) 午前 08時10分
>前の時もそうだけど、ぜんぜーーんわかんないw
空セルを&で文字列化して、見かけは空で0ではない物を作ってるなど、個々の動きはわかるのですが、全体として、ああいう図柄になるというイメージが頭の中にできませんです・・・・・
一種の再帰式で、プログラムでの再帰式にはなれているのですがねwww
投稿情報: y sakuda | 2008年11 月16日 (日曜日) 午前 09時28分
みなさんどうも、ありがとうございました。
minmaxさん & kirさん
配置まで見つけるってことで、
少し苦しんでいただこうと思ったんですが、
・・・・・楽に解かれたようで、、
sakudaさん、
思いがけない、力作まで作っていただき感謝!!
ん、ん、、さらっと作ったようにも見える。
すごいことです。
悪児さん、
やはり、あの式の図は特徴を
分かっておられたようで、、ささっと、
でしたね、
くまぷーさん、、
供に悩んでいただいて、感謝。
・・・・・・
わたし・・
F9で、100種類ぐらいのたくさんの型を
簡単に出せないかと考えたが、、
力不足でした。
皆さんお付き合いいただき感謝でした。
投稿情報: ジョー3 | 2008年11 月16日 (日曜日) 午後 12時09分
sakudaさんから頂いたファイルを
アップしました。
みなさん、ご覧下さい。
投稿情報: くまぷー | 2008年11 月16日 (日曜日) 午後 04時35分