找回密码
 欢迎注册
楼主: chyanog

[擂台] 六边形幻方

[复制链接]
发表于 2013-4-16 17:16:16 | 显示全部楼层
    2   4   6
  7   1   5   3
9   8   0   8   9
  3   5   1   7
    6   4   2
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 18:20:50 | 显示全部楼层
7# hujunhua

k解出来了,k==38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 19:20:14 | 显示全部楼层
用Mathematica会内存不够,用C写了个


  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(int argc, char *argv[])
  4. {
  5.     clock_t t0=clock();
  6.     int a,b,c,d,e,f,g;
  7.     int k=19;
  8.     for (a=1;a<=k;a++)
  9.         for (b=1;b<=k;b++)
  10.             for (c=1;c<=k;c++)
  11.                 for (d=1;d<=k;d++)
  12.                     for (e=1;e<=k;e++)
  13.                         for (f=1;f<=k;f++)
  14.                             for (g=1;g<=k;g++)
  15.                             {
  16.                                 int A[19];
  17.                                 A[0] = a;
  18.                                 A[1] = b;
  19.                                 A[2] = 38 - a - b;
  20.                                 A[3] = c;
  21.                                 A[4] = d;
  22.                                 A[5] = e;
  23.                                 A[6] = 38 - c - d - e;
  24.                                 A[7] = 38 - a - c;
  25.                                 A[8] = f;
  26.                                 A[9] = g;
  27.                                 A[10] = 38 - b - d - e - f - g;
  28.                                 A[11] = -38 + a + b + c + d + e;
  29.                                 A[12] = 38 - b - d - f;
  30.                                 A[13] = 38 - c - d - e - f - g;
  31.                                 A[14] = -38 + b + c + d + e + f;
  32.                                 A[15] = d + f + g;
  33.                                 A[16] = -38 + a + b + c + d + f;
  34.                                 A[17] = d + e + g;
  35.                                 A[18] = 76 - a - b - c - 2*d - e - f - g;

  36.                                 int i, j;
  37.                                 int flag1=1;

  38.                                 for (i=0;i<k;i++)
  39.                                 {
  40.                                     if (!(A[i]>0))
  41.                                     {
  42.                                         flag1=0;
  43.                                         break;
  44.                                     }
  45.                                 }
  46.                                 if (!flag1)
  47.                                     break;

  48.                                 int flag2=1;
  49.                                 for (i=0; i<k;i++)
  50.                                 {
  51.                                     for (j=1; j<k-i;j++)
  52.                                     {
  53.                                         if (A[i]==A[j+i])
  54.                                         {
  55.                                             flag2=0;
  56.                                             break;
  57.                                         }
  58.                                     }
  59.                                 }

  60.                                 if (flag2)
  61.                                 {
  62.                                     for (i=0;i<k;i++)
  63.                                         printf("%d ", A[i]);
  64.                                     printf("\n");
  65.                                 }

  66.                             }
  67.     printf ("Elapsed %0.2f\n", (clock()-t0)/1000.0);
  68.     getchar();
  69.     return 0;
  70. }

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 20:51:20 | 显示全部楼层
本质上就是 一个 16*19的常数矩阵C,乘以19*1的列向量X,得到一个16*1的列向量A=k*{1,1,1,1,1,....,1,5}
其中,5k=19*20/2------------------------------>  也即是   k=38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 22:26:41 | 显示全部楼层
5# hujunhua
Binomial[19, 6]=27132 ,
也就是说总共只需要循环27132 次,每一次解13*13的线性方程,这个规模其实很小,基本上不费时间的。
老大说的超过“机器数”是啥意思?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 22:35:07 | 显示全部楼层
15# wayne
我觉得是可能是生成的list太大,Mathematica报内存溢出了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 22:43:53 | 显示全部楼层
5# hujunhua
(x1,x2,x3,x4,x5,x6),(i=7~19)取自6个无约束关系的格。

这6个格子代表6个自由度,选择这样的格子还是比较难的。

该不会是2,4,13,18,16,7 吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 23:00:11 | 显示全部楼层
  1. b1={{1,2,3},{4,5,6,7},{8,9,10,11,12},{13,14,15,16},{17,18,19}};
  2. b2={{1,4,8},{2,5,9,13},{3,6,10,14,17},{7,11,15,18},{12,16,19}};
  3. b3={{3,7,12},{2,6,11,16},{1,5,10,15,19},{4,9,14,18},{8,13,17}};
  4. cc=Table[t=Array[0&,19];Map[Set[Part[t,#],1]&,iii];t,{iii,Flatten[{b1,b2,b3},1]}];
  5. cc=Join[cc,{Array[1&,19]}]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-17 00:18:48 | 显示全部楼层
18# wayne
第4行可以更简洁一点,

  1. 1 - Sign[(Range[19] /. Thread[# -> 0]) & /@ Join[b1, b2, b3]]
  2. ReplacePart[0 Range[19], List /@ # -> 1] & /@ Join[b1, b2, b3]
  3. Normal[SparseArray[Thread[# -> 1], 19] & /@ Join[b1, b2, b3]]
复制代码

评分

参与人数 1鲜花 +12 收起 理由
wayne + 12 不错!:)

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-17 02:16:31 | 显示全部楼层

八维通解

本帖最后由 hujunhua 于 2013-4-17 10:03 编辑

18#生成的矩阵轶=12,故参数解是8维的(总和也作为一个变量),一个优化的参数解如下(优化标准是旋转对称度和各表达式的简明性):

                          s+a+c        O+b+C         S+A+B

             O+A+b               B                c                 O+a+C

S+B+C                   a               O                  A                    s+b+c

             O+A+c               C                b                 O+a+B

                          s+a+b         O+B+c        S+A+C


看起来有九个参数,但有约束 s+S=O,所以实际上是 8 参数解。
从2#的结果看,S=O,s=0,所以一个高度对称、简明的六参数解(总和给定)为

                       a+c     O+b+C    O+A+B

           O+A+b         B            c              O+a+C

O+B+C             a            O             A                    b+c

           O+A+c         C             b              O+a+B

                        a+b      O+B+c     O+A+C

2#的数据中,1+10=2+9=3+8,这3个“等和对”处于旋转对称位置,15+7=16+6=18+4,这3个“等和对”处于旋转对称位置,这都不是偶然的,因在参数解中有完全体现。

评分

参与人数 1贡献 +12 鲜花 +12 收起 理由
wayne + 12 + 12 漂亮!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-18 11:11 , Processed in 0.075832 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表