吉川 マサル
完全なるパクリなのですが、解けた小学生が、「俺、すごいかも」と思ってくれればということで...
MBP   2月27日(木) 0:13:43   HomePage:算チャレ  48798
吉川 マサル
文字化け問題、金曜日に対処します。(明日はまだ、後期医学部の直線対策がありまして...m(__)m)
MBP   2月27日(木) 0:15:06   HomePage:算チャレ  48799
ベルク・カッツェ
Pが角ACBの内側にあるとき、四角形APBCの面積が1.5以上2以下なので、底辺をABとしたときの三角形PABの高さが三角形CABの0.5倍から1倍になる範囲で、2×2-1.5×1.5=1.75になります。
Pが角ACBの対頂角の内側にあるとき、底辺をABとしたときの三角形PABの高さが三角形CABの高さの1.5倍から2倍になればいいので、範囲は1×1-0.5×0.5=0.75になります。
それぞれ3方向に同様の図ができるので(1.75+0.75)×3=7.5になりました。
   2月27日(木) 0:16:49     48800
量子論
初のベスト10入りが、名前の入力ミス。
これも記念とします。

各辺を伸ばし、さらに各辺の平行線をひいて
6角形にしました。面積を2cm2から3cm2の範囲に
絞るには相似を使いました。
   2月27日(木) 0:29:31     48801
限界bot
初書き込みです。
もしかして、今年の東大理系数学第2問と同じ問題ですか?
   2月27日(木) 0:45:03     48802
今年から高齢者
問題をよく読まず、図をみて、三角形2つの和で計算していた。
   2月27日(木) 0:45:23     48803
限界bot
初書き込みです。
もしかして、今年の東大理系数学第2問と同じ問題ですか?
   2月27日(木) 0:47:23     48804
紫の薔薇の人
平面を直線AB、BC、CAで区切られる7つの領域に分け、Pが各領域を動くとき、
いつ条件を満たすかを考えます。

まず、Pを△ABCの内部に取ると、面積和は1になってしまうので該当しません。

次に、PをCAをAの外に延長した直線上にとると、条件を満たすのは、
延長幅がCAの1/2倍の点Qから1倍の点Dの範囲(線分QD)と分かります。

次に、PをQD上にとり、ABに平行に移動させても、面積和は変わりません。
次に、PをQD上にとり、BCに平行に移動させても、面積和は変わりません。

このことから、

CAをAの外にCAの1/2倍だけ延長した点をQ、CAの1倍だけ延長した点をD
CBをBの外にCBの1/2倍だけ延長した点をR、CBの1倍だけ延長した点をE
ABをBの外にABの1/2倍だけ延長した点をS、ABの1倍だけ延長した点をF
ACをCの外にACの1/2倍だけ延長した点をT、ACの1倍だけ延長した点をG
BCをCの外にBCの1/2倍だけ延長した点をU、BCの1倍だけ延長した点をH
BAをAの外にBAの1/2倍だけ延長した点をV、BAの1倍だけ延長した点をI

とすると、各辺が△ABCの辺と平行な2つの6角形QRSTUVと、
DEFGHIに挟まれた領域が求める領域になります。
(4-9/4)*3+(1-1/4)*3=15/2
   2月27日(木) 0:51:27     48805
量子論
うわー! ほんと、同じですわ。限界botさん
これを今日、ここで出題するマサルさん、感服しました。
   2月27日(木) 0:55:31     48806
紫の薔薇の人
#48805

>次に、PをQD上にとり、ABに平行に移動させても、面積和は変わりません。
>次に、PをQD上にとり、BCに平行に移動させても、面積和は変わりません。

直線で区切られた領域内で動かした場合

   2月27日(木) 0:59:32     48807
ベルク・カッツェ
東大の問題見てきました。まったく同じですね。

さっき書き忘れてましたが、・ル・〓ッ。 さんが私です。
   2月27日(木) 1:09:20     48808
