<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Random, настройка вероятности выпадения двух чисел]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10408&amp;type=atom" />
	<updated>2015-02-15T21:22:07Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10408</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91595#p91595" />
			<content type="html"><![CDATA[<p>Всё отлично работает в таком виде:</p><div class="codebox"><pre><code>var := 2.75
F12::
rvar := Rand(var)
SendInput %rvar%

Rand(t) {
   static d := 0 
   Return r := Round(t+d), d += t - r
}</code></pre></div><p>также, составил функцию по рэндому:</p><div class="codebox"><pre><code>Rand(x)
{
r := Round(x, 0)
if r &gt; %x%
{
z := r - 0.5 / (1 + x - r)
}
else
{
z := r + 0.5 / (1 - x + r)
}
Random, v, z, r
Return v := Round(v, 0)
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[to4er]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32506</uri>
			</author>
			<updated>2015-02-15T21:22:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91595#p91595</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91590#p91590" />
			<content type="html"><![CDATA[<p>Да, отлично, ничего нескажешь. Но ещё одну строку уберём: <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>Rand(t) {
   static d := 0 
   Return r := Round(t+d), d += t - r
}</code></pre></div><div class="quotebox"><blockquote><p>Не думаю, что мат.операции проиграют в скорости RegEx, конечно можно устроить &quot;полевые испытания&quot;</p></blockquote></div><p>Ты наверное понял меня наоборот, мат.операции вместо RegEx, увеличат скорость раз в пять. А испытания уже были, как то обсуждалось. При &quot;простом&quot; поиске, связка SubStr и InStr работают минимум в 2 раза быстрее RegEx.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Хотя:</div><div class="fancy_spoiler"><p>В данном случае, всего 15%. <img src="//forum.script-coding.com/img/smilies/hmm.png" width="15" height="15" /></p><div class="codebox"><pre><code>SetBatchLines -1 
v := 6.425

Start := A_TickCount
loop 1000000
    p1 := Floor(v), p2 := Round(v - p1, 1) * 10 
MsgBox % A_TickCount - Start  
 
Start := A_TickCount
loop 1000000
    RegExMatch(Round(v, 1), &quot;(.*)\.(.)&quot;, p)  
MsgBox % A_TickCount - Start   </code></pre></div></div></div><div class="quotebox"><blockquote><p>, но вряд ли это имеет большое значение - скорость не относится к числу сильных сторон AHK.</p></blockquote></div><p>Тогда тем более получается, что такие мелочи, могут местами сильно повлиять.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-02-15T18:45:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91590#p91590</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91583#p91583" />
			<content type="html"><![CDATA[<p>Irbis, это золото, я в шоке. Alectric, serzh82saratov так же огромное спасибо. Благодаря таким людям как вы хаос немного упорядочивается <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[to4er]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32506</uri>
			</author>
			<updated>2015-02-15T13:47:59Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91583#p91583</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91582#p91582" />
			<content type="html"><![CDATA[<p>Теперь более-менее понятно. Вообще, по играм имеется своя ветка, но тут вопрос скорее прикладного характера, а не взаимодействия с приложением, санкций по этому поводу быть не должно. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Вот (надеюсь) самый простой вариант для усредненного представления нецелого числа в виде последовательности целых чисел.<br /></p><div class="codebox"><pre><code>F12::
loop 10
   SendInput % Rand(2.75) &quot; &quot;
   SendInput |{Space}
Return

Rand(t) {
   static d := 0
   r := Round(t+d), d += t - r
   Return r
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-15T12:48:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91582#p91582</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91581#p91581" />
			<content type="html"><![CDATA[<p>Спасибо огромное за количество вариантов, объясню ТЗ <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Нужен no recoil для шутера. Чтобы прицел не дергался, я указываю&nbsp; задержку в 25 мс. Но количества пикселей, на которые корректируется прицел при такой задержке, не всегда достаточно для точной правки отдачи. То есть, если если я укажу для определенного ствола 2, то прицел может уходить вверх, а укажу 3 - может чрезмерно крениться вниз. Поэтому мне нужны более мягкие коэффициенты, в пределах одного знака после запятой достаточно. Я не видел решения, как разделить пиксели, и хотел это сделать через Random. Есть один минус - рэндом такой рэндом, что может в пределах очереди в 5 выстрелов, при указании коэффициента 2.5 выдать пять двоек или пять троек, но все же в долгосрочной перспективе будет более точным, чем указать 2 или 3. Я просто не могу осилить, как написать функцию, чтобы при указании 2.7 вне зависимости от количества итераций у меня выходило в среднем приближенно к 2.7 и при этом функция выдавала бы правильный результат даже если сделано всего два выстрела.<br />Вывод в виде sendinput&nbsp; тут только для наглядности, чтобы увидеть как оно работает в блокноте, на самом деле нужна именно функция, которая обрабатывает переменную.</p>]]></content>
			<author>
				<name><![CDATA[to4er]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32506</uri>
			</author>
			<updated>2015-02-15T11:32:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91581#p91581</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91580#p91580" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>В первую очередь из соображений производительности.</p></blockquote></div><p>Не думаю, что мат.операции проиграют в скорости RegEx, конечно можно устроить &quot;полевые испытания&quot;, но вряд ли это имеет большое значение - скорость не относится к числу сильных сторон AHK.<br /></p><div class="quotebox"><blockquote><p>Как зачем, в ТЗ после запятых пробелы.</p></blockquote></div><p>Сейчас понятно, хотя посты #4 и #6 указывают, что готовая строка не нужна, a&nbsp; нужно элементы выводить по одному посредством <em>SendInput</em>. Все-таки сумбурность изложения ТЗ располагает к полету фантазии помогающих решить задачу. Так что можно обратно парсить строку для поэлементного вывода, или использовать массив:<br /></p><div class="codebox"><pre><code>F12::
   if !(Arr.MaxIndex())
   {
      Arr:=Rand(6.4)
      SendInput % &quot; &quot; ; для наглядности
   }
   SendInput % Arr.Remove()
Return

Rand(v) {
   r := [], b := 1, p1 := Floor(v), p2 := Round(v - p1, 1) * 10 
   loop 10
      Random, b, r.Insert(b, p1+(A_Index &gt; p2)), r.MaxIndex() ? r.MaxIndex()+1 : 1
   Return r
}</code></pre></div><p>В этом примере каждые 10 элементов (1-10, 11-20 и т.д.) строго в указанной пропорции, в отличие от поста #10.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-15T09:54:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91580#p91580</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91579#p91579" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Так лучше, все-таки RegEx&#039;ы не так очевидны в работе.</p></blockquote></div><p>В первую очередь из соображений производительности.<br /></p><div class="quotebox"><blockquote><p>А зачем StringReplace?</p></blockquote></div><p>Как зачем, в ТЗ после запятых пробелы.<br /></p><div class="quotebox"><blockquote><p>И все это дело обернуть в функцию, как хотел ТС.</p></blockquote></div><p>Ну, это нелёгкое дело, можно переложить и на плечи ТС.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-02-15T07:35:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91579#p91579</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91578#p91578" />
			<content type="html"><![CDATA[<p>Так лучше, все-таки RegEx&#039;ы не так очевидны в работе. А зачем StringReplace? (Он тут лишний, на мой взгляд).<br />И все это дело обернуть в функцию, как хотел ТС.<br /></p><div class="codebox"><pre><code>MsgBox % Rand(6.4)

Rand(v)
{
   p1 := Floor(v), p2 := Round(v - p1, 1) * 10 
   loop 10
      r .= (A_Index &gt; p2 ? p1 : p1 + 1) . (A_Index &lt; 10 ? &quot;,&quot; : &quot;&quot;)
   Sort, r, Random D,
   Return r
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-15T07:21:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91578#p91578</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91577#p91577" />
			<content type="html"><![CDATA[<p>Возможно, хотя ТЗ конечно немного размытое. <br />Да, и RegEx тут излишний.<br /></p><div class="codebox"><pre><code>v := 6.425
p1 := Floor(v), p2 := Round(v - p1, 1) * 10 
loop 10
   r .= (A_Index &gt; p2 ? p1 : p1 + 1) . (A_Index &lt; 10 ? &quot;|&quot; : &quot;&quot;)
Sort, r, Random D|
StringReplace, r, r, |, `,%A_Space%, 1
MsgBox % r</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-02-15T06:42:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91577#p91577</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91573#p91573" />
			<content type="html"><![CDATA[<p>Хм..&nbsp; О таком варианте я не подумал, что нужна просто последовательность с определенным соотношением чисел, хотя это наиболее очевидно из ТЗ. В моей же функции соотношение выполняется для больших последовательностей, а для 10 чисел разброс может быть значительным в обе стороны. Тогда ваш вариант правильный.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-15T03:55:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91573#p91573</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91571#p91571" />
			<content type="html"><![CDATA[<p>Так в шапке речь только про 10 случайных результатов. Значит 6.425 = 6.4. <br />Ну ещё можно тут добавить округление до десятых. <br /></p><div class="codebox"><pre><code>v := 6.425
RegExMatch(Round(v, 1), &quot;(.*)\.(.)&quot;, p)  
loop 10
   r .= (A_Index &gt; p2 ? p1 : p1 + 1) . (A_Index &lt; 10 ? &quot;,&quot; : &quot;&quot;)
Sort, r, Random D,
StringReplace, r, r, `,, `,%A_Space%, 1
MsgBox % r</code></pre></div><p>А вот про необходимость тысячи результатов, я видимо где то далее непрочитал.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-02-14T21:14:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91571#p91571</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91570#p91570" />
			<content type="html"><![CDATA[<p>Какие мудреные конструкции, вместо функции из пары строк. А если соотношение вероятностей не кратно 10, например для 6.425? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-14T21:03:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91570#p91570</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91569#p91569" />
			<content type="html"><![CDATA[<p>Так работает, но первое нажатие не считается.<br /></p><div class="codebox"><pre><code>#NoEnv
SendMode Input

var := 5.5
avar:=(var-var//1)*10
loop,% avar
  rand.=Round(var//1) &quot;`n&quot;
loop,% 10-avar
  rand.=Round(var//1+1) &quot;`n&quot;

F12::
now:=now=&quot;&quot; ? 1 : now=10 ? 1 : now+1
if now=1
{
  Sort,rand,Random
  loop,parse,rand,`n
    rand%a_index%:=a_loopfield
send,{enter}  ; -------------------------для проверки---------------------
}
SendInput % rand%now%
return


</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2015-02-14T20:01:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91569#p91569</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91568#p91568" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>v := 7.600

RegExMatch(v, &quot;(.*)\.(.)&quot;, p)  
loop 10
   r .= (A_Index &gt; p2 ? p1 : p1 + 1) . (A_Index &lt; 10 ? &quot;,&quot; : &quot;&quot;)
Sort, r, Random D,
StringReplace, r, r, `,, `,%A_Space%, 1
MsgBox % r</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-02-14T18:25:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91568#p91568</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91558#p91558" />
			<content type="html"><![CDATA[<p>Функция:<br /></p><div class="codebox"><pre><code>Rand(t) {
   Random, b, 0, 1.0
   Return Floor(t) + ((t-Floor(t)) &gt; b)
}</code></pre></div><p>Проверка работы:<br /></p><div class="codebox"><pre><code>V := 2.7 ; (2 - 30%, 3 - 70% на большой дистанции)
loop 10
   SendInput % Rand(V) &quot; &quot; 
; проверка среднего значения на 1000 итераций
count := 0
Loop 1000 {
   count+=Rand(V)
}
MsgBox % count/1000
Return

Rand(t) {
   Random, b, 0, 1.0
   Return Floor(t) + ((t-Floor(t)) &gt; b)
}

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2015-02-14T12:26:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91558#p91558</id>
		</entry>
</feed>
