幻立方解法之7阶幻立方的生成方法
/*接上篇
对了,我是来找规律的,找幻立方的生成方法的
先看看这个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。
这个幻立方的整体也是中心对称的。”
*/
幻立方解法之7阶幻立方的生成方法相关推荐
- 幻立方解法之151阶
//测试方法 func testCreateCube151(){ println("开始生成151阶幻立方:\(NSDate())") let cube151 = createCu ...
- 幻立方解法之4阶,5阶,7阶
/*接上一篇 准备工作都做好了,现在来看看百度上提供的这个4阶幻立方到底完美不完美 http://baike.baidu.com/link?url=2soOQvIeehXTDdFXctT3GPrkqQ ...
- 幻立方解法之7阶延展
/*接上篇 既然按照这个规则可生成完美幻立方,那如果改变下起点位置,是否也能生成幻立方呢 */ func findAPerfectCube7(){ let step = 7 for var deep ...
- 幻立方解法之暴力求解
//疯狂查找 /* 对step阶的立方,按照各种起点,各种跳步方法逐一检验 */ func CrazyFindPerfectCube(step:Int){ func enumInitPoint(#st ...
- python list大小_4个python常用高阶函数的使用方法
1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...
- 三维立体电视图像生成方法
三维立体电视越来越受到人们的重视,不少商家也推出了一些相关产品.那这些究竟是怎么做出来的呢?作者就接触过的知识点,在这里向大家浅薄的介绍一二. 一 国内外研究现状 三维立体电视,最好的方式是用两台摄像 ...
- CNN可视化又添新作,南大开源Group-CAM:高效的显著图生成方法|CVPR2021
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨孙裕道 审稿丨邓富城 编辑丨极市平台 导读 最近南京大学的一篇论文收录于CVPR2021,该论文 ...
- UUID介绍与生成方法
什么是UUID? UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符.UUID具有以下涵义: 经由一定的算法 ...
- Extjs4.0 开发笔记-desktop开始菜单动态生成方法
desktop开始菜单动态生成方法: Desktop.html中,在<scripts>中的Ext.onReady之前添加如下: var mArr = [];//这里是保存显示模块的数组va ...
最新文章
- hive中时间操作(一)
- .Net 2.0 事件机制,更简化了...
- 得到文件的服务器路径,如何获取服务器上的路径?
- Expressions are not allowed at the top level
- 关于这周工作中遇到的关于缓存问题的记录
- 如何取得用户参数文件中的parameters
- 用一个按钮做主窗口,可以吗?
- Java面试题整理,docker可视化监控工具
- 在树莓派2上折腾kali2.0小记(1)
- 创意促销海报设计思路,年底忙的设计师来看!
- 20-21-2网络管理quiz4
- 自制 Chrome Custom.css 设置网页字体为微软雅黑扩展
- 品优影视源码 带会员中心+卡密系统
- COMSOL激光烧蚀仿真模型
- 【第二周】吴恩达团队AI for Medical Diagnosis大作业
- Crout分解法 | matlab
- 基于labview的虚拟示波器
- Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained
- 关于图片的像素,dpi与实际尺寸的关系
- 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接。
热门文章
- 微信小程序、小游戏盒子(市场)的制作
- 辅助驾驶功能开发-功能规范篇(06)-智能远光大灯HMA
- Pomer Flex J2EE (Flex+BlazeDS+Hibernate + spring )框架
- oracle调整尾数,word数据类型
- unity串口 连接多个串口崩溃_7个经典问答!10分钟带你了解串口服务器(RS232,RS485,RS422)...
- 「万向区块链专家观点」深度解析“区块链+物联网”与新基建
- 专业高手如何快速看盘(转贴)
- 【华为机试真题 Python实现】免单统计
- crmeb多商户二开crmeb多商户授权失败
- setMonth()