にゃもー君
とりあえず暗算で解けて安心。
でも図を描かないで文で解き方を描くのは面倒。

ABとBCとACを延長して△ABCの外側を6つの領域に分けた。
6つの領域は、以下の�,��△吠�けられ、点Pがどちらに入るかを考える。
�\�分PCが線分AB・線分PBが線分AC・線分PAが線分BCと交わる場合(曖昧な言い方をすると、PとCが線分ABの対岸にある、みたいな)

�◆´,領琉莪奮�

�,両豺隋¬明僂蓮�7/4×3=21/4
�△両豺隋〔明僂蓮�3/4×3=9/4
あわせて 15/2
浦和   2月27日(木) 1:10:37   HomePage:アニメネタで入試問題を作って放置中のページ  48809
紫の薔薇の人
サ遉ホ鬯魃、ホソヘ さんが私です。

今の東大は初等幾何出るんですね。
   2月27日(木) 1:20:09     48810
吉川 マサル
はい、今年の東大(しかも理系!)です。思わず「あれ、文系のほうを印刷しちゃったかな」とか思ってしまいました。1.も文系範囲で解ける問題だったので...。

これを出題したのはただの手抜きですが、小学生にやってみてもらうのも良いかなーと思ったのも事実で。
MBP   2月27日(木) 1:43:31   HomePage:算チャレ  48811
「数学」小旅行
ぐるりんと回るのを失念してしまっていました。
   2月27日(木) 7:42:39     48812
CRYING DOLPHIN
三角格子を書いて考えました。これだと等積変形の様子が見やすかったです。
ttp://http://cdcdcd.sansu.org/pika/junkfoods/san1-q1125-2kara3ryoiki.png
(h抜き表記はもはやインターネット老人会の範疇か?)

これ今年の東大の問題なんですね!
麻布か灘第2日の問題としても通用しそうです。
顔上げた道の先   2月27日(木) 8:32:50   MAIL:ぴかー HomePage:ぴかぴかさんすう。  48813
せいちゃんだよ~~ん
これって本番では楽勝問題だったのだろうか?
今では初等幾何って大学入試レベルなのかね
竜田川の辺り   2月27日(木) 10:27:19     48814
baLLjugglermoka
最近算チャレを紙とペン使わず暗算でチャレンジしていますが、今回は暗算で間違えまくり何とか暗算で正解しました。え、東大理系の問題でしたか^^;でもフツーに算数で解ける問題でしたね。
   2月27日(木) 16:15:09     48815
スモークマン
みなさんと同じでした ^^

△の辺に関して...2^2-1.5^2=3.5*0.5=1.75=7/4
△の頂点側に関して...1*(1-1/4)=3/4
so...
(7/4+3/4)*3=(10/4)*3=30/4=15/2=7.5

解けたら気持ちいいですね♪
(図を描けたら)
   2月27日(木) 16:59:00     48816
Mr.ダンディ
図で「3隅?」の部分が不正確で 何回か誤答を送信しておりました。
(それほど難しくない割には苦戦しました)
   2月27日(木) 19:49:21     48817
Mr.ダンディ
#48817
>「図で「3隅?」の部分が不正確で」
というのは、わたしが描いた動く範囲での図でのことで、問題にある図でのこ
とではありません。
(誤解をうみそうなので 訂正しようとしたのですが、訂正ができないので 思って「断り」を入れました)
   2月27日(木) 23:50:09     48818
ゴンとも
今回の問題は東京大学の入試問題そのものだっとは驚きでした!!
京都大学の5番を十進Basic でやってみました!!

