清风细雨楼 Design By www.eepep.com
我们在 Bitcoin SV 上实现了一个数独游戏智能合约,利用之前介绍过的一种合约范式可以将游戏中寻找解题方案的过程外包上链。因为求解数独问题的计算工作量会随着其行列数快速增长,实际上它也是一个 NP-完全 问题。不过我们可以借由比特币智能合约巧妙地寻求答案,只需要验证答案提供者所给出的解答是否满足要求即可,这样即可以将复杂的求解计算过程实现链下外包。
sCrypt 合约代码如下:
import "util.scrypt"; import "array.scrypt"; contract Sudoku { bytes board; static const int N = 9; static bytes EMPTY = b'00'; constructor(bytes board) { this.board = board; } function merge(bytes solution) : bytes { bytes newBoard = this.board; int i = 0; loop (N) { int j = 0; loop (N) { int value = this.readValue(newBoard, i, j); int inputValue = this.readValue(solution, i, j); if (value == 0) { require(inputValue <= 9); newBoard = this.setValue(newBoard, i, j, inputValue); } else { require(value == inputValue); } j++; } i++; } return newBoard; } public function solve(bytes solution) { require(len(solution) == Sudoku.N * Sudoku.N); bytes newBord = this.merge(solution); Array rowArray = new Array(); Array colArray = new Array(); Array squareArray = new Array(); int i = 0; loop (N) { int j = 0; loop (N) { // check for duplicate // in a row int rowElem = this.readValue(newBord, i, j); require(rowArray.indexOf(rowElem) == -1); rowArray.push(rowElem); // in a column int colElem = this.readValue(newBord, j, i); require(colArray.indexOf(colElem) == -1); colArray.push(colElem); // in a subgrid int squareElem = this.readSquareValue(newBord, i, j); require(squareArray.indexOf(squareElem) == -1); squareArray.push(squareElem); j++; } rowArray.clear(); colArray.clear(); squareArray.clear(); i++; } require(true); } static function readValue(bytes board, int i, int j): int { return Util.fromLEUnsigned(Util.getElemAt(board, Sudoku.index(i, j))); } static function setValue(bytes board, int i, int j, int value): bytes { return Util.setElemAt(board, this.index(i, j), Util.toLEUnsigned(value, 1)); } static function readSquareValue(bytes board, int i, int j): int { return Util.fromLEUnsigned(Util.getElemAt(board, Sudoku.indexSquare(i, j))); } static function index(int row, int col) : int { return row * Sudoku.N + col; } static function indexSquare(int i, int j) : int { int row = i / 3 * 3 + j / 3; int col = i % 3 * 3 + j % 3; return Sudoku.index(row, col); } }
清风细雨楼 Design By www.eepep.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
清风细雨楼 Design By www.eepep.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年05月14日
2024年05月14日
- 《饿殍:明末千里行》行将就木的日月山河
- 【古典音乐】卡拉扬《马勒·大地之歌》2013[FLAC+CUE/整轨]
- KOKIA《EVOLVEtoLOVE20周年精逊4CD【FLAC】
- 李娜(昌圣法师)-《唱经给你听.念佛礼仪》[APE]
- 前《龙腾世纪》编剧谈EA用AI做游戏:他们的兴奋是绝望的哀嚎
- 世界公认最丑的鱼登热搜 科普:其实是人为被迫毁容
- 网易新作合约要求测试者不准说坏话:现已撤回并道歉
- 【原神】V4.6攻略 | 全角色突破用讨伐材料汇总
- 【原神】V4.6攻略 | 4.6版本下半抽卡建议
- 【原神】V4.6攻略 | 那维莱特的一条龙机制介绍、养成及配队
- 郑智化.1995-游戏人间【飞碟】【WAV+CUE】
- 群星.1999-唱好香港【STAREAST】【WAV+CUE】
- 美宝.2013-从目的地出发【金牌大风】【WAV+CUE】
- 新生 New Life
- 站长 Chief of Station