HEX
Server: Apache/2.4.57 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/3.0.2
System: Linux vmi267337.contaboserver.net 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64
User: ohirex (1008)
PHP: 8.2.8
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,system,passthru,shell_exec
Upload Files
File: /home/ohirex/web/ohirex.com/public_html/join/abtests/Machine.php
<?php
declare(strict_types=1);

namespace Offdev\Bandit;

use Offdev\Bandit\Exceptions\RuntimeException;

class Machine
{
    private array $leverList = [];

    public function __construct(Lever ...$levers)
    {
        if (empty($levers)) {
            throw new RuntimeException('Must provide at least one lever!');
        }

        $this->leverList = $levers;
    }

    /**
     * @return Lever[]
     */
    public function getLeverList(): array
    {
        return $this->leverList;
    }

    public function getRandomLever(): Lever
    {
        return $this->leverList[array_rand($this->leverList)];
    }

    public function getBestLever(): Lever
    {
        $bestLever = reset($this->leverList);
        $bestConversion = $this->getConversion($bestLever);
        foreach ($this->leverList as $lever) {
            $c = $this->getConversion($lever);
            if ($c > $bestConversion) {
                $bestConversion = $c;
                $bestLever = $lever;
            }
        }

        return $bestLever;
    }

    private function getConversion(Lever $lever): float
    {
        if ($lever->getTries() === 0) {
            return 1.0;
        }

        return $lever->getRewards() / $lever->getTries();
    }
}