for a=1 to 4
for b=1 to 4
for c=1 to 4
for d=1 to 4
IF a*b*c*d<>24 or a+b+c+d<>10 then goto 130
for e=1 to 4
for f=1 to 4
for g=1 to 4
for h=1 to 4
IF e*f*g*h<>24 or e+f+g+h<>10 then goto 90
for i=1 to 4
for j=1 to 4
for k=1 to 4
for l=1 to 4
IF i*j*k*l<>24 or i+j+k+l<>10 then goto 50
for m=1 to 4
IF a*e*i*m<>24 or a+e+i+m<>10 then goto 40
for n=1 to 4
IF b*f*j*n<>24 or b+f+j+n<>10 then goto 30
for o=1 to 4
IF c*g*k*o<>24 or c+g+k+o<>10 then goto 20
for p=1 to 4
IF d*h*l*p<>24 or d+h+l+p<>10 then goto 10
IF m*n*o*p<>24 or m+n+o+p<>10 then goto 10
let s=s+1
10 next p
20 next o
30 next n
40 next m
50 next l
60 next k
70 next j
80 next i
90 next h
100 next g
110 next f
120 next e
130 next d
140 next c
150 next b
160 next a
print s
end

f9押して 576・・・・・・(答え)

問題見てプログラムを書いて10分で答えがでましたが
手でやるともっとサイズの大きいラテン方陣もできるのかな-?

豊川市   2月28日(金) 9:31:13   MAIL:fttnm528@ybb.ne.jp   48819
物理好き
軌跡か??と思ったら東大入試、そういう事だったんですね…
初等幾何、それも相似の知識だけで解けてしまうの、美しい
大阪府   2月28日(金) 19:04:42   MAIL:butsuri.0523@gmail.com HomePage:Twitter  48820
通りすがりの高一
東大理系の2番ですね。
最初、ABCPが凸四角形となる場合しか考慮しておらず、無限に範囲が広がる気がしていましたが、解けると非常にスッキリしました。良い問題だと思います。
   3月1日(日) 0:29:43     48821
通りすがりの高一
灘の2日目に出てきそうだという意見、とてもわかります。
   3月1日(日) 0:33:39     48822
物理好き
#48819
C言語にて、再帰を利用して、かつ、一番上の行を1 2 3 4 ... Nに固定して一番左の列を1 2 3 4 ... Nになるように並べ替えることを仮定したうえで最後に (N! * (N-1)!) を掛けるという方針で実装すると、N=7までは手元のPCでも充分高速(1分未満)に求められました

#include<stdio.h>

long long factorial(long long x){
long long i,r=1;
for(i=x;i>=1;i--){
r*=i;
}
return r;
}

long long n;
long long res=0;
long long row[16][16]={0},column[16][16]={0};
long long latin_sq[16][16];

void rec(long long a,long long b){
if(b==n){a++;b=0;}
if(a==n){res++;return;}
long long i;
for(i=1;i<=n;i++){
if(a==0 && b!=(i-1)){continue;}
if(b==0 && a!=(i-1)){continue;}
if(row[a][i]==1 || column[b][i]==1){continue;}
row[a][i]=1;column[b][i]=1;
latin_sq[a][b]=i;
rec(a,b+1);
row[a][i]=0;column[b][i]=0;
}
}

int main(){
scanf("%lld",&n);
rec(0,0);
printf("%lld\n",res*factorial(n)*factorial(n-1));
}

それ以上は組み合わせ爆発の例に使われるくらいには値が肥大化してしまいますね…
https://oeis.org/A002860
https://en.wikipedia.org/wiki/Combinatorial_explosion
大阪府   3月1日(日) 19:30:31   MAIL:butsuri.0523@gmail.com HomePage:Twitter  48823
にゃもー君
大学入試には算数みたいな問題も結構出るもんですね。

今年の一橋大学の入試に、算数の範囲で解けそうな問題がありました。
表現を算数で出せるように直しました。

 10を10回かけた数、すなわち10000000000を
 2020で割った余りは 〔� 佑任后�
 また、100桁の正の整数で、各位の和が2となるもののうち、
 2020で割り切れるものの個数は〔�◆佑任后�

