我们在 bitcoin sv 上实现了一个数独游戏智能合约,利用之前介绍过的一种可以将游戏中寻找解题方案的过程外包上链。因为求解数独问题的计算工作量会随着其行列数快速增长,实际上它也是一个 np-完全 问题。不过我们可以借由比特币智能合约巧妙地寻求答案,只需要验证答案提供者所给出的解答是否满足要求即可,这样即可以将复杂的求解计算过程实现链下外包。
scrypt 合约代码如下:
impo在周末rt "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.tvalue(newboard, i, j, inputvalue); } el { 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 co辽宁高考作文larray = 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); r卫生检验与检疫equire(squarearr女性更年期的症状ay.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 tvalue(bytes board, int i, int j, int value): bytes { return util.telemat(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); }}
到此这篇关于比特币上的数独游戏合约的实现代码的文章就介绍到这了,更多相关比特币数独游戏合约内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-09 01:13:40,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/37bc2680acb11911b1a5828fcd9fa399.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:比特币上的数独游戏合约的实现代码.doc
本文 PDF 下载地址:比特币上的数独游戏合约的实现代码.pdf
留言与评论(共有 0 条评论) |