首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找高分的优化逻辑

寻找高分的优化逻辑
EN

Stack Overflow用户
提问于 2012-10-17 12:54:42
回答 4查看 99关注 0票数 0

基本上,这与我们有2分的壁球应用程序有关。一种是从赢家的角度出发,另一种是从失败者的角度出发。

例如:Score1: 11-5,11-5,11-5 (赢家观点) Score2: 5-11, 5-11,5-11(输家观点)

现在在我的逻辑中,我想找出哪个是赢家的分数,哪个是输家的分数。

我已经用下面的方式写了我的逻辑,它确实起作用了。但我想知道他们是否有其他更好的/优化的方式来写这篇文章。

代码语言:javascript
运行
复制
$high1 = 0;
$high2 = 0;

$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";

$score1Array = explode(",",$score1);

$size = sizeof($score1Array);

for($i = 0; $i < $size; $i++) {

$checkscore1 = explode("-",$score1Array[$i]);


if($checkscore1[0] < $checkscore1[1]) {

    $high1++;

}else if($checkscore1[0] > $checkscore1[1]) {

    $high2++;

}


}

if($high1 > $high2) {

$winningScore = $score2;
$losingScore = $score1;
}else{

$winningScore = $score1;
$losingScore = $score2;
}

echo $winningscore;
echo $losingscore;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-17 13:08:33

下面这样的内容如何:

代码语言:javascript
运行
复制
function is_winning($score) {

  $split_scores = preg_split('/(-|,)/', $score);
  $wins = $losses = 0;

  for($i = 0; $i < count($split_scores) / 2; $i += 2) {
    if($split_scores[$i] > $split_scores[$i + 1])
      $wins++;
    if($split_scores[$i] < $split_scores[$i + 1])
      $losses++;
  }

  return $wins > $losses;

}

假设$score的格式如您的问题所示。然后您可以像这样使用它:

代码语言:javascript
运行
复制
$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";

if(is_winning($score1)) {
  $winning_score = $score1;
  $losing_score = $score2;
} else {
  $winning_score = $score2;
  $losing_score = $score1;
}

echo $winning_score;
echo $losing_score;

其思想是将分数分成一个数组,其中偶数编号的索引具有左边的分数,奇数编号的索引具有右边的分数。然后我们计算获胜和失败的数量。如果赢的比输的多,那么我们返回true,因为这个分数是一个获胜的分数。如果没有更多的胜利而不是损失,我们只会返回false。

票数 1
EN

Stack Overflow用户

发布于 2012-10-17 13:01:13

对于获胜者的观点,所有的大分数都在左边,否则在右边。所以你只能检测到第一个分数。

代码语言:javascript
运行
复制
$score1Array = explode(",",$score1);
$checkscore1 = explode("-",$score1Array[$i]);
if($checkscore1[0] < $checkscore1[1]) {
    echo $score2;
    echo $score1;
}else{
    echo $score1;
    echo $score2;
}

修复:上面的代码是错误的,试试这个:

代码语言:javascript
运行
复制
$score1value = eval(str_replace(",","+",$score1));
$score2value = eval(str_replace(",","+",$score2));

if($score1value < $score2value) {
    echo $score2;
    echo $score1;
}else{
    echo $score1;
    echo $score2;
}
票数 0
EN

Stack Overflow用户

发布于 2012-10-17 14:00:57

这应该是可行的

代码语言:javascript
运行
复制
$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";
$l = $r = 0;

$score1_sets_arr = explode(',', $score1);
foreach ($score1_sets_arr as $set_score) {
  $set_score_arr = explode('-', $set_score);
  if ($set_score_arr[0] > $set_score_arr[1]) {
    $l++;
  } else {
    $r++;
  }
}

if ($l > $r) {
  $winning_score = $score1;
  $losing_score  = $score2;
} else {
  $winning_score = $score2;
  $losing_score  = $score1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12927366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档