(2020年中学受験は大体終わりなので、実際の中学受験で出題は無いでしょうけど…
あと、算数の範囲であれば、「正の」は不要?)
浦和   3月2日(月) 20:56:49   HomePage:アニメネタで入試問題を作って放置中のページ  48824
ゴンとも
#48823
物理好き さん レスありがとうございます。
組み合わせ爆発の典型例で11*11までぐらいで止まってるんですね。
7*7は自分でもやってみました!!
十進Basicで ラテン方陣を

(001)(002)(003)(004)(005)(006)(007)
(002)(a01)(a02)(a03)(a04)(a05)(a06)
(003)(a07)(a08)(a09)(a10)(a11)(a12)
(004)(a13)(a14)(a15)(a16)(a17)(a18)
(005)(a19)(a20)(a21)(a22)(a23)(a24)
(006)(a25)(a26)(a27)(a28)(a29)(a30)
(007)(a31)(a32)(a33)(a34)(a35)(a36)

としてa1,a36までの通り数を求め7!*6!かけると
7^2のラテン方陣の総数となる。

PRINT TIME$
for a1=1 to 7
if a1=2 then goto 360
for a2=1 to 7
if a2=a1 or a2=2 or a2=3 then goto 350
for a3=1 to 7
if a3=a1 or a3=a2 or a3=2 or a3=4 then goto 340
for a4=1 to 7
if a4=a1 or a4=a2 or a4=a3 or a4=2 or a4=5 then goto 330
for a5=1 to 7
if a5=a1 or a5=a2 or a5=a3 or a5=a4 or a5=2 or a5=6 then goto 320
for a6=1 to 6
if a6=2 then goto 310
if a6=a1 or a6=a2 or a6=a3 or a6=a4 or a6=a5 then goto 310
for a7=1 to 7
IF a7=a1 OR a7=3 OR a7=2 THEN GOTO 300
for a8=1 to 7
IF a8=a2 OR a8=a7 OR a8=3 THEN GOTO 290
for a9=1 to 7
IF a9=a3 OR a9=a7 OR a9=a8 OR a9=3 OR a9=4 THEN GOTO 280
for a10=1 to 7
IF a10=a4 OR a10=a7 OR a10=a8 OR a10=a9 OR a10=3 OR a10=5 THEN GOTO 270
for a11=1 to 7
IF a11=a5 OR a11=a7 OR a11=a8 OR a11=a9 OR a11=a10 OR a11=3 OR a11=6 THEN GOTO 260
for a12=1 to 6
IF a12=a6 OR a12=a7 OR a12=a8 OR a12=a9 OR a12=a10 OR a12=a11 OR a12=3 THEN GOTO 250
for a13=1 to 7
IF a13=a1 OR a13=a7 OR a13=4 OR a13=2 THEN GOTO 240
for a14=1 to 7
IF a14=a2 OR a14=a8 OR a14=a13 OR a14=4 OR a14=3 THEN GOTO 230
for a15=1 to 7
IF a15=a3 OR a15=a9 OR a15=a13 OR a15=a14 OR a15=4 THEN GOTO 220
for a16=1 to 7
IF a16=a4 OR a16=a10 OR a16=a13 OR a16=a14 OR a16=a15 OR a16=4 OR a16=5 THEN GOTO 210
for a17=1 to 7
IF a17=a5 OR a17=a11 OR a17=a13 OR a17=a14 OR a17=a15 OR a17=a16 OR a17=4 OR a17=6 THEN GOTO 200
for a18=1 to 6
IF a18=a6 OR a18=a12 OR a18=a13 OR a18=a14 OR a18=a15 OR a18=a16 OR a18=a17 OR a18=4 THEN GOTO 190
for a19=1 to 7
IF a19=a1 OR a19=a7 OR a19=a13 OR a19=5 OR a19=2 THEN GOTO 180
for a20=1 to 7
IF a20=a2 OR a20=a8 OR a20=a14 OR a20=a19 OR a20=5 OR a20=3 THEN GOTO 170
for a21=1 to 7
IF a21=a3 OR a21=a9 OR a21=a15 OR a21=a19 OR a21=a20 OR a21=5 OR a21=4 THEN GOTO 160
for a22=1 to 7
IF a22=a4 OR a22=a10 OR a22=a16 OR a22=a19 OR a22=a20 OR a22=a21 OR a22=5 THEN GOTO 150
for a23=1 to 7
IF a23=a5 OR a23=a11 OR a23=a17 OR a23=a19 OR a23=a20 OR a23=a21 OR a23=a22 OR a23=5 OR a23=6 THEN GOTO 140
for a24=1 to 6
IF a24=a6 OR a24=a12 OR a24=a18 OR a24=a19 OR a24=a20 OR a24=a21 OR a24=a22 OR a24=a23 OR a24=5 THEN GOTO 130
for a25=1 to 7
IF a25=a1 OR a25=a7 OR a25=a13 OR a25=a19 OR a25=6 OR a25=2 THEN GOTO 120
for a26=1 to 7
IF a26=a2 OR a26=a8 OR a26=a14 OR a26=a20 OR a26=a25 OR a26=6 OR a26=3 THEN GOTO 110
for a27=1 to 7
IF a27=a3 OR a27=a9 OR a27=a15 OR a27=a21 OR a27=a25 OR a27=a26 OR a27=6 OR a27=4 THEN GOTO 100
for a28=1 to 7
IF a28=a4 OR a28=a10 OR a28=a16 OR a28=a22 OR a28=a25 OR a28=a26 OR a28=a27 OR a28=6 OR a28=5 THEN GOTO 90
for a29=1 to 7
IF a29=a5 OR a29=a11 OR a29=a17 OR a29=a23 OR a29=a25 OR a29=a26 OR a29=a27 OR a29=a28 OR a29=6 THEN GOTO 80
for a30=1 to 5
IF a30=a6 OR a30=a12 OR a30=a18 OR a30=a24 OR a30=a25 OR a30=a26 OR a30=a27 OR a30=a28 OR a30=a29 THEN GOTO 70
for a31=1 to 6
IF a31=a1 OR a31=a7 OR a31=a13 OR a31=a19 OR a31=a25 OR a31=7 OR a31=2 THEN GOTO 60
for a32=1 to 6
IF a32=a2 OR a32=a8 OR a32=a14 OR a32=a20 OR a32=a26 OR a32=a31 OR a32=7 OR a32=3 THEN GOTO 50
for a33=1 to 6
IF a33=a3 OR a33=a9 OR a33=a15 OR a33=a21 OR a33=a27 OR a33=a31 OR a33=a32 OR a33=7 OR a33=4 THEN GOTO 40
for a34=1 to 6
IF a34=a4 OR a34=a10 OR a34=a16 OR a34=a22 OR a34=a28 OR a34=a31 OR a34=a32 OR a34=a33 OR a34=7 OR a34=5 THEN GOTO 30
for a35=1 to 6
IF a35=a5 OR a35=a11 OR a35=a17 OR a35=a23 OR a35=a29 OR a35=a31 OR a35=a32 OR a35=a33 OR a35=a34 OR a35=7 OR a35=6 THEN GOTO 20
for a36=1 to 6
IF a36=a6 OR a36=a12 OR a36=a18 OR a36=a24 OR a36=a30 OR a36=a31 OR a36=a32 OR a36=a33 OR a36=a34 OR a36=a35 THEN GOTO 10
let s=s+1
10 next a36
20 next a35
30 next a34
40 next a33
50 next a32
60 next a31
70 next a30
80 next a29
90 next a28
100 next a27
110 next a26
120 next a25
130 next a24
140 next a23
150 next a22
160 next a21
170 next a20
180 next a19
190 next a18
200 next a17
210 next a16
220 next a15
230 next a14
240 next a13
250 next a12
260 next a11
270 next a10
280 next a9
290 next a8
300 next a7
310 next a6
320 next a5
330 next a4
340 next a3
350 next a2
360 next a1
print s
PRINT TIME$
END

