Author Topic: Вопрос по рандомному значению из массива  (Read 2670 times)

0 Members and 1 Guest are viewing this topic.

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Имеется определенная текстовая строка, куда нужно, что бы кликер, по определенной команде, в эту строку вставлять заведомо указанные значения из текстового файла. Я так понимаю это рандомный, не повторяющийся, массив, где значение этого массива будет равно значению строки данного текстового файла.

Текстовый файл будет иметь такой вид:
1 строка: ааааа
2 строка: бббб
3 строка: сссс
...
n-строка: яяяяя

Code: [Select]
print ( TFREAD (test.txt, RND(1,( TFCount("test.txt") ))) )
В принципе, как вытянуть с файла значение нужной строки я разобрался, но значения повторяются, а мне нужен цикл, где значения до окончания не повторяются.
« Last Edit: January 18, 2019, 12:49:13 AM by Kibes »

Shada

  • Освоившийся
  • **
  • Posts: 24
    • View Profile
Code: (clickermann) [Select]
LOGCLEAR
TFREADARR("input.txt",$arr)
FOR($a = ARRSIZE($arr) - 1, $a > -1, -1)
   $n = RND(0,$a)
   LOGWRITE ($arr[$n]) // $arr[$n] - рандомная строка (без повторов) из файла "input.txt" (см. Лог)
   $arr[$n] = $arr[$a]
   $del = ARRPOP($arr)
END_CYC
HALT

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Code: (clickermann) [Select]
LOGCLEAR
TFREADARR("input.txt",$arr)
FOR($a = ARRSIZE($arr) - 1, $a > -1, -1)
   $n = RND(0,$a)
   LOGWRITE ($arr[$n]) // $arr[$n] - рандомная строка (без повторов) из файла "input.txt" (см. Лог)
   $arr[$n] = $arr[$a]
   $del = ARRPOP($arr)
END_CYC
HALT

Спасибо за помощь! Не могу понять, а как это применить? Вот я беру значение $arr[$n] - назначаю как переменную $num и вставляю в код, как KEYSTRING(TFREAD (test.txt, $num), RND(200,500)). Но тогда есть повторения, иногда даже по 3 раза. Видимо туплю где-то и не могу продуплить где именно!

Спасибо, сегодня подключил скри

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Code: (clickermann) [Select]
IF(ARRSIZE($arr_R) = 0)
   $siz = TFCOUNT("input.txt")+1
   FOR($i=1,$i<$siz)
      ARRPUSH($arr_R, $i)
   END_CYC
   $i = ARRSIZE($arr_R)-1
   WHILE($i>0)
      $j = RND(0,$i)
      IF($i ! $j)
         $tmp = $arr_R[$j]
         $arr_R[$j] = $arr_R[$i]
         $arr_R[$i] = $tmp
      END_IF
      INC($i,-1)
   END_CYC
ELSE
   $num = ARRPOP($arr_R)
END_IF

$str = TFREAD("input.txt", $num)

При запуске скрипта значение $num пустое. Может есть решение, что бы с первого раза оно имело значение?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
При запуске скрипта значение $num пустое. Может есть решение, что бы с первого раза оно имело значение?

Да действительно, что то я даже не протестировал скрипт... Нужно просто добавить строку.
Code: (clickermann) [Select]
IF(ARRSIZE($arr_R) = 0)
   $siz = TFCOUNT("input.txt")+1
   FOR($i=1,$i<$siz)
      ARRPUSH($arr_R, $i)
   END_CYC
   $i = ARRSIZE($arr_R)-1
   WHILE($i>0)
      $j = RND(0,$i)
      IF($i ! $j)
         $tmp = $arr_R[$j]
         $arr_R[$j] = $arr_R[$i]
         $arr_R[$i] = $tmp
      END_IF
      INC($i,-1)
   END_CYC
   $num = ARRPOP($arr_R)
ELSE
   $num = ARRPOP($arr_R)
END_IF

$str = TFREAD("input.txt", $num)
LOGWRITE ($str)
WAIT(1)

Спасибо за помощь! Не могу понять, а как это применить? Вот я беру значение $arr[$n] - назначаю как переменную $num и вставляю в код, как KEYSTRING(TFREAD (test.txt, $num), RND(200,500)). Но тогда есть повторения, иногда даже по 3 раза. Видимо туплю где-то и не могу продуплить где именно!

Спасибо, сегодня подключил скри

В массиве $arr[$n] уже находится рандомная строка из файла input.txt
Code: (clickermann) [Select]
LOGCLEAR
TFREADARR("input.txt",$arr)
FOR($a = ARRSIZE($arr) - 1, $a > -1, -1)
   $n = RND(0,$a)
   KEYSTRING($arr[$n],RND(200,500))
   
   $arr[$n] = $arr[$a]
   $del = ARRPOP($arr)
END_CYC
HALT

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Спасибо огромное! Все работает как часики! Иногда поражаюсь возможностям кликера :)