【问题标题】:Scoring system for collection of numbers (serial#)数字集合评分系统(序列号)
【发布时间】:2021-07-05 14:20:00
【问题描述】:

我正在寻找一个公式 (PHP),我可以使用它来根据集合中数字的稀有度来分配分数。序列号 1 是最稀有的。

例如,我的收藏集很少。

  • 集合 1 - 项目总数 = 10(序列号 1 到序列号 #10)
  • 集合 2 - 项目总数 = 100(序列号 1 到序列号 #100)
  • 集合 3 - 项目总数 = 3500(序列号 #1 到序列号 #3500)

基于 3 个示例集。集合 1 被认为是最稀有的集合,因为该集合中只有 10 件可用。

除此之外。每个项目都有其序列号,#1 是最好的(最稀有的)

这是我如何可视化评分系统的表格。

集合 1

| Serial#| Score  |
|:------:| :-----:|
| 1      | 1000   |
| 2      | 900    |
| 3      | 800    |
| 4      | 700    |
| 5      | 600    |
| 6      | 500    |
| 7      | 400    |
| 8      | 300    |
| 9      | 200    |
| 10     | 100    |

系列 2

| Serial#| Score |
|:------:| :----:|
| 1      | 800   |
| 2      | 700   |
| 3      | 600   |
| 4      | 500   |
| ...    | ...   |
| 99     | 12    |
| 100    | 10    |

我只是为了表现而编造这些分数。

根据上表,由于 Collection 1 的稀有性,Collection 1 中的 Serial #1 比 Collection 2 中的 Serial #1 得分更高。

  1. 我的收藏品很少,从一种(其中最稀有的),10, 20, 150, 350, 1000, 5000, 10000, 50000” 这个项目应该得到什么“分数” ?

对于 1 个中最稀有的 1 个,分数将基于 其他系列#1。例如,如果 Collection 有 10 个项目,则序列号# 得到 1000 分,然后 1 of 1 我可以给 5000 分(这个没有 需要计算) 2. 一个集合中的所有分数是否应该加起来相同的值? 不。它不需要加起来和其他集合一样的值

  1. 您的“编造”分数并不能真正帮助您解释您首先要在此处应用哪种评分逻辑

在示例表中(组成分数)。我只是想表明不同的序列号得分。与较低的序列号相比,较高的序列号将具有较低的分数。但分数将与其他具有相同序列号的集合不同。因此,我按收藏对它们进行了分类。项目计数较低的集合被认为比项目计数较高的集合更稀有。 4. 但是序列号 1 在集合内应该比序列号 2 有更高的分数?如果是这样,那将基于什么?只是那些#1,#2等的升序吗? 也许它将基于升序。 5. 集合 1 中的所有 10 个项目可以得到相同的分数吗? 没有。

我对序列号将获得的分数没有任何偏好。我的意思是序列号 1 可以获得 X 分数,只要它与该系列的稀有度相关。除非它们属于相同的收藏稀有度,否则序列号 1 的得分在整个收藏中不会相同。

【问题讨论】:

  • 1) 您的标准不明确。似乎您问题的第二部分充满了对请求反馈的问题的答案(也许是前一个问题的 cmets?),但格式被破坏了,并且不清楚问题在哪里结束并且您的答案从哪里开始。但我担心即使解决了这个问题,你仍然缺乏必要的背景。 2)这甚至不像是一个编程问题。您正在尝试设计一个评分系统,实施它没有问题。我想知道 Stack Exchange 系列中是否有更好的网站更适合此。
  • 所以你是说收藏 1 只是 10 件稀有物品,排名 1-10,每件都有一个分数,对吗?这些物品是什么?
  • @KevinGales 是的,你是正确的。所有收藏品都包含从 1 到 x 排名的物品,这将决定稀有度。物品数量越少意味着收藏品比物品多的收藏品稀有。这些物品就像运动收藏卡。
  • 那么分数和稀有度的用途呢?这是否涉及用户选择随机卡片或玩某种游戏?然后使用数据库为他们分配分数
  • 或者您是否有一些数据包含大量卡片需要根据稀有度进行排序?

标签: php math statistics logic


【解决方案1】:

如果我理解正确,您希望计算得分(值)的出现次数,并对出现次数进行排序,使最低数字(序列)代表最稀有的值(得分),序列号越高是值更常见。

对于:

Input Colleciton:
Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
    [5] => 10
    [6] => 10
    [7] => 11
    [8] => 11
    [9] => 12
    [10] => 12
    [11] => 13
    [12] => 13
    [13] => 14
    [14] => 14
    [15] => 100
    [16] => 100
    [17] => 100
    [18] => 101
    [19] => 101
    [20] => 101
    [21] => 102
    [22] => 102
    [23] => 102
    [24] => 103
    [25] => 103
    [26] => 103
    [27] => 104
    [28] => 104
    [29] => 104
)

这段代码:

<?php

header('Content-Type: text/plain');

// generate colleciton
$collection = [];

# most unique values
$start = 5;
$end = 0;
for ($i = $start; $i > $end; $i--) {
    $collection[] = $i;
}

# less unique values (2x the same values)
$start = 10;
$end = 15;
for ($i = $start; $i < $end; $i++) {
    $collection[] = $i;
    $collection[] = $i;
}

# least unique values
$start = 100;
$end = 105;
for ($i = $start; $i < $end; $i++) {
    $collection[] = $i;
    $collection[] = $i;
    $collection[] = $i;
}

echo "Input Colleciton:\n";
print_r($collection);


# array of [value => how_many_occurences, ... => ...]
$valueCount = array_count_values($collection);

echo "Value count:\n";
print_r($valueCount);

$uniqueBins = [];
# convert to unique bins
foreach ($valueCount as $value => $key) {
    $uniqueBins[$key][] = $value;
}

echo "Unique bins:\n";
print_r($uniqueBins);

// optionally sort by value
foreach ($uniqueBins as $key => $bin) {
    asort($bin);
    $uniqueBins[$key] = $bin;
}

echo "Unique bins after sort:\n";
print_r($uniqueBins);

生成输出:

Unique bins after sort:
Array
(
    [1] => Array
        (
            [4] => 1
            [3] => 2
            [2] => 3
            [1] => 4
            [0] => 5
        )

    [2] => Array
        (
            [0] => 10
            [1] => 11
            [2] => 12
            [3] => 13
            [4] => 14
        )

    [3] => Array
        (
            [0] => 100
            [1] => 101
            [2] => 102
            [3] => 103
            [4] => 104
        )

)

1 下的数组中的值最稀有,而键 3 下的数组中的值最常见。 键编号不是从零开始,而是从1 开始,因为最稀有的值在整个集合中仅出现一次 (1)。

如果您希望输出 bin 数组的键从零开始并继续编号 (0,1,2,...),那么 use array_values(),这样:

$uniqueBins = array_values($uniqueBins);

最后。通过这样做,您会丢失有关值的数量(稀有度)的信息,但是您仍然拥有按稀有度顺序排列的值数组(从最多到最少)

要使此代码正常工作,您需要将所有值放入单个数组 $collection,但如果您将值放入多个数组中,则可以使用 array_merge 将所有值合并到单个 $collection

【讨论】:

    【解决方案2】:

    这里有一些标题可以帮助您入门......

    创建数据库
    像这样

    Category :Rarest
    uniqueid item name score
    hashed#125 Dragon 1000000
    hashed#122 Hydra 800000
    hashed#100 Medusa 750000
    
    
    Category :Rarer
    uniqueid item name score
    hashed other1 50000
    hashed other2 30000
    hashed other3 10000
    
    
    Category :Rare
    uniqueid item name score
    hashed other1 5000
    hashed other2 2000
    hashed other3 800
    

    这就是你可以解决这个问题的方法......

    0.hidden readonly checkbox[contains uniquehash] 关联可点击图片[显示项目名称]

    1.[连接数据库]这里的mysql

    2.[从表中查询(所有唯一 ID 1、2、3 和...)]

    3.[从 Post 获取用户输入作为数组][假设用户单击显示 medusa 和 hydra 的图像 - 隐藏的复选框发送 hashed#100 和 hashed#122]

    4.[foreach DB 值作为#strings](唯一ID 被分解为单个字符串)

    5.[foreach user array as #strings](来自用户输入的uniqueids被分解为单独的字符串)

    6.[如果用户字符串匹配 DB #strings](匹配每个哈希值]

    7.[返回查询 [score] 和 [name of item] from where #string is found](在这种情况下,只有匹配的 id 会返回它们的得分,得分 800000 和 750000 以及 Hydra + Medusa)

    8.[然后 [match1 得分]] + [match2 得分] + match 3 等等] (800000+750000)

    echo [用户选择的总分] + [项目名称] (155 万,九头蛇 + 美杜莎)你甚至可以证明它们来自最稀有的收藏

    由于流程开始,前端的用户不知道项目分数是多少,也无法知道他们只得到总分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2011-03-15
      • 1970-01-01
      相关资源
      最近更新 更多