int GetAverageSpinCountBeforeLuckyZero(List <MachineTestUserResult> userResults)
    {
        float result = ListUtility.FoldList(userResults, 0.0f, (float acc, MachineTestUserResult r) => {
            return(acc + r.AnalysisResult._spinCountBeforeLuckyZero);
        });

        result /= userResults.Count;
        return((int)result);
    }
    int GetSpinCountInCurrentMode(IsLuckyModePredicate pred, List <MachineTestRoundResult> roundResults)
    {
        int result = ListUtility.FoldList(roundResults, 0, (int acc, MachineTestRoundResult r) => {
            if (pred(r))
            {
                ++acc;
            }
            return(acc);
        });

        return(result);
    }
    int GetRespinCount(IsLuckyModePredicate pred, List <MachineTestRoundResult> roundResults)
    {
        int result = ListUtility.FoldList <MachineTestRoundResult, int>(roundResults, 0, (int acc, MachineTestRoundResult rr) => {
            if (pred(rr) && IsRespinRound(rr))
            {
                ++acc;
            }
            return(acc);
        });

        return(result);
    }
    int GetEnterSpecialSmallGameStateCount(IsLuckyModePredicate pred, List <MachineTestRoundResult> roundResults)
    {
        int result = ListUtility.FoldList <MachineTestRoundResult, int>(roundResults, 0, (int acc, MachineTestRoundResult rr) => {
            if (pred(rr) && rr._output._isChangeToSpecialSmallGameState)
            {
                ++acc;
            }
            return(acc);
        });

        return(result);
    }
    ulong GetTotalWinAmount(IsLuckyModePredicate pred, List <MachineTestRoundResult> roundResults)
    {
        ulong result = ListUtility.FoldList <MachineTestRoundResult, ulong>(roundResults, 0, (ulong acc, MachineTestRoundResult rr) => {
            if (pred(rr))
            {
                acc += rr._output._spinResult.WinAmount;
            }
            return(acc);
        });

        return(result);
    }
    static string ConstructUploaderToolNodeScriptLine(PlatformType platformType)
    {
        string format = "node index.js -platform {0} -build {1} -machines {2} -versions {3} -vpn {4}";

        string        platform  = platformType.ToString();
        List <string> buildList = new List <string>();

        if (_machineConfig._isUploadDebugServer)
        {
            buildList.Add("Debug");
        }
        if (_machineConfig._isUploadReleaseServer)
        {
            buildList.Add("Release");
        }

        if (buildList.Count == 0)
        {
            Debug.LogError("No Debug or Release to upload");
            return(string.Empty);
        }

        string builds = string.Join(",", buildList.ToArray());

        List <string> machineNameList = ListUtility.FoldList(_machineConfig._machineConfigs, new List <string>(),
                                                             (List <string> list, SingleMachineAssetConfig c) => {
            if (c._selected)
            {
                list.Add(c._name);
            }
            return(list);
        });
        List <string> machineVersionList = ListUtility.FoldList(_machineConfig._machineConfigs, new List <string>(),
                                                                (List <string> list, SingleMachineAssetConfig c) => {
            if (c._selected)
            {
                list.Add(c._version);
            }
            return(list);
        });
        string machineNames    = string.Join(",", machineNameList.ToArray());
        string machineVersions = string.Join(",", machineVersionList.ToArray());

        string isUseVPN = _machineConfig._isUseVPN ? "1" : "0";

        string result = string.Format(format, platform, builds, machineNames, machineVersions, isUseVPN);

        return(result);
    }
    float GetJoyTotalProb(List <float> rowProbs)
    {
        float result = ListUtility.FoldList(rowProbs, MathUtility.Add);

        return(result);
    }