幻立方解法之7阶幻立方的生成方法

zz/2024/4/19 23:27:24


/*接上篇

对了,我是来找规律的,找幻立方的生成方法的

先看看这个7阶的完美幻立方

初始位置1是在4-1-1(第4行,第1列,第1层,0为基数)

下一步的位置与上一步的相对位移是4-2-2

7的倍数后有个跳步,因为按4-2-2规则,如果不跳的话8的位置就是1的位置,总不能把1给换了吧

7的倍数后的数与前数的相对位移是2-4-0

7*7=49的倍数后又有一个跳步,同样,按照前面的规则,如果不跳的话就没得走了

跳步的相对位移是2-3-3


我们把阶数step,起始位置point0,移步规则deltaPoint,7倍数的跳步规则deltaLine,49倍数的跳步规则deltaSide都写成参数

这样创建幻立方的通用方法就出来了

*/

func createCube(#step: Int, #point0:(row:Int, col:Int, deep:Int),#deltaPoint:(row:Int, col:Int, deep:Int),#deltaLine:(row:Int, col:Int, deep:Int),#deltaSide:(row:Int, col:Int, deep:Int)) -> ([[[Int]]])?{

    let cube1 = [Int](count: step, repeatedValue: 0)

    let cube2 = [[Int]](count: step, repeatedValue: cube1)

    var cube = [[[Int]]](count: step, repeatedValue: cube2)

    

    func deltaP(#pcurr:(row:Int, col:Int, deep:Int),#delta:(row:Int, col:Int, deep:Int),#step:Int)->(row:Int, col:Int, deep:Int){

        

        var nextrow = pcurr.row + delta.row

        var nextcol = pcurr.col + delta.col

        var nextdeep = pcurr.deep + delta.deep

        nextrow = correction(nextrow, step)

        nextcol = correction(nextcol, step)

        nextdeep = correction(nextdeep, step)

        

        return (row: nextrow, col: nextcol, deep: nextdeep)

    }

    

    var p = point0

    var iPut = 1

    cube[p.row][p.col][p.deep] = iPut++

    

    var time = step * step * step

    do{

        var nextp = deltaP(pcurr: p, delta: deltaPoint, step: step)

        

        if (cube[nextp.row][nextp.col][nextp.deep] != 0){

            nextp = deltaP(pcurr: p, delta: deltaLine, step: step)

            if (cube[nextp.row][nextp.col][nextp.deep] != 0){

                nextp = deltaP(pcurr: p, delta: deltaSide, step: step)

                if (cube[nextp.row][nextp.col][nextp.deep] != 0){

                    if time < 2{

                        return cube

                    }else{

                        return nil

                    }

                }

            }

        }

        

        p = nextp

        cube[p.row][p.col][p.deep] = iPut++

        

    }while(time-- > 0)

    return nil

    

}



//测试方法

func testCreatePerfectCube7(){

    //测试一下我这个号称通用的方法能不能生成上述完美7阶幻立方

    let perfectCube7 = createCube(step: 7, point0: (row: 4, col: 1, deep: 1), deltaPoint: (row: 4, col: 2, deep: 2), deltaLine: (row: 2, col: 4, deep: 0), deltaSide: (row: 2, col: 3, deep: 3))

    

    printMagicCube(perfectCube7!)

    println("\nisMagicCube 检查")

    let line1 = isMagicCube(perfectCube7!,true)

    if let line1_ = line1 {

        println("不是幻立方,line=\(line1_)")

    }

}


//testCreatePerfectCube7()

//看看下面这打印的,顿时觉得自己还真有点三脚猫的功夫

/*

0

[226,252,320,45,64,139,158]

[115,183,209,277,296,28,96]

[4,72,147,166,234,253,328]

[285,304,29,55,123,191,217]

[174,242,261,336,12,80,99]

[63,131,150,218,293,312,37]

[337,20,88,107,182,201,269]


1

[41,60,128,154,222,290,309]

[273,341,17,85,111,179,198]

[155,230,249,317,49,68,136]

[93,119,187,206,274,300,25]

[325,1,76,144,163,238,257]

[214,282,308,33,52,120,195]

[103,171,239,265,333,9,84]


2

[192,211,286,305,30,56,124]

[81,100,175,243,262,330,13]

[313,38,57,132,151,219,294]

[202,270,338,21,89,108,176]

[140,159,227,246,321,46,65]

[22,97,116,184,210,278,297]

[254,329,5,73,141,167,235]


3

[301,26,94,113,188,207,275]

[232,258,326,2,77,145,164]

[121,196,215,283,302,34,53]

[10,78,104,172,240,266,334]

[291,310,42,61,129,148,223]

[180,199,267,342,18,86,112]

[69,137,156,231,250,318,43]


4

[109,177,203,271,339,15,90]

[47,66,134,160,228,247,322]

[279,298,23,98,117,185,204]

[168,236,255,323,6,74,142]

[50,125,193,212,287,306,31]

[331,14,82,101,169,244,263]

[220,288,314,39,58,133,152]


5

[260,335,11,79,105,173,241]

[149,224,292,311,36,62,130]

[87,106,181,200,268,343,19]

[319,44,70,138,157,225,251]

[208,276,295,27,95,114,189]

[146,165,233,259,327,3,71]

[35,54,122,190,216,284,303]


6

[75,143,162,237,256,324,7]

[307,32,51,126,194,213,281]

[245,264,332,8,83,102,170]

[127,153,221,289,315,40,59]

[16,91,110,178,197,272,340]

[248,316,48,67,135,161,229]

[186,205,280,299,24,92,118]


isMagicCube 检查

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,深的和都是相等的

前视图的各条对角线的和相等

左视图的各条对角线的和相等

俯视图的各条对角线的和相等

经检查,主对角线和是相等的

经检查,辅对角线row和是相等的

经检查,辅对角线col和是相等的

经检查,辅对角线deep和是相等的

*/

