PHP 中的火焰逻辑
Flames Logic in PHP
火焰游戏逻辑大家应该都知道吧
http://flamesgame.appspot.com/algorithm..
我正在尝试在 php 中实现它。
我最终写这段代码的地方..
但是对于每个字符串,我只得到 "S" 的答案。
无法弄清楚出了什么问题。
我坚持使用火焰主要逻辑部分。
any1 可以查看任何告诉我哪里出错了吗?
`
$var1 = "pradeep"; // string1
$var2 = "neelam"; // string2
$arr1 = str_split($var1);
$arr2 = str_split($var2);
/* compairing each elemnt on string1 with string2 */
for ($i = 0; $i < strlen($var1); $i++) {
for ($j = 0; $j < strlen($var2); $j++)
if ($arr1[$i] == $arr2[$j]) {
unset($arr1[$i]);
unset($arr2[$j]);
break;
}
}
$result = array_merge($arr1, $arr2);
echo count( $result);
$flame = "flames";
/* Flames Main Logic */
for ($i = strlen($flame); $i > 1; $i--) {
$diff = $result % strlen($flame);
if ($diff == 0) {
$diff = strlen($flame) - 1;
} else {
$diff--;
}
$flame[$diff] = "@";
list($f1, $f2) = preg_split("/@/", $flame);
$flame = $f2 . $f1;
}
switch ($flame) {
case f:
echo "You are now Friends";
break;
case l:
echo "You are now Lovers";
break;
case a:
echo "You are now Ancestors";
break;
case m:
echo "You are now Married";
break;
case e:
echo "You are now Enemy";
break;
case s:
echo "You are now Sister";
break;
}
?>`
此处您将 $flame 用作数组而不是字符串。
当作为字符串求值时,您可能只会得到 $flame 数组的第一个元素。
$flame[$diff] = "@";
我会这样做:
处理时间:70 微秒。(0.00007 秒)
我喜欢编写没有 if else 控制结构的代码。
此代码已经过测试。
$flames = str_split(' FLAMES');
$matrix[6] = array(6,1,2,3,4,5);$matrix[5] = array(5,1,2,3,4);$matrix[4]array(4,1,2,3);$matrix[3] = array(3,1,2);$matrix[2] = array(2,1);
$flame = array('Solo','F'=>'Friendship','L'=>'Love','A'=>'Affection','M'=>'Marriage','E'=>'Enemy','S'=>'Sister','');
$names = str_split($name1 . $name2);
$values = array_count_values($names);
foreach ($values as $k => $val){$letters[$val][] = $k;}
$cnt = count($letters[1]);
$ndx = 6;
$loop = 7;
while($loop-- > 2){
$ndx = $matrix[$loop][($cnt + $ndx) %$loop ] ;
$flames[0] = $flames[$ndx--];
$flames = array_values(array_unique($flames));
}
echo "\n<p>Result: " . $flame[$flames[1]] . '</p>';
备注:
$flames = str_split(' FLAMES');
相当于
array(' ','F','L','A','M','W','S')
Matrix array
是改变索引指针($ndx
)为零的值。
$flame
数组是将最后一个Letter转换为Result Term
str_split
,从字符串中创建一个数组,每个数组元素一个字符。
$names = str_split($name1 . $name2);
array_count_values
得到每个字母的个数。
$values = array_count_values($names);
这将创建一个多维数组,其中字母数是关键。
letter[1] 包含唯一字母(count [1])。
foreach ($values as $k => $val){$letters[$val][] = $k;}
然后计算唯一字母的数量。
$cnt = count($letters[1]);
找到要消除的字母,然后将该字符放入数组元素 0
$ndx = $matrix[$loop][($cnt + $ndx) %$loop ] ;
$flames[0] = $flames[$ndx--];
然后array_unique消除匹配元素[0]
的字母
array_values 将键从 0 重新编号为剩余字母数。
$flames = array_values(array_unique($flames));
$diff = $result % strlen($flame);
代码错误,使用
$diff = count($result) % strlen($flame);
火焰游戏逻辑大家应该都知道吧 http://flamesgame.appspot.com/algorithm.. 我正在尝试在 php 中实现它。 我最终写这段代码的地方.. 但是对于每个字符串,我只得到 "S" 的答案。 无法弄清楚出了什么问题。 我坚持使用火焰主要逻辑部分。 any1 可以查看任何告诉我哪里出错了吗?
`
$var1 = "pradeep"; // string1
$var2 = "neelam"; // string2
$arr1 = str_split($var1);
$arr2 = str_split($var2);
/* compairing each elemnt on string1 with string2 */
for ($i = 0; $i < strlen($var1); $i++) {
for ($j = 0; $j < strlen($var2); $j++)
if ($arr1[$i] == $arr2[$j]) {
unset($arr1[$i]);
unset($arr2[$j]);
break;
}
}
$result = array_merge($arr1, $arr2);
echo count( $result);
$flame = "flames";
/* Flames Main Logic */
for ($i = strlen($flame); $i > 1; $i--) {
$diff = $result % strlen($flame);
if ($diff == 0) {
$diff = strlen($flame) - 1;
} else {
$diff--;
}
$flame[$diff] = "@";
list($f1, $f2) = preg_split("/@/", $flame);
$flame = $f2 . $f1;
}
switch ($flame) {
case f:
echo "You are now Friends";
break;
case l:
echo "You are now Lovers";
break;
case a:
echo "You are now Ancestors";
break;
case m:
echo "You are now Married";
break;
case e:
echo "You are now Enemy";
break;
case s:
echo "You are now Sister";
break;
}
?>`
此处您将 $flame 用作数组而不是字符串。
当作为字符串求值时,您可能只会得到 $flame 数组的第一个元素。
$flame[$diff] = "@";
我会这样做:
处理时间:70 微秒。(0.00007 秒)
我喜欢编写没有 if else 控制结构的代码。
此代码已经过测试。
$flames = str_split(' FLAMES');
$matrix[6] = array(6,1,2,3,4,5);$matrix[5] = array(5,1,2,3,4);$matrix[4]array(4,1,2,3);$matrix[3] = array(3,1,2);$matrix[2] = array(2,1);
$flame = array('Solo','F'=>'Friendship','L'=>'Love','A'=>'Affection','M'=>'Marriage','E'=>'Enemy','S'=>'Sister','');
$names = str_split($name1 . $name2);
$values = array_count_values($names);
foreach ($values as $k => $val){$letters[$val][] = $k;}
$cnt = count($letters[1]);
$ndx = 6;
$loop = 7;
while($loop-- > 2){
$ndx = $matrix[$loop][($cnt + $ndx) %$loop ] ;
$flames[0] = $flames[$ndx--];
$flames = array_values(array_unique($flames));
}
echo "\n<p>Result: " . $flame[$flames[1]] . '</p>';
备注:
$flames = str_split(' FLAMES');
相当于
array(' ','F','L','A','M','W','S')
Matrix array
是改变索引指针($ndx
)为零的值。
$flame
数组是将最后一个Letter转换为Result Term
str_split
,从字符串中创建一个数组,每个数组元素一个字符。
$names = str_split($name1 . $name2);
array_count_values
得到每个字母的个数。
$values = array_count_values($names);
这将创建一个多维数组,其中字母数是关键。
letter[1] 包含唯一字母(count [1])。
foreach ($values as $k => $val){$letters[$val][] = $k;}
然后计算唯一字母的数量。
$cnt = count($letters[1]);
找到要消除的字母,然后将该字符放入数组元素 0
$ndx = $matrix[$loop][($cnt + $ndx) %$loop ] ;
$flames[0] = $flames[$ndx--];
然后array_unique消除匹配元素[0]
array_values 将键从 0 重新编号为剩余字母数。
$flames = array_values(array_unique($flames));
$diff = $result % strlen($flame);
代码错误,使用
$diff = count($result) % strlen($flame);