首页 > 作文

比特币上的数独游戏合约的实现代码

更新时间:2023-04-09 01:13:42 阅读: 评论:0

我们在 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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图