Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Эм... вопрос для математиков... (https://forum.antichat.xyz/showthread.php?t=111599)

rcc0023 17.03.2009 15:51

Эм... вопрос для математиков...
 
АТВ шкала.

а[17.8] - б[14] - в[10] - г[10] - д[10] - е[9.5] - ж[8.5] - з[8.5]

В скобках инициатива вывода букв. Буквы выводятся по кругу исходя из инициативы и очередности.

Пример начального вывода:
1. а
2. б
3. в
4. г
5. д
6. е
7. а
8. ж
9. з
10. б

А как прочитать остальную последовательность вывода??

Pashkela 17.03.2009 16:12

вот мегарешение, именно по твоему вопросу:

http://s52.radikal.ru/i137/0903/d4/7def01f4e241.jpg

Gifts 18.03.2009 00:51

rcc0023 Недостаточно данных. Что значит выводятся исходя из инициативы? Какая именно зависимость? Или продолжите ряд хотя бы до 20 позиции

scrat 18.03.2009 00:53

я нихуя не понял. Ты неточно описал задачу.

-Hormold- 18.03.2009 01:06

PHP код:

<?
$str
="а[17.8] - б[14] - г[10] - д[10] - ж[8.5] - з[8.5] - в[10] - е[9.5]";
$ex=explode(" - ",$str);
for(
$i=0;$i<count($ex);$i++){
    list(
$symb,$proc)=explode("[",$ex[$i]);
    
$proc=str_replace("]","",$proc);
    
$o[$proc]=$symb;
}
asort($o);
print_r($o);
?>

Попробуй...

imajo.ati 18.03.2009 01:23

я так понял буква а заменила букву ё пропущенную в последовательности. значит дальше пойдёт так:
1. а
2. б
3. в
4. г
5. д
6. е
7. а
8. ж
9. з
10. б
11. в
12. г
13. д
14. е
15. б
16. ж
17. з
18. в
19. г
20. д
21. е
22. в
23. ж
24. з
25. г
26. д
27. е
28. г
29. ж
30. з
31. д
32. е
33. д
34. ж
35. з
36. е
37. е
38. ж
39. з
40. а
41. б
42. в
43. г
44. д
45. е
46. ж
47. ж
48. з
49. б

но дальше идёт не сначала а со смещением на 1 букву

Gifts 18.03.2009 01:57

Скрипт получается такой, в переменной C - количество кругов, $arr - массив инициатив, равные инициативы - объединяем в один ключ
PHP код:

<pre><?
$c
=5;
$arr=array('a' => 17.8'b' => 14'c,d,e' => 10'f' => 9.5'g,h' => 8.5);
foreach (
$arr as $i=>$val)
{
    
$arr[$i]=1000000000/$val;
    for (
$j=1;$j<$c;$j++)
    {
        
$tmp=$arr[$i]*$j;
        
$outvar[$tmp]=$i;
    }
}

ksort($outvar,SORT_NUMERIC);
echo 
strtr(implode(',',$outvar),'abcdefgh,',"абвгдежз\n");

?>

Код:

а,б,в,г,д,е,а,ж,з,б,а,в,г,д,е,б,а,ж,з,б,в,г,д,е,ж,з,в,г,д,е,ж,з

rcc0023 18.03.2009 06:18

Pashkela неудачно пошутил =/ Алфавит тут и рядом не лежит...

Gifts, прямо в точку! Правда плюс тебе не ставится... =((

Pashkela 18.03.2009 06:19

Да я вообще чужой на этом празднике жизни:)

ЗЫЖ Без обид

rcc0023 18.03.2009 07:34

Gifts, а если взять за основу - ход за определенный промежуток...
То есть так, чтобы можно было вычислить что выводить на 13,14... с использованием динамической инициативы...

В пример:

Шаг - это последовательный вывод букв (1,2,3,4,5....70,71,72...)
Промежуток - самая большая инициатива (17.8)
Ходка - при достижении макс числа - ход

Инициативу каждой буквы (17.8,14,10,10...8.5) делим на промежуток (17.8), полученные число записываем как 'столько раз выведется буква' (назовем ее HODmax) за промежуток 17.8!
Далее вводим такое понятие как ходка, при достижение HODmax происходит ход данного числа. Одно но, нужно найти сколько к данной ходке должно прибавятся за каждый шаг.

rcc0023 18.03.2009 13:08

Опять не дополнил?(

Gifts 18.03.2009 21:28

rcc0023 Можно добавить сохранение текущих позиций при желании. Запомнив текущую позицию и прогнав скрипт на несколько итераций - можно получить следующие ходы.

PHP код:

<pre><?
$c
=50// Количество элементов для вывода

function findmin($array) {return array_search(min($array),$array);}

// $weight - Массив инициатив
$weight=array('а' => 17.8'б' => 14'в' => 10'г' => 10'д' => 10'е' => 9.5'ж' => 8.5'з' => 8.5);
$max=max($weight);

// $run - массив с тем же количеством ключей что и $weight. Тут можно задать начальные данные
$run array_map(create_function('$a','return '.$max.'/$a;'),$weight);

print_r($run);

for (
$i=0;$i<$c;$i++)
{
    
$j=findmin($run);
    echo 
$j."\n";
    
$bonus=0// Зануляем бонус, на всякий случай
    // А тут можно добавить условие по добавке бонусов к инициативе

    
$run[$j]+=$max/($weight[$j]+$bonus); // Инкремент текущей позиции
}



Время: 12:52