1 (изменено: Veranda, 2016-03-02 14:47:16)

Тема: AHK: приоритет вывода значений из массива

Вопрос: как можно задать приоритет вывода для значений из массива? Чтобы какие-либо из значений внутри массива можно было выводить с большей частотой, чем остальные..:/
Использую следующий код в работе:

coord := [{x:100,y:100},{x:300,y:500},{x:500,y:300},{x:500,y:500},{x:400,y:10},{x:50,y:600}]

1::
	Random,Rpos,1,% coord.MaxIndex()
	Random,RX,0,50
	Random,RY,0,60
	MouseMove, % coord[Rpos].x + RX, % coord[Rpos].y + RY , 0
	ToolTip % "X:" coord[Rpos].x + RX "`nY:" coord[Rpos].y + RY
	Return

Пример: я запускаю данный код через цикл из 10 повторов. По окончании цикла - вывод значений из массива в процентом соотношении таким примерно должен получится:
{x:100,y:100} - 30%
{x:300,y:500}-10%
{x:500,y:300}-20%
{x:500,y:500}-5%
{x:400,y:10}-34%
{x:50,y:600}-1%

З.Ы код от многоуважаемого serzh82saratov

Чем дальше в лес - тем дальше в лес...

2 (изменено: yalanne, 2016-03-02 16:02:57)

Re: AHK: приоритет вывода значений из массива

coord := [{x:100,y:100},{x:300,y:500},{x:500,y:300},{x:500,y:500},{x:400,y:10},{x:50,y:600}]

1::
	Rpos := StrSplit( WRandom("30,10,20,5,34,1",1) ,",").1 ; на 6 штук и у каждого свой шанс выпадения.
	Random,RX,0,50
	Random,RY,0,60
	MouseMove, % coord[Rpos].x + RX, % coord[Rpos].y + RY , 0
	ToolTip % "X:" coord[Rpos].x + RX "`nY:" coord[Rpos].y + RY
	Return
	
	
;http://www.autohotkey.com/community/viewtopic.php?f=2&t=47586
WRandom(p_FieldString,p_Chance=false,p_P2D=false,p_D2P=false)
{
  Loop, Parse, p_FieldString, `,
    l_Tot += A_LoopField
  Random, l_Sum, 0, % l_Tot
  Loop, Parse, p_FieldString, `,
    If ( 0 >= l_Sum -= A_LoopField )
      Return A_Index ( p_Chance ? "," (100*A_LoopField)/l_Tot : "" ) ( p_P2D ? "," l_Tot/100 : "" ) ( p_D2P ? "," 100/l_Tot : "" )
}

3

Re: AHK: приоритет вывода значений из массива

Или так:


oCoord := [{x:100,y:100,v:30},{x:300,y:500,v:10},{x:500,y:300,v:20},{x:500,y:500,v:5},{x:400,y:10,v:34},{x:50,y:600,v:1}]
For k, v In oCoord, _Sum := 0  
	_Sum += v.v 

1::
	Random, Peek, 1, _Sum
	For k, v In oCoord, Sum := 0
		Sum += v.v
	Until Sum >= Peek && (Rpos := k) 
	Random,RX,0,50
	Random,RY,0,60
	MouseMove, % oCoord[Rpos].x + RX, % oCoord[Rpos].y + RY , 0
	ToolTip % "X:" oCoord[Rpos].x + RX "`nY:" oCoord[Rpos].y + RY
	Return

Была тема.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4 (изменено: serzh82saratov, 2016-03-03 00:12:43)

Re: AHK: приоритет вывода значений из массива

Но вообще эти варианты относительны. Например то что должно выпасть 1 из 100, может выпасть один раз из тысячи, или 5 раз из ста.
Если из ста нужно точное совпадение "разбросов", то нужно ещё и это прикрутить.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: приоритет вывода значений из массива

Так гарантированно из сотни выпадут все варианты в случайном порядке, но в указанном количестве:


oCoord := [{x:100,y:100,v:30},{x:300,y:500,v:10},{x:500,y:300,v:20},{x:500,y:500,v:5},{x:400,y:10,v:34},{x:50,y:600,v:1}]
  
For k, v in oCoord, oSum := []
    Loop % v.v
        oSum.Push(k)  

1::	
	If !tSum.MaxIndex() 
		tSum := oSum.Clone()  
	Random, iRand, 1, tSum.MaxIndex()   
	oPoint := oCoord[tSum.Remove(iRand)] 
	Random,RX,0,50
	Random,RY,0,60
	MouseMove, % oPoint.x + RX, % oPoint.y + RY , 0
	ToolTip % "X:" oPoint.x + RX "`nY:" oPoint.y + RY
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: приоритет вывода значений из массива

Благодарю за помощь! Сам бы не догадался ( или догадался, но очень не скоро)!

Чем дальше в лес - тем дальше в лес...