f9押して
22:21:00
16942080
22:44:19

より 16942080*7!*6!;
61479419904000・・・・・・(7*7のラテン方陣の答え)

実行時間が23分19秒というのも・・・
2011年の春モデルのaspire製5750G(製品名)
でcpuがcore i7の第2世代(sandy bridge)で・・・
2003のセレロンより同じプログラムで2.5倍くらい速かったんですけど・・・
C言語等のコンパイル言語でやり直したいところですね。
豊川市   3月2日(月) 23:04:52   MAIL:fttnm528@ybb.ne.jp   48825
ばち丸
灘中学の問題の方がよっぽどぴりっとしている。
友達と「灘中入試問題のできそこない」と言ってやった
   3月4日(水) 21:20:45     48826
「数学」小旅行
今週はお休みということですので、話題になっている京大の問題のプログラムを考えてみました。先日教えていただいたrubyを使っています。

4×4のとき、これはスタートしてほとんどすぐに出てきました。
# 算チャレ第1125回 京大問題編
row=Array.new();col=Array.new()
1.upto(5){|i|row[i-1]=[0,0,0,0,0];col[i-1]=[0,0,0,0,0]}
# 一行目を1から4、一列目も1から4にします。
1.upto(4){|i|row[1][i]=1;row[i][i]=1;col[1][i]=1;col[i][i]=1}
#countは適する方陣の個数です。
count=0
# 各要素を1から4にして、すべての場合を調べます。ただし、各行列で既に使われた数字は除外します。
1.upto(4){|a22|if row[2][a22]==0&&col[2][a22]==0 then row[2][a22]=1;col[2][a22]=1
1.upto(4){|a23|if row[2][a23]==0&&col[3][a23]==0 then row[2][a23]=1;col[3][a23]=1
1.upto(4){|a24|if row[2][a24]==0&&col[4][a24]==0 then row[2][a24]=1;col[4][a24]=1
1.upto(4){|a32|if row[3][a32]==0&&col[2][a32]==0 then row[3][a32]=1;col[2][a32]=1
1.upto(4){|a33|if row[3][a33]==0&&col[3][a33]==0 then row[3][a33]=1;col[3][a33]=1
1.upto(4){|a34|if row[3][a34]==0&&col[4][a34]==0 then row[3][a34]=1;col[4][a34]=1
1.upto(4){|a42|if row[4][a42]==0&&col[2][a42]==0 then row[4][a42]=1;col[2][a42]=1
1.upto(4){|a43|if row[4][a43]==0&&col[3][a43]==0 then row[4][a43]=1;col[3][a43]=1
1.upto(4){|a44|if row[4][a44]==0&&col[4][a44]==0 then count+=1
end}; row[4][a43]=0;col[3][a43]=0
end}; row[4][a42]=0;col[2][a42]=0
end}; row[3][a34]=0;col[4][a34]=0
end}; row[3][a33]=0;col[3][a33]=0
end}; row[3][a32]=0;col[2][a32]=0
end}; row[2][a24]=0;col[4][a24]=0
end}; row[2][a23]=0;col[3][a23]=0
end}; row[2][a22]=0;col[2][a22]=0
end}
# 最後に4!×3!を掛けて答を出します。
p count*4*3*2*3*2