/*

这个幻立方的牛B之处还不止这些,看看齐鲁晚报上是怎么说的


这个七阶幻立方的主视图的七层,每层都是完美的。也就是说,每层的七行、七列、十四个斜行的七数之和都是幻和1204。而且第四层还是中心对称的,中心数是172,所有对称的两数之和都是344


这个幻立方的整体也是中心对称的。

*/



http://www.ngui.cc/zz/2336546.html

相关文章

幻立方解法之暴力求解

//疯狂查找 /* 对step阶的立方&#xff0c;按照各种起点&#xff0c;各种跳步方法逐一检验 */ func CrazyFindPerfectCube(step:Int){ func enumInitPoint(#step:Int,#deltaPoint:(row:Int, col:Int, deep:Int),#deltaLine:(row:Int, col:Int, deep:Int),#deltaSide:(row:Int,…

幻立方解法之开篇

/* 最强大脑上陈大记完成的7阶幻立方让我震撼 这让原来连9宫格都完成不了的我也开始探索起幻方来 这不前面几篇写的都是关于幻方的解法。 在幻方的解法中我发现这些数字的排列都是有一定的生成方法的 幻立方肯定也有吧 什么样的生成方法可以达到什么样的效果呢 要想知道什么效果…

A component required a bean of type “XX‘ that could解决方法

1.在Mapper接口上加Mapper注解 2.启动类加MapperScan注解扫描包名

类型转换错误java.math.BigDecimal cannot be cast to java.lang.String

从数据库取出一个 Count函数 统计的值 在代码中要转成Integer类型的时候 Integer.parseInt(map.get(“ID_”).toString()) ; 报了一下错误&#xff1a; java.math.BigDecimal cannot be cast to java.lang.String 解决方法&#xff1a; Object ob map.get(“ID_”); Intege…

idea-maven项目报java.lang.ClassNotFoundException:

maven-servlet项目添加模块 webapp模板webapp模板 可以生效&#xff1b; 普通webapp模板 直接idea无响应&#xff1b; 新手不要用最新的tomcat10 否则报java.lang.ClassNotFoundException&#xff1a; javax.servlet.http.HttpServlet 不好找原因, tomcat9 就ok;

maven父子关系时,发生异常: Could not find artifact org.hlx.itrip:itrip-dao:jar:1.0-SNAPSHOT - [Help 1]

一个MVN父项目&#xff0c;多个MVN子项目目录如下&#xff1a; 在itrip-auth中使用项目进行clean和install &#xff0c;就发生如下异常&#xff1a; 项目之间有相互依赖关系&#xff0c;但就发生异常了&#xff01; 原因&#xff1a; 原来没有首先对父项目也就是interface-te…

Maven上传jar包到本地仓库

Maven上传jar包到本地仓库 第一步:配置Maven环境变量 F:\apache-maven-3.5.2\bin 配置到path中 找到要上传的jar包 地址栏输入 cmd mvn install:install-file -Dfileitrip-alipay-1.0.jar -DgroupIdcn.itrip.alipay -DartifactIditrip-alipay -Dversion1.0 -Dpackagingjar …

Mybatis遇到的问题 Cause: java.lang.ClassNotFoundException: Cannot find class:xx ,提供靠谱解决方法

今天继续学习Mybatis的知识点&#xff0c;让我又遇到一个问题如下&#xff1a; 我还是比较小白的就搜了一些其他的解决方法&#xff0c;说是要把Mapper.xml里面的返回值类型由resultType写成resultMap&#xff0c;改了以后发现没有用。 之后看到大佬留下的一句话&#xff0c;“…

自恢复保险丝-原理

微型自恢复保险丝自恢复保险丝是由高科技聚合树脂及纳米导电晶粒经特殊工艺加工制成&#xff0c;正常情况下&#xff0c;纳米导电晶体随树脂基链接形成链状导电通路&#xff0c;保险丝正常工作&#xff1b;当电路发生短路或者过载时&#xff0c;流经保险丝的大电流使其集温升高…

solr自动增量更新

1.导入增量更新罐包 将阿帕奇的Solr中的-dataimportscheduler.src.jar复制到solr的中的lib目录下 2.配置增量文件更新在solr_home目录下新建一个文件夹conf&#xff0c;再在conf文件夹下 新建dataimport.properties文件&#xff0c;其内容为 #############################…