Рисование стр aws с использованием PHP - PullRequest
0 голосов
/ 06 февраля 2020

КОНТЕКСТ

В последнее время я пытался php нарисовать стр aws. Если вы не знаете, что такое рисование str aws, это, в основном, кто-то, получивший имя кого-то другого, и что кто-то другой получает имя другого человека и т.д. Чтобы было понятнее, случайно сгенерированный код должен выглядеть следующим образом:

(пример с 4 людьми)

Person A drew person B
Person B drew person D
Person C drew person A
Person D drew Person B

ATTEMPT 1

Чтобы добиться этого, я попытался использовать следующий код:

$name = $_POST["names"]; // <-- name-array
$participants = $_POST["participants"]; // <-- stores the amount of participants
$arrX = $name;

for($i = 1; $i <= $participants[0]; $i++) {
    echo $name[$i-1];
     echo " drew ";
     ${"randIndex$i"} = array_rand($arrX, 1);
     echo $arrX[${"randIndex$i"}];
     echo "<br><br>";
}

ПРОБЛЕМА 1

Хотя это действительно дает вывод, это не является удовлетворительным , Человек может нарисовать себя, что не разрешено. Я хочу, чтобы участники нарисовали человека, отличного от себя.

Лучше всего предположить, что для того, чтобы это исправить, мне нужно работать с операторами if. Я просто не знаю, как бы это сделать наиболее подходящим способом.

edit: ПРОБЛЕМА 2

Один и тот же вывод также позволяет двум людям рисовать одинаково человек. Т.е. человек А и Б (а возможно и больше) рисуют человека C. Я хочу, чтобы каждый мог нарисовать человека, который еще не был нарисован.

1 Ответ

0 голосов
/ 06 февраля 2020

Вот простое решение, основанное на перестановках.

$name = $_POST["names"]; // <-- name-array
$participants = $_POST["participants"]; // <-- stores the amount of participants

$last = $participants[0] - 1;
$map = range(0, $last);

for ($i = 0; $i <= $last; ++$i)
{
    if ($i != $last)
    {
        // randomly draw a person to the right
        $j = rand($i + 1, $last);

        // swap with the drawn person becoming no longer available for others since on their left
        $aux = $map[$i];
        $map[$i] = $map[$j];
        $map[$j] = $aux;
    }

    echo $name[$i], ' drew ', $name[$map[$i]], '<br/><br/>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...