Author Topic: Случайный порядок  (Read 7010 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Случайный порядок
« Reply #15 on: June 02, 2015, 09:35:29 AM »
А такую тему и поднимали и тогда через строки и решали, только попроще... или посложней, в 10-ричном формате.
Предложенный тобой вариант намного изящней и компактней.

Вот вариант не такой изящный, конечно, но универсальней. А вдруг числа нужны не до 18, а до 50... или до 170?
Заманаемся $str = 0x010x020x..... подготавливать
Пусть сам заполняет  :D, правда для простоты в этом случае отойдём от 16-ричной системы.

Code: (clickermann) [Select]
LOGCLEAR
$count1 = 1 // начальное число
$count2 = 18 // конечное число
$str = ""
FOR($count = $count1-1, $count < $count2)
   $str = STRCONCAT($str, ":")
   FOR($i=0, $i < (3 - STRLEN($count+1)))
      $str = STRCONCAT($str, "0")
   END_CYC
   $str = STRCONCAT($str, $count+1)
END_CYC
//LOGWRITE ($str)
FOR($i = $count2, $i > 0, -1)
   $n = STRCUT($str, RND(1,$i) * 4 - 3, 4)
   $str = STRREPLACE($str, $n, "")
   LOGWRITE (INT(STRCUT($n, 2, 20)))
END_CYC
HALT


Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: Случайный порядок
« Reply #16 on: June 03, 2015, 11:46:12 AM »
Благодарю за высокую оценку моего скромного труда.  :)  Тем более, что оценка авторитетная, поэтому вдвойне приятно. Спасибо. :)
В продолжение темы хочу представить на ваш суд еще один скрипт, теперь тоже более универсальный и простой.
Code: (clickermann) [Select]
LOGCLEAR

// На входе имеем массив из произвольных данных, для примера создадим его сами...
$arr[0] = "Audi R8 (4.2 FSI quattro AT) кабриолет 2012"
$arr[1] = "BMW i8 (362hp) купе 2013"
$arr[2] = "Ford Mustang 2.3 AT купе 2014"
$arr[3] = "Honda CR-V (1.6D AT 4WD) кроссовер 2015"
$arr[4] = "Mercedes-Benz GLE Coupe (350D AT) кроссовер 2015"

//--------------------------------

FOR($i = ARRSIZE($arr) - 1, $i > -1, -1) // Переменная "$i" это номер последней ячейки нашего входного массива
   
   $n = RND(0,$i) // Номер нужной ячейки массива, выбирается случайным образом из диапазона номеров оставшихся ячеек
   
   LOGWRITE ($arr[$n]) // Содержимое ячейки, которую мы выбрали случайным образом, выводим в лог
   
   // Теперь использованную ячейку нужно удалить из массива, чтобы не использовать ее повторно.
   // Но так как, на сегодняшний день, для удаления элемента массива мы располагаем только функцией "ARRPOP($arr)",
   // то пересохраняем содержимое последней (удаляемой) ячейки в позицию уже использованной и более ненужной ячейки с номером "$n".
   $arr[$n] = $arr[$i]
   
   ARRPOP($arr) // Последнюю ячейку массива теперь просто удаляем
   
END_CYC

HALT