|
ベルク・カッツェ |
|
今回はちょっとがんばりました。
赤が0の場合は1通り 赤1の場合は3通り 赤2の場合は15通り 赤3の場合は3-0と2-1で6+26=32通り 赤4の場合は4-0、3-1、2-2で3+26+31=60通り 赤5の場合は5-0、4-1、3-2で1+13+52=66通り 赤0から4を2倍して赤5の分を足して288通り。 5個のうち3個は2個と同じなど多少工夫しましたが、2-2とか大変でしたね。二回ほど間違えてすぐ間違いに気づいて再送信したので、三回目でやっと正解でした。 |
|
11月3日(木) 0:36:17
45469 |
|
葦 |
| 完敗でした。やはり赤の個数で場合分けしたのですが相当苦戦して数十回もミスに気付く始末。明日また考えてみます。 |
|
11月3日(木) 1:20:37
45470 |
|
ToruFukatsu |
|
久しぶりに書き込んでみます。
全体で2^10=1024 左右対称のもの2^5=32 上下対称のもの2^6=64 点対称のもの2^5=32 二つ対称のものは三っつ目の対称にもなって、2^3=8 一つだけ対称のものはこれを除いて、(32-8)+(64-8)+(32-8)=104 対称性のないものは1024-104-8=912 よって、912/4+104/2+8=288 通り |
|
11月3日(木) 1:53:30
45471 |
|
Jママ |
|
こんばんは
冷静に考えたら解けました 位置を固定して考えると10ヶ所を塗り分けるのは2^10通り このうち 左右対称の塗りかたは2^5通り これは上下に返す(回転しても同じ)形を含むので実質半分 上下対称の塗りかた2^6通り これは左右に返す(回転しても同じ)形を含むので実質半分 回転対称の塗りかた2^5通り これは上下(左右も同じ)に返す形を含むの実質半分 左右対称かつ上下対称のものは必ず回転対称などより 左右かつ上下かつ回転対称のみ考えると塗りかたは2^3通り 2^10通りのうち、左右、上下、回転いずれの対称でもないものは ベン図より、2^10-2^5-2^6-2^5+2^3+2^3=912通り これは1つの形を上下に返す、左右に返す、回転させるとできる形を重複しているので 実質1/4の912/4=228通り 以上より実質のみベン図を使って計算すると 228+(2^5-8)/2+(2^6-8)/2+(2^5-8)/2+8=288通り ベン図 ttp://www.fastpic.jp/images.php?file=8851313460.jpg #45471さまが簡潔に書いてくださってますね(^_^;) 記述ミスがあり訂正しましたm(__)m |
|
11月3日(木) 15:16:28
45472 |
|
「数学」小旅行 |
|
暗算でしました。数珠順列のややこしいタイプ!
塗り方を、上下対称と非対称に分けて数えました。 |
|
11月3日(木) 5:30:35
45473 |
|
にこたん |
|
場合わけして計算したら
282になって間違えました。 考えなおします。Orz |
|
11月3日(木) 9:38:29
MAIL:nikotan@fat.coara.or.jp 45474 |
|
今年から高齢者 |
|
#45469ベルクカッツェさんのように場合分けしたまでは良かったのですが、
0-0、1-0、2-0、3-0、4-0、5-0と左側だけを対称性の無いように探して、 1-1、2-1、3-1、2-2、4-1、3-2の右側は何でもいいじゃないか...と考えて どうしてもこれ以上進めませんでした。 この中にも回転・反転で重複するものがあることに気付いてなんとか... しんどかった。 |
|
11月3日(木) 10:44:02
45475 |
|
Sueh |
|
何度も間違えてしまいましたが、原因は計算ミスでした。
面倒な場合分けで確認しようと思ったらそれも誤りで……。 考え方は#45471様と同様です。 2^10個の塗り方のうち、1回だけ現れる塗り方(xとおり)、2回ずつ現れる塗り方(yとおり)、4回ずつ現れる塗り方(zとおり)に分けます。 x:=2^3, 2y:=(2^5-2^3)+(2^6-2^3)+(2^5-2^3)=104, x+2y+4z=2^10 だから 求めるものは x+y+z=(2^10+3*8+104)/4 |
|
11月3日(木) 11:52:58
45476 |
|
にこたん |
|
左右上下異なっても、そのうちの24通りが、2回しか数えないのを
見落としていました。Org |
|
11月3日(木) 13:52:23
MAIL:nikotan@fat.coara.or.jp 45477 |
|
uchinyan |
|
はい,こんにちは。さて,今回の問題は...
うーむ,ややこしい。正解率も低いし算チャレとしても難でしょう。 何とか正解の値になったものの考え方は大丈夫だろうか。 こんな感じで。 この図の対称性には,左右対称,上下対称,180°の回転対称,があります。 ただし,この3つは独立ではなくどれか2つを続けて行えばもう1つを実現できます。 これがややこしく何度も数え間違えました。ふー。 まず,対称性を忘れれば,全体は,2^10 = 1024 通り, 左右対称なのは,左だけ考えればいいので,2^5 = 32 通り, 上下対称なのは,左右の両端を含んで上半分だけ考えればいいので,2^6 = 64 通り, 回転対称なのは,左だけ考えればいいので,2^5 = 32 通り, ただし,これらには2つ以上の対称性をもつものも含まれます。 先に述べたように,2つの対称性をもつものは3つの対称性をもちます。 これは,例えば,左右対称かつ上下対称と考えてよく,左の上3つで決まるので,2^3 = 8 通り。 そこで, 左右対称性だけをもつものは,32 - 8 = 24 通り, 上下対称性だけをもつものは,64 - 8 = 56 通り, 回転対称性だけをもつものは,32 - 8 = 24 通り, いずれの対称性ももたないものは,1024 - 24 - 56 - 24 - 8 = 912 通り。 この問題では,左右,上下のひっくり返しと回転で同じものを除くので重複を除きますが, 先に述べたように,対称性は実質2つを考えれば十分なので, 3つの対称性をもつものは,8/1 = 8 通り, 左右対称性だけをもつものは,24/2 = 12 通り, 上下対称性だけをもつものは,56/2 = 28 通り, 回転対称性だけをもつものは,24/2 = 12 通り, いずれの対称性ももたないものは,912/4 = 228 通り。 これらを足せばいいので, 8 + 12 + 28 + 12 + 228 = 288 通り, になります。 |
|
11月3日(木) 13:58:04
45478 |
|
uchinyan |
|
掲示板を読みました。
注意 以下の記述は,そもそもは私自身の勉強のメモに過ぎないのですが, 折角なのでご参考までにと思って公開するものです。 そういうこともあって,解法の分類は算チャレの F.A.Q. の「算数の範囲」の記述を参考に, 私個人が独断と偏見で主観的に行っているものであって,客観的なものではありません。 あくまでもご参考です。悪しからず。 やはり皆さん苦戦しているようですね。 #45469,#45470,#45475,#45488,#45491,#45499 赤,又は緑,の個数,位置などで場合分けし具体的にパターンを数え上げる解法。 詳細はいろいろあるようですが,そこらの分類は省略します。 #45471,#45472,#45476,#45478,#45507 赤緑のパターンの対称性により異なるそれぞれの重複を除いてから足し上げる解法。 ただし,#45472の, >228+(2^4-8)/2+(2^5-8)/2+(2^4-8)/2+8=288通り この左辺は,228 + 4 + 12 + 4 + 8 = 256 ≠ 288,でおかしいです。 そもそも, >左右対称の塗りかたは2^5通り >これは上下に返す(回転しても同じ)形を含むので >実質半分の2^4通り この半分にする辺りがおかしいように思いますが...? その後,修正が入りましたね。今は訂正されています。 #45473+#45503 塗り方を上下対称と非対称に分けて数える解法,とのこと。 詳細は不明。 数珠順列がベースになっている? その後#45503で詳細が説明されました。 数珠順列と同じというのは裏返して同じになるかどうかということのようです。 具体的には,まず,左と右の正六角形が上下対称かどうかで場合分けし, 各場合で左右対称と回転対称を考慮して数えていくということのようです。 #45474+#45477 >場合わけして計算したら という解法。詳細は不明。 >282になって間違えました。 実は私も最初こうなりました。間違いの原因は, 左右対称と上下対称だけ考えれば回転対称は実現できるので考えなくてよい, と思ったことで, (2^10 - 2^5 - 2^6 + 2^3)/4 + (2^5 - 2^3)/2 + (2^6 - 2^3)/2 + 2^3 = 234 + 12 + 28 + 8 = 282, 明らかに,回転対称であって左右対称でも上下対称でもないものがあるので,これは間違い。 ただし,この場合 2^5 - 2^3 = 24 を 4 で割った 6 を足せば 288 になります。 しばし,意味があるのだろうか,と考えたのですが,偶然でしょうね。 #45484 赤緑のパターンの対称性により異なる重複度をそろえて一気に除く解法。 なるほど,この手がありましたね。先に重複を除くことばかり考えてうっかりしました。 ただ,ちょっと分かりづらいかも知れないので補っておきましょうか。 この図には,そもそも,左右対称,上下対称,180°の回転対称の3つの対称性がありますが, これらのどの2つの対称移動操作を行っても3つ目の対称移動操作が現れます。 そこで,これ3つの対称移動操作,左右反転,上下反転,180°の回転,によって移り合う赤緑のパターンは8つではなく最大でも4つです。 これを重複度ということにすると,次のとおりになっており,これですべてです。 a:対称性の全くないパターンの重複度は 4, b:左右対称だけをもつパターンの重複度は 2, c:上下対称だけをもつパターンの重複度は 2, d:回転対称だけをもつパターンの重複度は 2, e:2つ=すべての対称性をもつパターンの重複度は 1。 これらの重複度の表現を記号として,(a,b,c,d,e),と表すことにします。 それぞれの位置に重複度が書かれますが,そもそも該当しない場合は重複度はないので 0 とします。 ここまで準備しておいて, すべてのパターン,2^10 = 1024 通り,a, b, c, d, e が含まれ,重複度は (4,2,2,2,1), 左右対称のパターン,2^5 = 32 通り,b, e が含まれ,重複度は (0,2,0,0,1), 上下対称のパターン,2^6 = 64 通り,c, e が含まれ,重複度は (0,0,2,0,1), 回転対称のパターン,2^5 = 32 通り,b, e が含まれ,重複度は (0,0,0,2,1), そこで,これら4つを足すと,重複度は (4,4,4,4,4) となって,a, b, c, d, e のすべてが 4 になります。 これより,重複を除くには 4 で割ればよく, (1024 + 32 + 64 + 32)/4 = 1152/4 = 288 通り, が答えになります。 なかなかうまいですね。 また,すべての対称性をもつ 2^3 = 8 通りが表に現れないのも面白いです。 プログラムによる解法がなかったのがちょっと意外。 冗長でもよければ容易に組めるのですが... とか言ってたら... #45483,#45490,#45492,#45493,#45495,#45501 プログラムによる解法。 |
|
11月10日(木) 10:59:55
45479 |
|
Jママ |
|
#45479
uchinyanさま いつもありがとうございます たった今自分でも記述ミスに気がつき訂正いたしました 各々8を引いてから半分にします、失礼しました m(__)m |
|
11月3日(木) 15:19:14
45480 |
|
uchinyan |
|
#45462
一辺 a cm の正四面体をベースに考えれば, 6 * 6 * 6 * 1/3 * 6 = 432 cm^3, でよさそう。 |
|
11月3日(木) 15:32:03
45481 |
|
baLLjugglermoka |
| 今日の昼間にイベントが終わり、先程解きました。場合の数は図形と張り合って超苦手です。 |
|
11月3日(木) 18:30:59
45482 |
|
kyorofumi |
|
Burnside's counting theorem, written with Matlab function sansu() toys = de2bi([0:1023]); sigma = zeros(1,8); for i = 1:1024 toy = toys(i,:); if isequal(toy,toy) sigma(1) = sigma(1)+1; end if isequal(toy,fliplr(toy)) sigma(2) = sigma(2)+1; end if isequal(toy,flipbt(toy)) sigma(3) = sigma(3)+1; end if isequal(toy,rotate(toy)) sigma(4) = sigma(4)+1; end if isequal(toy,fliplr(flipbt((toy)))) sigma(5) = sigma(5)+1; end if isequal(toy,fliplr(rotate((toy)))) sigma(6) = sigma(6)+1; end if isequal(toy,rotate(flipbt((toy)))) sigma(7) = sigma(7)+1; end if isequal(toy,fliplr(rotate(flipbt((toy))))) sigma(8) = sigma(8)+1; end end sigma sum(sigma)/8 end function toy = fliplr(toy) %flip the toy left to right toy = toy([6,5,4,3,2,1,10,9,8,7]); end function toy = flipbt(toy) %flip the toy bottom to top toy = toy([1,10,9,8,7,6,5,4,3,2]); end function toy = rotate(toy) toy = toy([6:10,1:5]); end Stdout: sigma = 1024 32 64 32 32 64 32 1024 ans = 288 |
|
11月3日(木) 18:39:44
45483 |
|
lake |
|
変換の仕方が
動かさない、左右反転、上下反転、左右・上下反転(=180°回転)の4種類で 動かさないで盤面が変化しないのが1024通り 左右反転で盤面が変化しないのが32通り 上下反転で盤面が変化しないのが64通り 左右・上下反転で盤面が変化しないのが32通り (1024+32+64+32)/4 = 288 288通りが答えとなりました |
|
11月3日(木) 21:25:25
45484 |
|
スモークマン |
|
だめじゃー ^^;
水平で対称・・・2^2*2^4 垂直で対称・・・2^5 点対称・・・2^5 それぞれ重複はみな同じ 2^3 (2^10-((2^6-2^3)+2*(2^5-2^3)+2^3))/8=114 114+(2^6-2^3)+2*(2^5-2^3)+2^3=226 で入れず… 解法が知りたくて…探しまくりました…疲弊…^^;; 勉強になりました☆ #45484 lakeさんのスマートな解法!!… but…わたしにゃ…それでいい理由が解読できません…Orz |
|
11月4日(金) 0:14:45
45485 |
|
uchinyan |
|
#45485 スモークマンさんへ
私なりの#45484の理解を#45479に追加しました。ご参考まで。 |
|
11月4日(金) 15:17:56
45486 |
|
スモークマン |
|
#45486 uchinyanさんへ ^^
なるほどぉ〜〜〜☆ わかりやすい解説ありがとうございました〜m(_ _)m〜 面白い解法ですわねぇ♪ 変換の仕方が4種類だから分母が4というのも貴殿の説明で了解できましたぁ ^^☆ |
|
11月4日(金) 19:35:27
45487 |
|
巷の夢 |
|
いやー難しかった・・・。二日間もかかってしまい能力の無さを痛感
致しました。最初は、赤の個数で分けてと発想は良かったのですが、 対象で同じとなるものを引いてが上手くいかず、結局は全て書き出して 求めました。皆様の回答で勉強させて頂きます。疲れ切りました・・・。 |
|
11月4日(金) 21:32:55
45488 |
|
紫の薔薇の人 |
|
A−J I−H
/ \ / \ B X−Y G \ / \ / C−D E−F H(水平反転)、V(垂直反転)、R(180度回転)で移りあう頂点の関係に注目して 10頂点をグループ分けして考える。 A2=H(A1),A3=R(A1),A4=V(A1) B2=H(B1),B3=R(B1),B4=V(B1) C2=H(C1),C3=R(C1),C4=V(C1) A1−B1 B2−A2 / \ / \ C4=C1 X−Y C2=C3 \ / \ / A4−B4 B3−A3 そして、Ei=(Ai,Bi)とすると、各Eiは2*2=4通りの塗り分けパターンが存在する。 (r,r)、(r,g)、(g,r)、(g,g) そこで、以下3種のcaseについてそれぞれパターンの組み合わせ数を数え上げる。 case1 この場合、H,V,Rの各変換で移りあうものは同じとして数える。 E1−E2 / \ r−X Y−r \ / E4−E3 {Ei}が1パターン含む時:C(4,1)*1=4 {Ei}が2パターン含む時:C(4,2)*5=30 {Ei}が3パターン含む時:C(4,3)*3*3=36 {Ei}が4パターン含む時:C(4,4)*6=6 ----------------------------------------- 計76通り。 case2 E1−E2 / \ g−X Y−g \ / E4−E3 この場合、H,V,Rの各変換で移りあうものは同じとして数える。 同様にして、76通り case3 この場合、V変換で移りあうものは同じとして数える。 E1−E2 / \ r−X Y−g \ / E4−E3 {Ei}が1パターン含む時:C(4,1)*1=4 {Ei}が2パターン含む時:C(4,2)*8=48 {Ei}が3パターン含む時:C(4,3)*3*6=72 {Ei}が4パターン含む時:C(4,4)*12=12 ----------------------------------------- 計136通り。 合計して、76+76+136=288通り// ※なお、以下の場合を数えないのは、H変換すれば、case3のどれかになるから。 E1−E2 / \ g−X Y−r \ / E4−E3 |
|
11月5日(土) 0:54:34
45489 |
|
紫の薔薇の人 |
|
using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sansu995 { /* A−J I−H / \ / \ B X−Y G \ / \ / C−D E−F */ public class Figure995 { public int a; public int b; public int c; public int d; public int e; public int f; public int g; public int h; public int i; public int j; public Figure995(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f; this.g = g; this.h = h; this.i = i; this.j = j; } public Figure995(): this(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) { } public Figure995 H(Figure995 x) { return new Figure995(x.h,x.g,x.f,x.e,x.d,x.c,x.b,x.a,x.j,x.i); } public Figure995 V(Figure995 x) { return new Figure995(x.c, x.b, x.a, x.j, x.i, x.h, x.g, x.f, x.e, x.d); } public Figure995 R(Figure995 x) { return new Figure995(x.f, x.g, x.h, x.i, x.j, x.a, x.b, x.c, x.d, x.e); } public string str(Figure995 x) { return string.Format("({0} {1} {2} {3} {4} {5} {6} {7} {8} {9})", x.a, x.b, x.c, x.d, x.e, x.f, x.g, x.h, x.i, x.j); } public override String ToString() { return str(this); } } class Figure995EqualityComparer : IEqualityComparer<Figure995> { public bool Equals(Figure995 b1, Figure995 b2) { if (b2 == null && b1 == null) return true; else if (b1 == null | b2 == null) return false; else if ( b1.a == b2.a && b1.b == b2.b && b1.c == b2.c && b1.d == b2.d && b1.e == b2.e && b1.f == b2.f && b1.g == b2.g && b1.h == b2.h && b1.i == b2.i && b1.j == b2.j ) return true; else return false; } public int GetHashCode(Figure995 bx) { int hCode = bx.a << 9 + bx.b << 8 + bx.c << 7 + bx.d << 6 + bx.e << 5 + bx.f << 4 + bx.g << 3 + bx.h << 2 + bx.i << 1 + bx.j; return hCode; } } class Program { static void Main(string[] args) { Figure995EqualityComparer figure995EqC = new Figure995EqualityComparer(); // HashSetクラスによるFigure995テーブル HashSet<Figure995> hsTable = new HashSet<Figure995>(figure995EqC); for (int a = 0; a < 2; a++) for (int b = 0; b < 2; b++) for (int c = 0; c < 2; c++) for (int d = 0; d < 2; d++) for (int e = 0; e < 2; e++) for (int f = 0; f < 2; f++) for (int g = 0; g < 2; g++) for (int h = 0; h < 2; h++) for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) { Figure995 pattern0 = new Figure995(a, b, c, d, e, f, g, h, i, j); if (hsTable.Contains(pattern0)) { continue; } Figure995 pattern1 = pattern0.H(pattern0); if (hsTable.Contains(pattern1)) { continue; } pattern1 = pattern0.V(pattern0); if (hsTable.Contains(pattern1)) { continue; } pattern1 = pattern0.R(pattern0); if (hsTable.Contains(pattern1)) { continue; } // Figure995を追加。未登録なら表示 if (hsTable.Add(pattern0)) { Console.WriteLine("{0:D4}:{1}", hsTable.Count, pattern0.ToString()); } } Console.WriteLine("Total pattern number: {0:D4}", hsTable.Count); } } } |
|
11月5日(土) 0:55:45
45490 |
|
紫の薔薇の人 |
|
#45489が崩れちゃったので再投稿。
A−J I−H / \ / \ B X−Y G \ / \ / C−D E−F H(水平反転)、V(垂直反転)、R(180度回転)で移りあう頂点の関係に注目して 10頂点をグループ分けして考える。 A2=H(A1),A3=R(A1),A4=V(A1) B2=H(B1),B3=R(B1),B4=V(B1) C2=H(C1),C3=R(C1),C4=V(C1) A1−B1 B2−A2 / \ / \ C4=C1 X−Y C2=C3 \ / \ / A4−B4 B3−A3 そして、Ei=(Ai,Bi)とすると、各Eiは2*2=4通りの塗り分けパターンが存在する。 (r,r)、(r,g)、(g,r)、(g,g) そこで、以下3種のcaseについてそれぞれパターンの組み合わせ数を数え上げる。 case1 この場合、H,V,Rの各変換で移りあうものは同じとして数える。 E1−E2 / \ r−X Y−r \ / E4−E3 {Ei}が1パターン含む時:C(4,1)*1=4 {Ei}が2パターン含む時:C(4,2)*5=30 {Ei}が3パターン含む時:C(4,3)*3*3=36 {Ei}が4パターン含む時:C(4,4)*6=6 ----------------------------------------- 計76通り。 case2 E1−E2 / \ g−X Y−g \ / E4−E3 この場合、H,V,Rの各変換で移りあうものは同じとして数える。 同様にして、76通り case3 この場合、V変換で移りあうものは同じとして数える。 E1−E2 / \ r−X Y−g \ / E4−E3 {Ei}が1パターン含む時:C(4,1)*1=4 {Ei}が2パターン含む時:C(4,2)*8=48 {Ei}が3パターン含む時:C(4,3)*3*6=72 {Ei}が4パターン含む時:C(4,4)*12=12 ----------------------------------------- 計136通り。 合計して、76+76+136=288通り// ※なお、以下の場合を数えないのは、H変換すれば、case3のどれかになるから。 E1−E2 / \ g−X Y−r \ / E4−E3 |
|
11月5日(土) 1:00:38
45491 |
|
vbscript |
|
' 2--1 6--7
' / ` / ` '3 -- 8 ' ` / ` / ' 4--5 10--9 R:1,G:2 dim a(10),b(1000) a(0)=0 call saiki(1,a,b,d) msgbox a(0) sub saiki(n,a(),b(),d) a(n)=1 while a(n)<=2 if n<10 then call saiki(n+1,a,b,d) else b(0)="" for j=1 to 10 b(0)=b(0)&c(a(j)) next deta=0 j=1 while deta=0 and j<=a(0) jj=1 while deta=0 and jj<=3 select case jj case 1'上下 bb=c(a(5))&c(a(4))&c(a(3))&c(a(2))&c(a(1))&c(a(10))&c(a(9))&c(a(8))&c(a(7))&c(a(6)) case 2'左右 bb=c(a(6))&c(a(7))&c(a(8))&c(a(9))&c(a(10))&c(a(1))&c(a(2))&c(a(3))&c(a(4))&c(a(5)) case else'回転 bb=c(a(10))&c(a(9))&c(a(8))&c(a(7))&c(a(6))&c(a(5))&c(a(4))&c(a(3))&c(a(2))&c(a(1)) end select if b(j)=bb then deta=1 else jj=jj+1 end if wend j=j+1 wend if deta=0 then a(0)=a(0)+1 b(a(0))=b(0) 'input #1,b(a(0)) end if end if a(n)=a(n)+1 wend end sub function c(n) if n=1 then c="R" else c="G" end if end function |
|
11月5日(土) 9:33:42
45492 |
|
今年から高齢者 |
|
場合分けして求めたのですが、左-右=2-2は60個を全部書き出して上下・左右・回転で同じになるものを省きました。
#45484はなんでそうなるの?と判りませんでしたが、#45486の説明もあり私なりに理解しました。 ベン図の 2^10の中に、上下反転・左右反転・回転の3つの群があるので、 ベン図からこれらを引っぺがして(2^10に加えてやる)と4で割れるようになる−ということでしょうか。 |
|
11月5日(土) 15:08:57
45494 |
|
uchinyan |
|
うへ,一気にプログラムが増えましたね。
実は書き込みがなかったらと思って以前に組んだプログラムがあるのですが,一応,私も書き込んでおこうかな。 十進ベーシックです。 FOR n = 0 TO 1023 LET LR = 0 FOR i = 1 TO 10 LET LR = LR * 2 + MOD(INT(n/2^(i-1)),2) NEXT i LET UD = 0 FOR i = 1 TO 5 LET UD = UD * 2 + (MOD(INT(n/2^(i+4)),2) * 2^5 + MOD(INT(n/2^(i-1)),2)) NEXT i LET R = MOD(n,2^5) * 2^5 + INT(n/2^5) IF (n <= LR) AND (n <= UD) AND (n <= R) THEN LET cnt = cnt + 1 END IF NEXT n PRINT cnt END |
|
11月6日(日) 17:05:31
45495 |
|
紫の薔薇の人 |
|
>うへ,一気にプログラムが増えましたね。
何回も見落としたり、計算違いして不正解ではじかれると、とりあえず、プログラムで正解確認してから、後付けで説明考えるかという気になります。 |
|
11月5日(土) 20:46:09
45496 |
|
今年から高齢者 |
|
プログラムが増えましたが、どれを読んでもよく解りません。読めると言っても十進ベーシック初歩くらいですが。
こういう複雑な問題を、どういうロジックをたててプログラムされるのでしょう。プログラム自身より、その考え方が知りたいですね。 |
|
11月6日(日) 7:58:03
45497 |
|
しんちゃん |
|
#45497 今年から高齢者さま
十進ベーシックの初心者です。 私の場合の基本的な手順をご紹介いたします。 10個点の色を0か1の数字に置き換え、各点の数字を10ケタの数字の各位の数に対応させて1024通りの数を作ります。 次に1番目の数に着目し必要な位の数字を入れ替えることで、左右対称、上下対称、点対称なパターンに対応する3つの数字をつくって2番目以降の数と比較します。対象移動で出来た数と同じならば、比較した2番目以降の数字にチェックを入れます。 同様に2番目の数に着目して左右対称、上下対称、点対称なパターンに対応する3つの数字をつくり3番目以降の数と比較しで、同じならチェクを入れます。 以下チェックの入った数はパスしながら同様の操作を1023番目の数まで繰り返します。 最後にチェックの入っていない数の個数を数えます。 |
|
11月6日(日) 12:28:38
45498 |
|
にゃもー君 |
|
こんにちは。
今回は本当に苦戦しました。 仕事と外出・睡眠・家事以外を、この問題を解くのに費やしました。 対称性を用いつつ、いくつかのパターンに分類したのですが、 中々答えが合わず、ついさっき、ようやく正解。 (これも偶然かもしれないが・・・) #45484さんの解法をはじめ、皆さんの素晴らしい解き方を 勉強させていただきたいと思います。 自分は、右端左端の粘土を(同じ色・異なる色)で場合分けしたうえで 真ん中の8個の粘土の色分けを考え、それぞれ 「8個について、上下対称になるか、左右対称になるか」で場合分けしました。 1)上下対称〇 左右対称〇 ⇒ 4通り ⇒右左の粘土の色のパターンが (赤赤・緑緑・赤緑(=緑赤))3通りで決まる。 ⇒3×4=【12】 2)上下対称〇 左右対称× ⇒ 12通り ⇒右左の粘土の色のパターンが 赤赤の場合⇒8個の粘土について、12通り中2つ重複 ⇒6通り 緑緑 ⇒同様に6通り 赤緑・緑赤 ⇒12×2の中に2つ重複⇒12通り ⇒ 6+6+12=【24】 3)上下対称× 左右対称〇 ⇒ 12通り ⇒右左の粘土の色のパターンが (赤赤・緑緑・赤緑(=緑赤))3通りだが、それぞれ2つ重複がある ⇒12×3÷2=【18】 4−1)上下対称× 左右対称×(回転したら同じもの) ⇒ 12通り ⇒右左の粘土の色のパターンが (赤赤・緑緑・赤緑(=緑赤))3通りだが、それぞれ2つ重複がある ⇒12×3÷2=【18】 4−2)上下対称× 左右対称×(回転したら別物) ⇒216通り ⇒右左の粘土の色のパターンが (赤赤・緑緑・赤緑・緑赤)4通りだが、それぞれの場合において 上下反転・左右反転・回転をしたら、合計4種類の別の組み合わせができる。 ⇒よって、左右の粘土のパターンごとに、真ん中の8個の粘土は4つ重複 ⇒216÷4×4=【216】 1)〜4−2) の合計 288通り と、なりました。 以上 |
|
さいたま市浦和区(自称)
11月6日(日) 14:14:21
45499 |
|
uchinyan |
|
#45497 今年から高齢者さんへ
私の#45495のプログラムのアルゴリズムも#45498と基本的には同じです。 ただ,若干の工夫をしています。 まず,0 と 1 のパターンを 0 〜 1023 の2進数表記と考え, しかも2進数表記をすることなく対応する対称移動操作を10進数表記のまま行っています。 LR,UD,R の部分です。 次に,これらの1つでも元の数 n より小さくなったらすでにチェック済みなので飛ばし, そうでないものだけをカウントします。これが対称移動操作で同じになるかのチェックです。 今回はパターンの個数だけを求めればいいのでこうしました。 こうした工夫で,プログラムがスッキリし処理も速くなります。 |
|
11月6日(日) 17:25:45
45500 |
|
鯨鯢(Keigei) |
|
十進BASICで組んでみたのを改良しました。
FUNCTION P(x,y) LET z=bitand(x,y) LET p=y IF z>0 AND z<x THEN LET P=bitxor(x,y) END FUNCTION LET count=1024 FOR a=0 TO 1023 IF P(10,P(17,P(320,P(544,a))))<a OR P(48,P(72,P(132,P(258,P(513,a)))))<a OR P(33,P(66,P(132,P(264,P(528,a)))))<a THEN LET count=count-1 NEXT a PRINT count END |
|
11月6日(日) 21:38:56
45501 |
|
今年から高齢者 |
|
しんちゃんさん、uchinyanさん、早速の返事ありがとうございます。
これから読んで勉強させていただきます。 |
|
11月6日(日) 23:20:01
45502 |
|
「数学」小旅行 |
|
#45473 の補足説明をします。
もうすでに皆様の解説に出ていて、重複しているかもしれませんが、あまりにも簡素だったと反省の意味で書かせて下さいね。 数珠順列の数え方と同じだということは、つまり以下の通りです。 対称性のある並びは裏返しても同じなので一通りと数えて、対称性のない並びは裏返すと別の並びと重なるので2通りを一通りと数える、という数え方をするということです。 今回の問題で、左側をA、右側をBとして考えます。 A、Bそれぞれが上下対称であるときと非対称であるときを場合分けして、 (あ)Aが上下対称でBも上下対称 (い)Aが上下対称でBは非対称(Aが非対称でBは上下対称は回転により同じ) (う)Aが非対称でBも非対称 (あ)のとき、A、Bが同じ場合は8通り A、Bが違うとき回転により2通りができるので、(8・8ー8)/2=28通り (い)のとき、回転では重なりはないので、上下対称の2通りが重複しているだけで8・24/2=96通り (う)のとき、これは少々注意が必要ですね。 A、Bが同じ場合は裏返しで2通りが重複するので、24/2=12通り A、Bが同じでないとき、2通りが重複する場合と4通りが重複する場合があります! A、Bが点対称なときは裏返しにより2通りが重複で、それ以外は回転と裏返しにより4通りが重複して出て来ます。よって、(24・24ー24ー24)/4+24/2=144通り 以上3つの場合を合計して、答えが出ました。 私も最初は、(う)の点対称な並びを考え落としていて悩みましたよ。 |
|
11月7日(月) 7:45:32
45503 |
|
通りすがりの中1 |
|
今回は諸事情により暫く来れませんでした。次回はこの無念を晴らしたいです。
さて、今回は僕の苦手な場合分けでした。 正解率もかなり低く、自分も悩みました。 算オリに出てきてもおかしくないレベルかな?? |
|
算数王国
11月7日(月) 18:55:34
HomePage:僕の人生奮闘記 45504 |
|
kyorofumi |
|
#45483
問題を見た時、立方体の頂点に3色の色を塗る方法は何通りあるか、という問題を思い出しました。その時に習った、burnside's theorem(変換で重複度を求めて解く方法)を用いて解きましたが、左右+上下変換が回転と一致することには気づきませんでした。群論を勉強したことがなく、定理を知っているだけで、理解しているわけではないので、なぜ答えが一致したかはよくわかりません。前々回のdesign理論も、理解したいのですが、今のところ時間が取れずにいます… 遅くなりましたが、uchinyanさんお誕生日おめでとうございます。私が子供の頃にweb pageを作って問題を公開していた時に、毎回解いてくださっていたことを今でも覚えています。ずっと、紙とペンなしで問題を解いていらっしゃるのでしょうか。その、頭の容量の大きさに敬服いています。これからも末永き活躍を期待しております。 |
|
11月7日(月) 20:48:35
45505 |
|
uchinyan |
|
#45505
やはり,kyorofumiさん は きょろ文さん,だったんですね。 以前は図形のいろいろな問題をありがとうございました。楽しく解けてしかも勉強になりました。 あの頃はまだ頑張れば何とか鉛筆を握って文字や図を書けたのですがかなり辛く, 当時から少しずつ頭の中だけで解く癖をつけていったように思います。 さて,Burnside's theorem ですが,立方体の話を聞いて私も思い出しました。 そういう議論がありましたね。この掲示板だったかも知れないな,と思います。 私も大学では物理専攻だったので,群論は表現論を少しかじった程度で証明とかはできませんが, Wikipediaに載っている証明を見る限りではすごく自明なことのようにも見えます。 まぁ,ウソかも (^^; いずれにせよ便利な方法で,覚えておいて損はないですね。 そうそう,こうした目で見ると,#45484の解法はもろにこれを使っているようにも見えます。 #45479では重複度をベースにした私なりの解釈を書きましたが, #45484を書かれた lakeさん は, Burnside's theorem を知っていてそれを使われたのかも知れませんね。 |
|
11月8日(火) 15:13:10
45506 |
|
Mr.ダンディ |
|
今回は苦労し、初参加以来の連続正解が途切れる大きなピンチでした。
なんとか解いた計算式は下記のようなものです(既出だと思いますが とりあえず足跡を残しておきます) 2^10=1024通りのうち �〆険β仂里里發痢ΑΑ�2^5=32(通り) �⊂絏実仂里里發痢ΑΑ�2^6=64(通り) �2鹽召気擦篤韻犬砲覆襪發痢Α�2^5=32(通り) これらのうち� 銑�に共通するもの・・・8通り よって 1024-(64+32+32+24-8*29)=912 (32-8)/2+(64-8)/2+(32-8)/2+8+912/4=288 (今回は己の頭の堅さを痛感いたしました・・・年齢のせいにしておこう) |
|
11月8日(火) 15:53:46
45507 |
|
通りすがりの中1 |
|
今回はお休みですか。
ならば算チャレもどきをどうぞw 問:一桁の整数、二桁の整数、三桁の整数、四桁の整数をそれぞれ一つずつ掛け合わせて出来る回文数の中で、その各桁の数の和が最も少なくなるようなものを一つ求め、そのときの掛け合わせた整数の組を一組答えて下さい。(勿論、算数なので整数とは自然数のことです。) |
|
算数王国
11月10日(木) 0:23:31
HomePage:僕の人生奮闘記 45508 |
|
スモークマン |
|
#45508 通りすがりの中1さんの問題
考えてみましたっていうか... 見つけたって感じ ^^; 100010001=1*3*7*13*37*9901 だから...適当に積を作れば1桁*2桁*3桁*9901 にできますね ^^ 100000001,10000001,1000001は満たさない... |
|
11月10日(木) 23:44:37
45509 |
|
通りすがりの中1 |
|
正解です!
自分が予想していたものと全く同じでした^^ |
|
算数王国
11月12日(土) 10:31:26
HomePage:僕の人生奮闘記 45511 |
|
Mr.ダンディ |
|
#45508スモークマンさんと同じようになりました。
「その各桁の数の和が2番目に少なくなるようなもの」であれば 11000011=1*11*101*9901(和が4)など でしょうか。 |
|
11月12日(土) 22:37:43
45512 |
|
名前 |
| 前回の11月3日の問題は簡単だったので、もしかして今夜は難問? |
|
11月16日(水) 23:58:38
45513 |