嗨,我正在做一个脚本来预测下一个数字,但是我无法让它运行……
我需要什么?一种脚本,用来预测儿童数学问题中的下一个数字,但范围更广。
下面是+ 3 + 3,模式是"+3"
这是+ 6 - 5 + 6 - 5,模式是"+6-5"
这里是+ 14 - 8 + 5 + 91 - 52 + 5 + 399....,但模式是"* 8 / 2 + 5"
脚本需要返回下一个数字“可能”和检测到的模式。
这是为了教育目的。
发布于 2017-10-23 10:23:19
我认为用纯PHP编写它是一个挑战,所以我的结果类是:
class Predict {
private $nums = array();
private $rawPattern = array();
function __construct($nums) {
$this->nums = $nums;
$this->createPattern();
}
private function patternPart($num) {
if($num >= 0) {
$patternPart = "+{$num}";
} else {
$patternPart = "{$num}";
}
return $patternPart;
}
private function createPattern() {
foreach($this->nums as $key => $num) {
if($key > 0) {
$prev = $this->nums[$key - 1];
$diff = $num - $prev;
$this->rawPattern[] = $this->patternPart($diff);
}
}
}
function getPattern($del = ' ') {
$first = reset($this->rawPattern);
// When all values are same just print the first one
if(count(array_unique($this->rawPattern)) === 1 && end($this->rawPattern) === $first) {
return $first;
} else {
$resultPattern = array();
$patternToAppend = array();
$doCheckIndex = 0;
foreach($this->rawPattern as $key => $part) {
if($key == 0) {
$resultPattern[] = $part;
} else {
$checkNum = $this->rawPattern[$doCheckIndex];
if($checkNum == $part) {
$patternToAppend[] = $part;
$doCheckIndex++;
} else {
$patternToAppend[] = $part;
$doCheckIndex = 0;
if(!empty($patternToAppend)) {
$resultPattern = array_merge($resultPattern, $patternToAppend);
$patternToAppend = array();
}
}
}
}
return implode($del, $resultPattern);
}
}
}我用你的价值观试了一下,所以这些都是结果:
$nums1 = new Predict(array(3, 6, 9));
$nums2 = new Predict(array(4, 10, 5, 11, 6));
$nums3 = new Predict(array(2, 16, 8, 13, 104, 52, 57, 456));
echo $nums1->getPattern(); // prints +3
echo $nums2->getPattern(); // prints +6 -5
echo $nums3->getPattern(); // prints +14 -8 +5 +91 -52 +5 +399嗯,我不是最好的开发人员,但似乎在工作。只要尝试更多的选择或其他什么,当它不起作用时,让我知道(也许我会再找时间)。
https://stackoverflow.com/questions/46885918
复制相似问题