<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Random, настройка вероятности выпадения двух чисел]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=10408</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10408&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Random, настройка вероятности выпадения двух чисел».]]></description>
		<lastBuildDate>Sun, 15 Feb 2015 21:22:07 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91595#p91595</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (to4er)]]></author>
			<pubDate>Sun, 15 Feb 2015 21:22:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91595#p91595</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91590#p91590</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 15 Feb 2015 18:45:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91590#p91590</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91583#p91583</link>
			<description><![CDATA[<p>Irbis, это золото, я в шоке. Alectric, serzh82saratov так же огромное спасибо. Благодаря таким людям как вы хаос немного упорядочивается <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (to4er)]]></author>
			<pubDate>Sun, 15 Feb 2015 13:47:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91583#p91583</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91582#p91582</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 15 Feb 2015 12:48:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91582#p91582</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91581#p91581</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (to4er)]]></author>
			<pubDate>Sun, 15 Feb 2015 11:32:27 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91581#p91581</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91580#p91580</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 15 Feb 2015 09:54:09 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91580#p91580</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91579#p91579</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 15 Feb 2015 07:35:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91579#p91579</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91578#p91578</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 15 Feb 2015 07:21:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91578#p91578</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91577#p91577</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 15 Feb 2015 06:42:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91577#p91577</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91573#p91573</link>
			<description><![CDATA[<p>Хм..&nbsp; О таком варианте я не подумал, что нужна просто последовательность с определенным соотношением чисел, хотя это наиболее очевидно из ТЗ. В моей же функции соотношение выполняется для больших последовательностей, а для 10 чисел разброс может быть значительным в обе стороны. Тогда ваш вариант правильный.</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 15 Feb 2015 03:55:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91573#p91573</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91571#p91571</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 14 Feb 2015 21:14:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91571#p91571</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91570#p91570</link>
			<description><![CDATA[<p>Какие мудреные конструкции, вместо функции из пары строк. А если соотношение вероятностей не кратно 10, например для 6.425? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sat, 14 Feb 2015 21:03:52 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91570#p91570</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91569#p91569</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sat, 14 Feb 2015 20:01:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91569#p91569</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91568#p91568</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 14 Feb 2015 18:25:47 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91568#p91568</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Random, настройка вероятности выпадения двух чисел]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=91558#p91558</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sat, 14 Feb 2015 12:26:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=91558#p91558</guid>
		</item>
	</channel>
</rss>
