使用PHP在微信公共平台实现24点游戏
世纪华联 | 2018-01-26 23:30:43 | 阅读:12038
使用PHP在微信公共平台实现24点游戏,搭建服务器为SAE,所以很多语句和MYSQL不太一样,24点的数据库存储在24data里面,先用python计算出结果然后存储在本地的txt文件最后倒入SAE的MYSQL,记录了所有有解的4个数字。可以添加微信号:24点。
//define your token
define("TOKEN", "ddwm");
define("INPUT_NAME", "1");
define("START_GAME", "2");
define("TIMING_START", "3");
define("TIMING_END", "4");
$wechatObj = new Why24Point();
if ($_GET["echostr"])
$wechatObj--->valid();
else
$wechatObj->responseMsg();
class Why24Point {
public function responseMsg() {
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
if($postObj->Event == "subscribe"){
$time = time();
$textTpl = "
%s
";
$msgType = "text";
$contentStr = "哟你好亲爱的小伙伴,欢迎来到24点~\n游戏规则:使用+-*/四则运算得出结果为24即可。\n任何时候输入 主页 返回主菜单,\n输入 排名 查看当前排名哟~\n如果有情况反馈请发送语音信息!\n请输入任意内容,开始我们的24点职业生涯!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "
%s
";
if (!empty($keyword)) {
$msgType = "text";
$contentStr = $this->getData($fromUsername, $keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
} else {
echo "输入点东西吧。。";
}
} else {
echo "";
exit;
}
}
private function getData($fromUsername, $keyword) {
if($keyword == "主页"){
$this->setStep($fromUsername, constant("START_GAME"));
return "欢迎来到24点的决战现场。请输入任意内容,开始我们的24点职业生涯!任何时候输入 主页 返回主菜单,输入 排名 查看当前排名~";
}
if($keyword == "排名"){
return "您的目前排名是:".$this->getRank($fromUsername);
}
if ($this->isFirst($fromUsername)) {
return "这是你第一次参加游戏,请输入你的用户昵称:";
}
if ($this->getStep($fromUsername) == constant("INPUT_NAME")) {
$this->setName($fromUsername, $keyword);
$this->setStep($fromUsername, constant("START_GAME"));
return "你好," . $keyword . "同学。请输入任意内容,开始我们的24点职业生涯!任何时候输入 主页 返回主菜单,输入 排名 查看当前排名~";
}
if ($this->getStep($fromUsername) == constant("START_GAME")) {
$numbers = $this->getNumbers();
$this->setStep($fromUsername, constant("TIMING_START"));
return "游戏规则:使用+-*/四则运算得出结果为24即可。\n请听题!" . $this->getNumbers();
}
if ($this->getStep($fromUsername) == constant("TIMING_START")) {
if ($this->calcStr($keyword)) {
//$this->setStep($fromUsername, constant("TIMING_END"));
$this->setGrade($fromUsername, 5);
$this->setStep($fromUsername, constant("START_GAME"));
return "结果等于24!你现在的分数是:".$this->getGrade($fromUsername);
}
return "结果错误!骗子,根本就不等于24!";
//$this->setStep($fromUsername, constant("TIMING_END"));
}
return "我擦,系统出问题了。抱了个歉哈!";
}
//计算排名
private function getRank($fromUsername){
$mysql = new SaeMysql();
$grade = $this->getGrade($fromUsername);
$sql = "SELECT COUNT( * ) FROM `24points` WHERE `grade` > ".$grade."";
$mysql->closeDb();
return intval($mysql->getVar($sql))+1;
}
//计算成绩
private function setGrade($fromUsername, $add){
$mysql = new SaeMysql();
$sql = "SELECT grade FROM `24points` WHERE `userid` = '" . $fromUsername . "'";
$grade = intval($mysql->getVar($sql)) + $add;
$sql = "UPDATE `24points` SET `grade` = '" . $grade . "' WHERE `userid` ='" . $fromUsername . "';";
$mysql->runSql($sql);
$mysql->closeDb();
}
//获得成绩
private function getGrade($fromUsername){
$mysql = new SaeMysql();
$sql = "SELECT grade FROM `24points` WHERE `userid` = '" . $fromUsername . "'";
$mysql->closeDb();
return intval($mysql->getVar($sql));
}
//计算等式,返回正确或者错误
private function calcStr($keyword) {
$keyword = str_replace("(","(",$keyword);
$keyword = str_replace(")",")",$keyword);
$keyword = str_replace("÷","/",$keyword);
$keyword = str_replace("/","/",$keyword);
$keyword = str_replace("×","*",$keyword);
$atr_arr = str_split($keyword);
$new_atr = '';
for ($i = 0; $i < strlen($keyword); $i++) {
$new_atr = $new_atr . $atr_arr[$i];
}
$s = eval("return $new_atr;");
if ($s == 24) {
return true;
}
return false;
}
//是否是第一次
private function isFirst($fromUsername) {
$mysql = new SaeMysql();
$sql = "SELECT * FROM `24points` WHERE `userid` = '" . $fromUsername . "'";
$data = $mysql->getData($sql);
if (count($data) == 0) {
$sql = "INSERT INTO `24points` (`userid`, `step`) VALUES ('" . $fromUsername . "', '" . constant("INPUT_NAME") . "');";
$mysql->runSql($sql);
$mysql->closeDb();
return true;
}
return false;
}
//获取当前的步骤
private function getStep($fromUsername) {
$mysql = new SaeMysql();
$sql = "SELECT step FROM `24points` WHERE `userid` = '" . $fromUsername . "'";
$mysql->closeDb();
return $mysql->getVar($sql);
}
//获取随机的四个数字用空格隔开
private function getNumbers() {
$rand_id = rand(1, 1362);
$mysql = new SaeMysql();
$sql = "SELECT num1 FROM `24data` WHERE `id` = '" . $rand_id . "'";
$num1 = $mysql->getVar($sql);
$sql = "SELECT num2 FROM `24data` WHERE `id` = '" . $rand_id . "'";
$num2 = $mysql->getVar($sql);
$sql = "SELECT num3 FROM `24data` WHERE `id` = '" . $rand_id . "'";
$num3 = $mysql->getVar($sql);
$sql = "SELECT num4 FROM `24data` WHERE `id` = '" . $rand_id . "'";
$num4 = $mysql->getVar($sql);
$mysql->closeDb();
$numbers = $num1 . " " . $num2 . " " . $num3 . " " . $num4;
return $numbers;
}
//设置当前操作的步数
private function setStep($fromUsername, $step) {
$mysql = new SaeMysql();
$sql = "UPDATE `24points` SET `step` = '" . $step . "' WHERE `userid` ='" . $fromUsername . "';";
$mysql->runSql($sql);
$mysql->closeDb();
}
//设置用户昵称
private function setName($fromUsername, $username) {
$mysql = new SaeMysql();
$sql = "UPDATE `24points` SET `username` = '" . $username . "' WHERE `userid` ='" . $fromUsername . "';";
$mysql->runSql($sql);
$mysql->closeDb();
}
//验证微信
public function valid() {
$echoStr = $_GET["echostr"];
//valid signature , option
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
}
//检查签名
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
}
1 1 1 8
1 1 1 11
1 1 1 12
1 1 1 13
1 1 2 6
1 1 2 7
1 1 2 8
1 1 2 9
1 1 2 10
1 1 2 11
1 1 2 12
1 1 2 13
1 1 3 4
1 1 3 5
1 1 3 6
1 1 3 7
1 1 3 8
1 1 3 9
1 1 3 10
1 1 3 11
1 1 3 12
1 1 3 13
1 1 4 4
1 1 4 5
1 1 4 6
1 1 4 7
1 1 4 8
1 1 4 9
1 1 4 10
1 1 4 12
1 1 5 5
1 1 5 6
1 1 5 7
1 1 5 8
1 1 6 6
1 1 6 8
1 1 6 9
1 1 6 12
1 1 7 10
1 1 8 8
1 1 9 13
1 1 10 12
1 1 10 13
1 1 11 11
1 1 11 12
1 1 11 13
1 1 12 12
1 1 12 13
1 1 13 13
1 2 2 4
1 2 2 5
1 2 2 6
1 2 2 7
1 2 2 8
1 2 2 9
1 2 2 10
1 2 2 11
1 2 2 12
1 2 2 13
1 2 3 3
1 2 3 4
1 2 3 5
1 2 3 6
1 2 3 7
1 2 3 8
1 2 3 9
1 2 3 10
1 2 3 11
1 2 3 12
1 2 3 13
1 2 4 4
1 2 4 5
1 2 4 6
1 2 4 7
1 2 4 8
1 2 4 9
1 2 4 10
1 2 4 11
1 2 4 12
1 2 4 13
1 2 5 5
1 2 5 6
1 2 5 7
1 2 5 8
1 2 5 9
1 2 5 10
1 2 5 12
1 2 5 13
1 2 6 6
1 2 6 7
1 2 6 8
1 2 6 9
1 2 6 10
1 2 6 11
1 2 6 12
1 2 6 13
1 2 7 7
1 2 7 8
1 2 7 9
1 2 7 10
1 2 7 11
1 2 7 12
1 2 8 8
1 2 8 9
1 2 8 10
1 2 8 13
1 2 9 11
1 2 9 12
1 2 9 13
1 2 10 11
1 2 10 12
1 2 10 13
1 2 11 11
1 2 11 12
1 2 11 13
1 2 12 12
1 2 12 13
1 2 13 13
1 3 3 3
1 3 3 4
1 3 3 5
1 3 3 6
1 3 3 7
1 3 3 8
1 3 3 9
1 3 3 10
1 3 3 11
1 3 3 12
1 3 4 4
1 3 4 5
1 3 4 6
1 3 4 7
1 3 4 8
1 3 4 9
1 3 4 10
1 3 4 11
1 3 4 12
1 3 4 13
1 3 5 6
1 3 5 7
1 3 5 8
1 3 5 9
1 3 5 10
1 3 5 11
1 3 5 12
1 3 5 13
1 3 6 6
1 3 6 7
1 3 6 8
1 3 6 9
1 3 6 10
1 3 6 11
1 3 6 12
1 3 6 13
1 3 7 7
1 3 7 8
1 3 7 9
1 3 7 10
1 3 7 12
1 3 7 13
1 3 8 8
1 3 8 9
1 3 8 10
1 3 8 11
1 3 8 12
1 3 8 13
1 3 9 9
1 3 9 10
1 3 9 11
1 3 9 12
1 3 9 13
1 3 10 10
1 3 10 11
1 3 10 12
1 3 11 11
1 3 11 12
1 3 12 12
1 3 12 13
1 3 13 13
1 4 4 4
1 4 4 5
1 4 4 6
1 4 4 7
1 4 4 8
1 4 4 9
1 4 4 10
1 4 4 11
1 4 4 12
1 4 5 5
1 4 5 6
1 4 5 7
1 4 5 8
1 4 5 9
1 4 5 10
1 4 5 11
1 4 5 12
1 4 5 13
1 4 6 6
1 4 6 7
1 4 6 8
1 4 6 9
1 4 6 10
1 4 6 11
1 4 6 12
1 4 6 13
1 4 7 7
1 4 7 8
1 4 7 9
1 4 7 11
1 4 7 12
1 4 7 13
1 4 8 8
1 4 8 9
1 4 8 11
1 4 8 12
1 4 8 13
1 4 9 10
1 4 9 11
1 4 9 12
1 4 9 13
1 4 10 10
1 4 10 11
1 4 10 12
1 4 12 12
1 5 5 5
1 5 5 6
1 5 5 9
1 5 5 10
1 5 5 11
1 5 5 12
1 5 5 13
1 5 6 6
1 5 6 7
1 5 6 8
1 5 6 9
1 5 6 10
1 5 6 11
1 5 6 12
1 5 6 13
1 5 7 8
1 5 7 9
1 5 7 10
1 5 7 11
1 5 7 12
1 5 7 13
1 5 8 8
1 5 8 9
1 5 8 10
1 5 8 11
1 5 8 12
1 5 8 13
1 5 9 9
1 5 9 10
1 5 9 11
1 5 9 12
1 5 9 13
1 5 10 10
1 5 10 11
1 5 10 12
1 5 10 13
1 5 11 11
1 5 11 12
1 5 12 12
1 6 6 6
1 6 6 8
1 6 6 9
1 6 6 10
1 6 6 11
1 6 6 12
1 6 6 13
1 6 7 9
1 6 7 10
1 6 7 11
1 6 7 12
1 6 8 8
1 6 8 9
1 6 8 10
1 6 8 11
1 6 8 12
1 6 8 13
1 6 9 9
1 6 9 10
1 6 9 12
1 6 9 13
1 6 10 12
1 6 10 13
1 6 11 12
1 6 11 13
1 6 12 12
1 6 12 13
1 7 7 9
1 7 7 10
1 7 7 11
1 7 7 12
1 7 8 8
1 7 8 9
1 7 8 10
1 7 8 11
1 7 8 12
1 7 9 9
1 7 9 10
1 7 9 11
1 7 9 12
1 7 9 13
1 7 10 12
1 7 10 13
1 7 12 12
1 7 12 13
1 7 13 13
1 8 8 8
1 8 8 9
1 8 8 10
1 8 8 11
1 8 8 12
1 8 9 11
1 8 9 12
1 8 9 13
1 8 10 11
1 8 10 12
1 8 10 13
1 8 11 12
1 8 11 13
1 8 12 12
1 9 9 12
1 9 10 12
1 9 10 13
1 9 11 11
1 9 11 12
1 9 11 13
1 9 12 12
1 10 10 12
1 10 11 12
1 10 12 12
1 10 12 13
1 11 11 12
1 11 11 13
1 11 12 12
1 11 12 13
1 11 13 13
1 12 12 12
1 12 12 13
1 12 13 13
2 2 2 3
2 2 2 4
2 2 2 5
2 2 2 7
2 2 2 8
2 2 2 9
2 2 2 10
2 2 2 11
2 2 2 12
2 2 2 13
2 2 3 3
2 2 3 4
2 2 3 5
2 2 3 6
2 2 3 7
2 2 3 8
2 2 3 9
2 2 3 10
2 2 3 11
2 2 3 12
2 2 3 13
2 2 4 4
2 2 4 5
2 2 4 6
2 2 4 7
2 2 4 8
2 2 4 9
2 2 4 10
2 2 4 11
2 2 4 12
2 2 4 13
2 2 5 5
2 2 5 6
2 2 5 7
2 2 5 8
2 2 5 9
2 2 5 10
2 2 5 11
2 2 5 12
2 2 6 6
2 2 6 7
2 2 6 8
2 2 6 9
2 2 6 10
2 2 6 11
2 2 6 12
2 2 6 13
2 2 7 7
2 2 7 8
2 2 7 10
2 2 7 12
2 2 7 13
2 2 8 8
2 2 8 9
2 2 8 10
2 2 8 12
2 2 9 10
2 2 9 11
2 2 9 12
2 2 10 10
2 2 10 11
2 2 10 13
2 2 11 11
2 2 11 12
2 2 11 13
2 2 12 12
2 2 12 13
2 2 13 13
2 3 3 3
2 3 3 5
2 3 3 6
2 3 3 7
2 3 3 8
2 3 3 9
2 3 3 10
2 3 3 11
2 3 3 12
2 3 3 13
2 3 4 4
2 3 4 5
2 3 4 6
2 3 4 7
2 3 4 8
2 3 4 9
2 3 4 10
2 3 4 11
2 3 4 12
2 3 4 13
2 3 5 5
2 3 5 6
2 3 5 7
2 3 5 8
2 3 5 9
2 3 5 10
2 3 5 11
2 3 5 12
2 3 5 13
2 3 6 6
2 3 6 7
2 3 6 8
2 3 6 9
2 3 6 10
2 3 6 11
2 3 6 12
2 3 6 13
2 3 7 7
2 3 7 8
2 3 7 9
2 3 7 10
2 3 7 11
2 3 7 12
2 3 7 13
2 3 8 8
2 3 8 9
2 3 8 10
2 3 8 11
2 3 8 12
2 3 8 13
2 3 9 9
2 3 9 10
2 3 9 12
2 3 9 13
2 3 10 10
2 3 10 12
2 3 10 13
2 3 11 11
2 3 11 12
2 3 11 13
2 3 12 12
2 3 12 13
2 3 13 13
2 4 4 4
2 4 4 5
2 4 4 6
2 4 4 7
2 4 4 8
2 4 4 9
2 4 4 10
2 4 4 11
2 4 4 12
2 4 4 13
2 4 5 5
2 4 5 6
2 4 5 7
2 4 5 8
2 4 5 9
2 4 5 10
2 4 5 11
2 4 5 12
2 4 5 13
2 4 6 6
2 4 6 7
2 4 6 8
2 4 6 9
2 4 6 10
2 4 6 11
2 4 6 12
2 4 6 13
2 4 7 7
2 4 7 8
2 4 7 9
2 4 7 10
2 4 7 11
2 4 7 12
2 4 8 8
2 4 8 9
2 4 8 10
2 4 8 11
2 4 8 12
2 4 8 13
2 4 9 9
2 4 9 10
2 4 9 12
2 4 9 13
2 4 10 10
2 4 10 11
2 4 10 12
2 4 10 13
2 4 11 11
2 4 11 12
2 4 12 12
2 4 13 13
2 5 5 7
2 5 5 8
2 5 5 9
2 5 5 10
2 5 5 11
2 5 5 12
2 5 5 13
2 5 6 6
2 5 6 7
2 5 6 8
2 5 6 9
2 5 6 10
2 5 6 11
2 5 6 12
2 5 6 13
2 5 7 7
2 5 7 8
2 5 7 9
2 5 7 10
2 5 7 11
2 5 7 13
2 5 8 8
2 5 8 9
2 5 8 10
2 5 8 11
2 5 8 12
2 5 8 13
2 5 9 10
2 5 9 11
2 5 9 12
2 5 10 10
2 5 10 11
2 5 10 12
2 5 10 13
2 5 11 12
2 5 12 12
2 5 12 13
2 6 6 6
2 6 6 7
2 6 6 8
2 6 6 9
2 6 6 10
2 6 6 11
2 6 6 12
2 6 6 13
2 6 7 8
2 6 7 9
2 6 7 10
2 6 7 11
2 6 7 12
2 6 7 13
2 6 8 8
2 6 8 9
2 6 8 10
2 6 8 11
2 6 8 12
2 6 8 13
2 6 9 9
2 6 9 10
2 6 9 11
2 6 9 12
2 6 10 10
2 6 10 11
2 6 10 12
2 6 10 13
2 6 11 12
2 6 11 13
2 6 12 12
2 6 12 13
2 7 7 8
2 7 7 10
2 7 7 11
2 7 7 12
2 7 7 13
2 7 8 8
2 7 8 9
2 7 8 11
2 7 8 12
2 7 8 13
2 7 9 10
2 7 9 11
2 7 9 13
2 7 10 10
2 7 10 11
2 7 10 12
2 7 11 12
2 7 12 12
2 7 12 13
2 8 8 8
2 8 8 9
2 8 8 10
2 8 8 11
2 8 8 12
2 8 8 13
2 8 9 9
2 8 9 10
2 8 9 11
2 8 9 12
2 8 9 13
2 8 10 10
2 8 10 11
2 8 10 12
2 8 10 13
2 8 11 11
2 8 11 12
2 8 12 12
2 8 12 13
2 8 13 13
2 9 9 11
2 9 9 12
2 9 9 13
2 9 10 10
2 9 10 11
2 9 10 12
2 9 10 13
2 9 11 11
2 9 11 13
2 9 12 13
2 9 13 13
2 10 10 11
2 10 10 12
2 10 10 13
2 10 11 11
2 10 11 12
2 10 11 13
2 10 12 13
2 11 11 11
2 11 11 12
2 11 11 13
2 11 12 12
2 11 12 13
2 11 13 13
2 12 12 12
2 12 12 13
2 12 13 13
2 13 13 13
3 3 3 3
3 3 3 4
3 3 3 5
3 3 3 6
3 3 3 7
3 3 3 8
3 3 3 9
3 3 3 10
3 3 3 11
3 3 3 12
3 3 4 4
3 3 4 5
3 3 4 6
3 3 4 7
3 3 4 8
3 3 4 9
3 3 4 11
3 3 4 12
3 3 4 13
3 3 5 5
3 3 5 6
3 3 5 7
3 3 5 9
3 3 5 10
3 3 5 12
3 3 5 13
3 3 6 6
3 3 6 7
3 3 6 8
3 3 6 9
3 3 6 10
3 3 6 11
3 3 6 12
3 3 6 13
3 3 7 7
3 3 7 8
3 3 7 9
3 3 7 11
3 3 7 12
3 3 7 13
3 3 8 8
3 3 8 9
3 3 8 10
3 3 8 12
3 3 8 13
3 3 9 9
3 3 9 10
3 3 9 11
3 3 9 12
3 3 9 13
3 3 10 13
3 3 11 12
3 3 11 13
3 3 12 12
3 3 12 13
3 4 4 4
3 4 4 5
3 4 4 6
3 4 4 7
3 4 4 8
3 4 4 9
3 4 4 10
3 4 4 11
3 4 4 12
3 4 4 13
3 4 5 5
3 4 5 6
3 4 5 7
3 4 5 8
3 4 5 9
3 4 5 10
3 4 5 11
3 4 5 12
3 4 5 13
3 4 6 6
3 4 6 8
3 4 6 9
3 4 6 10
3 4 6 11
3 4 6 12
3 4 6 13
3 4 7 7
3 4 7 8
3 4 7 9
3 4 7 10
3 4 7 11
3 4 7 12
3 4 8 9
3 4 8 10
3 4 8 11
3 4 8 12
3 4 8 13
3 4 9 9
3 4 9 11
3 4 9 12
3 4 9 13
3 4 10 10
3 4 10 12
3 4 10 13
3 4 11 12
3 4 11 13
3 4 12 12
3 4 12 13
3 5 5 6
3 5 5 7
3 5 5 8
3 5 5 9
3 5 5 11
3 5 5 12
3 5 6 6
3 5 6 7
3 5 6 8
3 5 6 9
3 5 6 10
3 5 6 11
3 5 6 12
3 5 6 13
3 5 7 8
3 5 7 9
3 5 7 10
3 5 7 11
3 5 7 12
3 5 7 13
3 5 8 8
3 5 8 9
3 5 8 11
3 5 8 12
3 5 8 13
3 5 9 9
3 5 9 10
3 5 9 12
3 5 9 13
3 5 10 10
3 5 10 11
3 5 10 12
3 5 10 13
3 5 11 11
3 5 11 12
3 5 12 12
3 5 12 13
3 5 13 13
3 6 6 6
3 6 6 7
3 6 6 8
3 6 6 9
3 6 6 10
3 6 6 11
3 6 6 12
3 6 6 13
3 6 7 7
3 6 7 8
3 6 7 9
3 6 7 10
3 6 7 12
3 6 7 13
3 6 8 8
3 6 8 9
3 6 8 10
3 6 8 12
3 6 8 13
3 6 9 9
3 6 9 10
3 6 9 11
3 6 9 12
3 6 9 13
3 6 10 10
3 6 10 11
3 6 10 12
3 6 11 11
3 6 11 12
3 6 11 13
3 6 12 12
3 6 12 13
3 6 13 13
3 7 7 7
3 7 7 8
3 7 7 9
3 7 7 10
3 7 7 12
3 7 7 13
3 7 8 8
3 7 8 9
3 7 8 11
3 7 8 12
3 7 8 13
3 7 9 9
3 7 9 10
3 7 9 11
3 7 9 12
3 7 9 13
3 7 10 10
3 7 10 11
3 7 10 13
3 7 11 11
3 7 11 12
3 7 12 12
3 7 12 13
3 7 13 13
3 8 8 8
3 8 8 9
3 8 8 10
3 8 8 11
3 8 8 12
3 8 9 9
3 8 9 10
3 8 9 11
3 8 9 12
3 8 9 13
3 8 10 10
3 8 10 11
3 8 10 12
3 8 11 11
3 8 11 12
3 8 12 12
3 8 12 13
3 8 13 13
3 9 9 9
3 9 9 10
3 9 9 11
3 9 9 12
3 9 9 13
3 9 10 10
3 9 10 11
3 9 10 12
3 9 10 13
3 9 11 11
3 9 11 12
3 9 11 13
3 9 12 12
3 9 12 13
3 9 13 13
3 10 10 12
3 10 11 12
3 10 11 13
3 11 11 12
3 11 12 12
3 12 12 12
3 12 12 13
3 12 13 13
4 4 4 4
4 4 4 5
4 4 4 6
4 4 4 7
4 4 4 8
4 4 4 9
4 4 4 10
4 4 4 11
4 4 4 12
4 4 5 5
4 4 5 6
4 4 5 7
4 4 5 8
4 4 5 10
4 4 5 11
4 4 5 12
4 4 5 13
4 4 6 8
4 4 6 9
4 4 6 10
4 4 6 11
4 4 6 12
4 4 6 13
4 4 7 7
4 4 7 8
4 4 7 9
4 4 7 10
4 4 7 12
4 4 7 13
4 4 8 8
4 4 8 9
4 4 8 10
4 4 8 11
4 4 8 12
4 4 8 13
4 4 9 11
4 4 9 12
4 4 10 10
4 4 10 12
4 4 10 13
4 4 11 12
4 4 11 13
4 4 12 12
4 4 12 13
4 5 5 5
4 5 5 6
4 5 5 7
4 5 5 8
4 5 5 9
4 5 5 10
4 5 6 6
4 5 6 7
4 5 6 8
4 5 6 9
4 5 6 10
4 5 6 11
4 5 6 12
4 5 6 13
4 5 7 7
4 5 7 8
4 5 7 9
4 5 7 10
4 5 7 11
4 5 7 12
4 5 7 13
4 5 8 8
4 5 8 9
4 5 8 10
4 5 8 11
4 5 8 12
4 5 8 13
4 5 9 9
4 5 9 10
4 5 9 12
4 5 9 13
4 5 10 10
4 5 10 11
4 5 10 12
4 5 10 13
4 5 11 11
4 5 11 12
4 5 11 13
4 5 12 12
4 5 12 13
4 5 13 13
4 6 6 6
4 6 6 7
4 6 6 8
4 6 6 9
4 6 6 10
4 6 6 12
4 6 7 7
4 6 7 8
4 6 7 9
4 6 7 10
4 6 7 12
4 6 8 8
4 6 8 9
4 6 8 10
4 6 8 12
4 6 8 13
4 6 9 9
4 6 9 10
4 6 9 12
4 6 9 13
4 6 10 10
4 6 10 11
4 6 10 12
4 6 11 11
4 6 11 12
4 6 12 12
4 6 12 13
4 6 13 13
4 7 7 7
4 7 7 8
4 7 7 11
4 7 8 8
4 7 8 9
4 7 8 10
4 7 8 11
4 7 8 12
4 7 8 13
4 7 9 9
4 7 9 10
4 7 9 11
4 7 9 12
4 7 9 13
4 7 10 10
4 7 10 11
4 7 10 12
4 7 11 11
4 7 11 12
4 7 11 13
4 7 12 12
4 7 12 13
4 7 13 13
4 8 8 8
4 8 8 9
4 8 8 10
4 8 8 11
4 8 8 12
4 8 8 13
4 8 9 9
4 8 9 10
4 8 9 11
4 8 9 12
4 8 9 13
4 8 10 10
4 8 10 11
4 8 10 12
4 8 11 11
4 8 11 12
4 8 11 13
4 8 12 12
4 8 12 13
4 8 13 13
4 9 9 10
4 9 9 12
4 9 10 11
4 9 10 12
4 9 10 13
4 9 11 11
4 9 11 12
4 9 12 12
4 10 10 11
4 10 10 12
4 10 11 12
4 10 11 13
4 10 12 12
4 10 12 13
4 11 12 13
4 12 12 12
5 5 5 5
5 5 5 6
5 5 5 9
5 5 5 12
5 5 6 6
5 5 6 7
5 5 6 8
5 5 6 11
5 5 7 7
5 5 7 8
5 5 7 10
5 5 7 11
5 5 8 8
5 5 8 9
5 5 8 10
5 5 8 11
5 5 8 12
5 5 8 13
5 5 9 9
5 5 9 10
5 5 9 11
5 5 10 10
5 5 10 11
5 5 10 13
5 5 11 11
5 5 11 12
5 5 11 13
5 5 12 12
5 5 12 13
5 5 13 13
5 6 6 6
5 6 6 7
5 6 6 8
5 6 6 9
5 6 6 10
5 6 6 12
5 6 7 7
5 6 7 8
5 6 7 9
5 6 7 12
5 6 7 13
5 6 8 8
5 6 8 9
5 6 8 10
5 6 8 12
5 6 8 13
5 6 9 9
5 6 9 10
5 6 9 11
5 6 9 12
5 6 9 13
5 6 10 10
5 6 10 11
5 6 10 12
5 6 10 13
5 6 11 11
5 6 11 12
5 6 11 13
5 6 12 12
5 6 12 13
5 6 13 13
5 7 7 9
5 7 7 10
5 7 7 11
5 7 8 8
5 7 8 9
5 7 8 10
5 7 9 10
5 7 9 11
5 7 9 12
5 7 9 13
5 7 10 10
5 7 10 11
5 7 10 12
5 7 10 13
5 7 11 11
5 7 11 13
5 7 12 12
5 7 13 13
5 8 8 8
5 8 8 9
5 8 8 10
5 8 8 13
5 8 9 11
5 8 9 12
5 8 9 13
5 8 10 11
5 8 10 12
5 8 11 12
5 8 11 13
5 8 12 12
5 9 9 11
5 9 9 12
5 9 10 10
5 9 10 11
5 9 10 13
5 9 11 13
5 9 12 12
5 9 12 13
5 10 10 11
5 10 10 12
5 10 10 13
5 10 11 11
5 10 12 13
5 10 13 13
5 11 12 12
6 6 6 6
6 6 6 8
6 6 6 9
6 6 6 10
6 6 6 11
6 6 6 12
6 6 7 9
6 6 7 10
6 6 7 11
6 6 7 12
6 6 8 8
6 6 8 9
6 6 8 10
6 6 8 11
6 6 8 12
6 6 8 13
6 6 9 10
6 6 9 11
6 6 9 12
6 6 9 13
6 6 10 12
6 6 10 13
6 6 11 12
6 6 11 13
6 6 12 12
6 6 12 13
6 7 7 10
6 7 7 11
6 7 8 9
6 7 8 10
6 7 8 11
6 7 8 12
6 7 9 9
6 7 9 12
6 7 10 10
6 7 10 12
6 7 10 13
6 7 11 11
6 7 11 12
6 7 11 13
6 7 12 12
6 7 12 13
6 8 8 8
6 8 8 9
6 8 8 10
6 8 8 11
6 8 8 12
6 8 9 9
6 8 9 10
6 8 9 11
6 8 9 12
6 8 9 13
6 8 10 11
6 8 10 12
6 8 10 13
6 8 11 11
6 8 11 12
6 8 11 13
6 8 12 12
6 8 13 13
6 9 9 10
6 9 9 11
6 9 9 12
6 9 10 11
6 9 10 12
6 9 11 12
6 9 11 13
6 9 12 12
6 9 12 13
6 10 10 10
6 10 10 13
6 10 11 12
6 10 12 12
6 10 12 13
6 11 11 12
6 11 12 12
6 11 12 13
6 12 12 12
6 12 12 13
6 12 13 13
7 7 7 12
7 7 8 11
7 7 9 10
7 7 10 13
7 7 11 12
7 7 11 13
7 7 12 12
7 7 12 13
7 8 8 9
7 8 8 10
7 8 8 11
7 8 8 12
7 8 8 13
7 8 9 10
7 8 9 12
7 8 9 13
7 8 10 10
7 8 10 11
7 8 10 13
7 8 11 12
7 8 11 13
7 8 12 12
7 8 12 13
7 9 9 13
7 9 10 11
7 9 10 12
7 9 11 11
7 9 11 12
7 9 12 12
7 9 13 13
7 10 10 11
7 10 10 12
7 10 11 13
7 10 12 12
7 10 12 13
7 12 12 13
8 8 8 10
8 8 8 11
8 8 8 12
8 8 8 13
8 8 9 11
8 8 9 12
8 8 9 13
8 8 10 12
8 8 10 13
8 8 11 12
8 8 11 13
8 8 12 12
8 8 12 13
8 9 9 12
8 9 10 12
8 9 10 13
8 9 11 11
8 9 11 12
8 9 11 13
8 9 12 12
8 9 12 13
8 10 10 12
8 10 11 11
8 10 12 12
8 10 12 13
8 10 13 13
8 11 12 12
9 9 9 12
9 9 10 13
9 9 11 12
9 9 11 13
9 9 12 12
9 9 12 13
9 10 10 13
9 10 11 12
9 10 11 13
9 10 12 12
9 10 12 13
9 11 11 11
9 11 12 12
9 11 12 13
9 11 13 13
9 12 12 12
10 10 10 12
10 10 10 13
10 10 11 12
10 10 11 13
10 10 12 12
10 10 12 13
10 11 11 12
10 11 11 13
10 11 12 12
10 11 12 13
10 12 12 12
10 12 12 13
10 12 13 13
10 13 13 13
11 11 11 12
11 11 11 13
11 11 12 12
11 11 12 13
11 12 12 12
11 12 12 13
11 12 13 13
11 13 13 13
12 12 12 12
12 12 12 13
12 12 13 13
12 13 13 13