ベルク・カッツェ |
数字を入れてみて当てはまるものが4通り。
色を当てはめてみたら、3通りは不可能。 残る1通りについての色の当てはめ方が2通り。 答えは2通りになりました。 今日も寝不足なのでもう寝ます。 |
8月25日(木) 0:43:50
51776 |
「数学」小旅行 |
描いてみるしか手はないのか。
往生しました。 たぶん、最も下手なプログラムです。 a=[] a[1]=[[1,1],[2,2],[3,3],[4,4]] a[2]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==2&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[3]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==3&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[4]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==4&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a for i in (0..a[2].count-1) for j in (0..a[3].count-1) for k in (0..a[4].count-1) if [a[1][0][1],a[2][i][0][1],a[3][j][0][1],a[4][k][0][1]].uniq.count==4 && [a[1][1][0],a[2][i][1][0],a[3][j][1][0],a[4][k][1][0]].uniq.count==4 && [a[1][1][1],a[2][i][1][1],a[3][j][1][1],a[4][k][1][1]].uniq.count==4 && [a[1][2][0],a[2][i][2][0],a[3][j][2][0],a[4][k][2][0]].uniq.count==4 && [a[1][2][1],a[2][i][2][1],a[3][j][2][1],a[4][k][2][1]].uniq.count==4 && [a[1][3][0],a[2][i][3][0],a[3][j][3][0],a[4][k][3][0]].uniq.count==4 && [a[1][3][1],a[2][i][3][1],a[3][j][3][1],a[4][k][3][1]].uniq.count==4 && (a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 then p '' p a[1] p a[2][i] p a[3][j] p a[4][k] end end end end このなかで、(a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 を失念していて、8通りだと盲信していました。 |
8月25日(木) 13:34:00
51777 |
「数学」小旅行 |
描いてみるしか手はないのか。
往生しました。 たぶん、最も下手なプログラムです。 a=[] a[1]=[[1,1],[2,2],[3,3],[4,4]] a[2]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==2&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[3]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==3&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[4]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==4&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a for i in (0..a[2].count-1) for j in (0..a[3].count-1) for k in (0..a[4].count-1) if [a[1][0][1],a[2][i][0][1],a[3][j][0][1],a[4][k][0][1]].uniq.count==4 && [a[1][1][0],a[2][i][1][0],a[3][j][1][0],a[4][k][1][0]].uniq.count==4 && [a[1][1][1],a[2][i][1][1],a[3][j][1][1],a[4][k][1][1]].uniq.count==4 && [a[1][2][0],a[2][i][2][0],a[3][j][2][0],a[4][k][2][0]].uniq.count==4 && [a[1][2][1],a[2][i][2][1],a[3][j][2][1],a[4][k][2][1]].uniq.count==4 && [a[1][3][0],a[2][i][3][0],a[3][j][3][0],a[4][k][3][0]].uniq.count==4 && [a[1][3][1],a[2][i][3][1],a[3][j][3][1],a[4][k][3][1]].uniq.count==4 && (a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 then p '' p a[1] p a[2][i] p a[3][j] p a[4][k] end end end end このなかで、(a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 を失念していて、8通りだと盲信していました。 |
8月25日(木) 13:34:00
51778 |
「数学」小旅行 |
描いてみるしか手はないのか。
往生しました。 たぶん、最も下手なプログラムです。 a=[] a[1]=[[1,1],[2,2],[3,3],[4,4]] a[2]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==2&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[3]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==3&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a a[4]=(1..4).to_a.permutation(2).to_a.permutation(4).to_a.select{|x|x[0][0]==4&&[x[0][0],x[1][0],x[2][0],x[3][0]].uniq.count==4&&[x[0][1],x[1][1],x[2][1],x[3][1]].uniq.count==4}.to_a for i in (0..a[2].count-1) for j in (0..a[3].count-1) for k in (0..a[4].count-1) if [a[1][0][1],a[2][i][0][1],a[3][j][0][1],a[4][k][0][1]].uniq.count==4 && [a[1][1][0],a[2][i][1][0],a[3][j][1][0],a[4][k][1][0]].uniq.count==4 && [a[1][1][1],a[2][i][1][1],a[3][j][1][1],a[4][k][1][1]].uniq.count==4 && [a[1][2][0],a[2][i][2][0],a[3][j][2][0],a[4][k][2][0]].uniq.count==4 && [a[1][2][1],a[2][i][2][1],a[3][j][2][1],a[4][k][2][1]].uniq.count==4 && [a[1][3][0],a[2][i][3][0],a[3][j][3][0],a[4][k][3][0]].uniq.count==4 && [a[1][3][1],a[2][i][3][1],a[3][j][3][1],a[4][k][3][1]].uniq.count==4 && (a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 then p '' p a[1] p a[2][i] p a[3][j] p a[4][k] end end end end このなかで、(a[1]+a[2][i]+a[3][j]+a[4][k]).uniq.count==16 を失念していて、8通りだと盲信していました。 |
8月25日(木) 13:34:01
51779 |
「数学」小旅行 |
このごろマウスの調子が変で、ワンクリックがスリークリックになったみたいです。大変お見苦しくいことになりました。申し訳ございません。 |
8月25日(木) 14:29:14
51780 |
まるケン |
トランプのA、2,3,4を並べて試行錯誤、、、と思ったけどトランプが見つからず。
小さな紙片に4色のペンで数字を書いて試行錯誤。 もっとありそうなのに2通りしかないのって、ちょっとした驚きでした。 興味本位で一般化。 1色1枚の場合はそれを置くだけなので1通り。 2色だと解なし。 3色だと1通り。 で今回の4色は2通り。 rubyで検算しのを改造して、さらに大きな数で。 5色は18通り。 6色は解なし。 7色は解、、、あるのですが、まだ数え切れていません。 マサルさんの数値設定、相変わらず絶妙ですね。 5色25枚だったらお手上げでした。 |
8月26日(金) 19:09:57
MAIL:take4310@mobile.email.ne.jp 51781 |
まるケン |
しらみつぶしなアルゴリズムだと、一晩かけても数え切れていませんでした。
とりあえず1000通り以上はあることだけご報告いたします。 |
8月27日(土) 7:42:48
MAIL:take4310@mobile.email.ne.jp 51782 |
いちごみるく |
何回考えても6912になると思ったら条件5,6がありました。。 |
9月1日(木) 0:29:33
51783 |
まるケン |
#51783
出題期間が延長したので、ルール5、ルール6を外した問題を考えていました。 今回の正解をベースに逆算すると、 ルール5のうち、色の条件を外すと24倍、 数字の並びの条件も外すとさらに24倍、 ルール6、縦の1列目の数字(1行目を除いた3つ)の順番を変えてさらに6倍。 2×24×24×6で同じ答えが出ました。 |
9月2日(金) 18:00:43
MAIL:take4310@mobile.email.ne.jp 51784 |
うろん |
4進法表示で00〜33を使って魔方陣をつくる
ルールより、各行、列には一の位と四の位に 0〜3までの数字が丁度1つずつ入る 00 11 22 33 x1 x2 x3 まで確定 左の列は2通りしかないことはすぐにわかるので、 それぞれの場合を考える 00 11 22 33 21 A 32 13 Aを含む行について考える 一の位が3である数は13と33が使われているので、 03と23しかなく、同じ行に21を含むので、03しかない 同様に、一の位が2である数は02と12しかなく、 同じ行に03を含むことから、12と決まる よって、残りの1つは30である 次に、Aを含む列についても同様に考えると、 02、23、30を含むことがわかる これより、Aが30と決まり、 ここから1通りに定まることは難しくない 00 11 22 33 31 12 23 についても同様 以上より、2通り などと考えてみたものの、 特に簡単になっているわけでもなく。。。 |
9月4日(日) 19:52:48
51785 |
「数学」小旅行 |
以前にも、ナンプレの解を求めるプログラムを作ったのですが、再考しました。
$n=9 $n2=$n**2 $a=[0,2,0,0,0,0,0,7,0, 1,9,0,5,0,7,0,3,8, 3,0,0,0,6,0,0,0,1, 0,8,0,3,0,9,0,2,0, 0,0,0,0,0,0,0,0,0, 0,4,0,0,0,0,0,6,0, 0,5,0,1,8,3,0,9,0, 0,0,0,0,0,0,0,0,0, 7,0,8,0,0,0,4,0,5] #問題で、数字が入っていないところは0にします。 def s(k) r=(k/3%3)*3+(k/9/3)*27 if k<$n2 then if $a[k]==0 then for m in 1..$n t=false t=t||(m==$a[r])||(m==$a[r+1])||(m==$a[r+2])||(m==$a[r+9])||(m==$a[r+10])|| (m==$a[r+11])||(m==$a[r+18])||(m==$a[r+19])||(m==$a[r+20]) if !t then for i in (0..$n-1) t=t||(m==$a[k/$n*$n+i])||(m==$a[i*$n+k%$n]) end end if !t then $a[k]=m;s(k+1);$a[k]=0 end end else s(k+1) end else p $a end end #再帰呼び出しで解が見つかったら出力します。 s(0) |
9月5日(月) 9:51:16
51786 |
「数学」小旅行 |
ルール5,6がなかったら、で、
29行目のアドレス渡し対策が肝でした。 $n=4 $n2=$n**2 a=Array.new($n**2,0) b=Array.new($n**2,0)#初期条件をなしにしたもの as=Array.new() bs=Array.new() def e(h,k,m) #k番目にmを入れられるか。True or False t=false for i in (0..$n-1) t=t||(m==h[k/$n*$n+i]) t=t||(m==h[i*$n+k%$n]) end t end def s(h,k,l) if k<$n2 then if h[k]==0 then for m in 1..$n if !e(h,k,m) then h[k]=m;s(h,k+1,l);h[k]=0 end end else s(h,k+1,l) end else buf=h.map{|x|x}#アドレス渡し対策 l.push(buf) $c+=1 end end ti=Time.now $c=0#数の入れ方すべてをasに保存 s(a,0,as) ac=$c $c=0#色の付け方すべてをbsに保存 s(b,0,bs) bc=$c $c=0 for i in 0..ac-1#色と番号のセットがすべて異なるものを数える for j in 0..bc-1 if [as[i],bs[j]].transpose.uniq.count==$n2 then $c+=1 end end end p $c p Time.now-ti |
9月5日(月) 16:08:38
51787 |