【问题标题】:Flames Logic in PHPPHP中的火焰逻辑
【发布时间】:2015-01-18 18:44:20
【问题描述】:

你们都必须了解火焰游戏逻辑 http://flamesgame.appspot.com/algorithm.. 我正在尝试在 php 中实现这一点。 我最终写这段代码的地方.. 但对于每个字符串,我只将 ans 设为“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;
            }


    ?>`

【问题讨论】:

  • 天哪!我们真的“所有人都必须了解烈火游戏的逻辑”吗?我不是!现在呢?

标签: php logic


【解决方案1】:

这里您使用 $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)等于0的值。

$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));

【讨论】:

  • 那么我需要改变什么?
  • 将 $flame[$diff] 更改为 $flame 或其他变量名,或者在其他任何地方将 $fame 称为数组。喜欢 $flame[0]。
  • 我试过了,但是没用。您可以将新代码粘贴到您所指的更改中吗?
  • 我不知道火焰游戏是什么。但我相当肯定你还有更多的问题。您需要准确解释游戏的运作方式。
  • 我从头开始重新编写代码。没有 IF 或 ELSE 控制结构。
【解决方案2】:
$diff = $result % strlen($flame);

代码错误,使用

$diff = count($result) % strlen($flame);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2015-03-16
    • 2017-07-08
    • 2011-05-25
    • 2019-11-29
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多