で、次に7×7に挑戦です。以下のプログラムですが、規則的なので(中略)します。
# 算チャレ第1125回 京大問題編 7×7の場合
row=Array.new();col=Array.new()
1.upto(8){|i|row[i-1]=[0,0,0,0,0,0,0,0];col[i-1]=[0,0,0,0,0,0,0,0]}
# 一行目を1から7、一列目も1から7にします。
1.upto(7){|i|row[1][i]=1;row[i][i]=1;col[1][i]=1;col[i][i]=1}
#countは適する方陣の個数です。
count=0; p Time.now
# 各要素を1から7にして、すべての場合を調べます。ただし、各行列で既に使われた数字は使いません。
1.upto(7){|a22|if row[2][a22]==0&&col[2][a22]==0 then row[2][a22]=1;col[2][a22]=1
1.upto(7){|a23|if row[2][a23]==0&&col[3][a23]==0 then row[2][a23]=1;col[3][a23]=1
1.upto(7){|a24|if row[2][a24]==0&&col[4][a24]==0 then row[2][a24]=1;col[4][a24]=1
1.upto(7){|a25|if row[2][a25]==0&&col[5][a25]==0 then row[2][a25]=1;col[5][a25]=1
1.upto(7){|a26|if row[2][a26]==0&&col[6][a26]==0 then row[2][a26]=1;col[6][a26]=1
1.upto(7){|a27|if row[2][a27]==0&&col[7][a27]==0 then row[2][a27]=1;col[7][a27]=1
1.upto(7){|a32|if row[3][a32]==0&&col[2][a32]==0 then row[3][a32]=1;col[2][a32]=1
1.upto(7){|a33|if row[3][a33]==0&&col[3][a33]==0 then row[3][a33]=1;col[3][a33]=1
(中略)
1.upto(7){|a76|if row[7][a76]==0&&col[6][a76]==0 then row[7][a76]=1;col[6][a76]=1
1.upto(7){|a77|if row[7][a77]==0&&col[7][a77]==0 then count+=1
end}; row[7][a76]=0;col[6][a76]=0
(中略)
end}; row[2][a23]=0;col[3][a23]=0
end}; row[2][a22]=0;col[2][a22]=0
end}
# 最後に7!×6!を掛けて答を出します。
p count*7*6*5*4*3*2*6*5*4*3*2
p Time.now

かかった時間は9分9秒でした。Corei5-4200M_2.50GHz_RAM8.00G
lenovoL540ノートパソコンを使いました。

プログラムを書いてみて、再起呼び出しがどれだけ便利なものかよくわかりました。(^^)!!
   3月5日(木) 14:13:43     48827
おすまん
今週の出題がなかったのでおかげで、間に合いました(^^;
somewhere in the world   3月5日(木) 18:53:07     48828
「数学」小旅行
再帰関数を使ってみました。
この方が断然速かったです。前回と同じスペックで、5分30秒でした。

# 算チャレ第1125回 京大問題編 7×7の場合

$row=Array.new();$col=Array.new() #グローバル変数とします。
1.upto(8){|i| $row[i-1]=[0,0,0,0,0,0,0,0];$col[i-1]=[0,0,0,0,0,0,0,0]} #1行目をrow[1]、1列目をcol[1]で表わすために8×8としました。
1.upto(7){|i|$row[1][i]=1;$row[i][i]=1;$col[1][i]=1;$col[i][i]=1} # 1行目を1から7、1列目も1から7にします。
$count=0; #$countが求める方陣の個数です。

#再帰関数の定義部分です。
#(a,b)成分を1から7まで変化させ、その数がa行およびb列にあるかどうかを判定して、なければその数を(a,b)成分とし、次の行列成分に進んで同じように入れてゆく関数を定義します。
#(n,n)要素まで入れ終わることができたらカウントしてから、またひとつ前の位置に戻って次の数(1から7)を入れて調べて行くことにします。
def seibunsirabe(a,b)
1.upto(7){|i|
if $row[a][i]==0&&$col[b][i]==0 then;if a==7&&b==7 then$count+=1 else
$row[a][i]=1;$col[b][i]=1;b==7 ? seibunsirabe(a+1,2):seibunsirabe(a,b+1) end
$row[a][i]=0;$col[b][i]=0 end }
end

seibunsirabe(2,2) #再帰関数を実行します。
p $count*7*6*5*4*3*2*6*5*4*3*2 # 最後に7!×6!を掛けて答を出します。
   3月6日(金) 11:12:42     48829
「数学」小旅行
独りで遊んでいてすみません。この流れで、ナンプレ(数独)の解法プログラムも作ってみました。

# ナンバープレイス 解法プログラム

$con=Array.new()
#初期に与えられた数を入れます。1行1列目は$con[1][1]です。
#(1,1)から(9,9)にナンプレの問題を入力します。

$con[0]=[0,0,0,0,0,0,0,0,0,0]
$con[1]=[0,0,0,0,2,0,0,0,0,0]
$con[2]=[0,0,0,0,8,0,9,5,4,7]
$con[3]=[0,0,0,1,0,6,0,8,0,0]
$con[4]=[0,3,0,0,0,0,0,0,0,5]
$con[5]=[0,8,0,9,1,0,0,0,0,0]
$con[6]=[0,0,0,6,0,0,0,0,7,0]
$con[7]=[0,0,0,0,0,5,0,3,0,8]
$con[8]=[0,6,2,0,4,0,0,0,0,0]
$con[9]=[0,0,0,0,0,0,0,9,0,0]
#--------------------------------------
$row=Array.new();$col=Array.new();$sol=Array.new();$blk=Array.new() #グローバル変数とします。
$count=0;#$countが求める方陣の個数です。
# a行b列のブロック番号(3×3のブロック9個を左上から右・下へと番号を付けます。)を返します。
def blkid(a,b)
return (b-1)/3+1+3*((a-1)/3)
end
1.upto(10){|i| $row[i-1]=[0,0,0,0,0,0,0,0,0,0];$col[i-1]=[0,0,0,0,0,0,0,0,0,0];$sol[i-1]=[0,0,0,0,0,0,0,0,0,0];$blk[i-1]=[0,0,0,0,0,0,0,0,0,0]} #1行目をrow[1]、1列目をcol[1]で表わすために8×8としました。
1.upto(9){|i|1.upto(9){|j| $row[i][$con[i][j]]=1;$col[j][$con[i][j]]=1;$blk[blkid(i,j)][$con[i][j]]=1}}# 各行列ブロックで使われている数字をチェックします。
#---------------------------------------
#再帰関数の定義部分です。
#(a,b)成分を1から9まで変化させ、その数がa行およびb列にあるかどうかを判定して、なければその数を(a,b)成分とし、次の行列成分に進んで同じように入れてゆく関数を定義します。
#(9,9)要素まで入れ終わることができたらカウントしてから、またひとつ前の位置に戻って次の数(1から9)を入れて調べて行くことにします。
def seibunsirabe(a,b)
if $con[a][b]==0 then 1.upto(9){|i|
if $row[a][i]==0&& $col[b][i]==0&& $blk[blkid(a,b)][i]==0 then $sol[a][b]=i
if a==9&&b==9 then $count+=1;1.upto(9){|j|p $sol[j]}
else $row[a][i]=1;$col[b][i]=1;$blk[blkid(a,b)][i]=1;b==9 ? seibunsirabe(a+1,1):seibunsirabe(a,b+1)
$row[a][i]=0;$col[b][i]=0;$blk[blkid(a,b)][i]=0 endend }
else $sol[a][b]=$con[a][b];if a==9&&b==9 then $count+=1;1.upto(9){|j|p $sol[j]}
else b==9 ? seibunsirabe(a+1,1):seibunsirabe(a,b+1) end end
end
seibunsirabe(1,1);p $count

これをルビーで実行すると解が1つ出ますが、例えば、2行9列の7を定めないときは解が66通りあるとかも出てきます。
たっぷりと楽しんでしまいました。ありがとうございました。
   3月9日(月) 14:04:09     48830