Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Космич

Pages: [1]
1
Моё предложение состоит в том, что бы избавиться от мучительной пирамидальной вложенности условных операторов. Всего 2 варианта, оба делают код визуально компактным за счёт выравнивания условий в виде ровного вертикального списка.

З.Ы. Johnny, надеюсь ты не пропустишь эту тему и откликнешься.

ELSE_IF
Code: (clickermann) [Select]
IF ($var = 0)
   PRINT("var равна 0")
ELSE_IF ( ($var => 0) and ($var <= 10) )
   PRINT("var между 0 и 10")
ELSE_IF ($str = "Hello World!")
   PRINT("str равна Hello World")
ELSE   
   PRINT("Все условия ложны")
END_IF


SELECT
https://autoit-script.ru/autoit3_docs/keywords/Select.htm
Code: (clickermann) [Select]
SELECT
CASE ($var = 0)
   PRINT("var равна 0")
CASE ( ($var => 0) and ($var <= 10) )
   PRINT("var между 0 и 10")
CASE ($str = "Hello World!")
   PRINT("str равна Hello World")
DEFAULT
   PRINT("Все условия ложны")
END_SELECT

2
Ноги из моего недописанного скрипта, который, скорее всего, так и останется недописанным. Как бы то ни было, вот завершённая часть скрипта, которой, я бы хотел поделится.  :D 

Создаёт 7 файлов, из которых: 1 вспомогательный для вышеозначенного скрипта, 3 готовых к использованию INI файла с оптимальными путями под каждую компанию, и 3 матрицы для удобного визуального прослеживания путей.

Code: (clickermann) [Select]
#DEFINE #ENDL: CHAR(13), CHAR(10)
#DEFINE #INFINITY: 99999
#DEFINE HTAB(:  STRCUT("                    ", 0,

#DEFINE MATRIX_FILE_NAME: "_path_matrix"
#DEFINE ROUTE_FILE_NAME:  "_route"

#DEFINE READABILITY: "aVertex_array_indices.ini"

STRSEPARATE("MMO:EIC:VRU", ":", $array_company)

STRSEPARATE("1-1:1-2:1-3:1-4:1-5:1-6:1-7:1-8", ":", $array_vertex)
STRSEPARATE("2-1:2-2:2-3:2-4:2-5:2-6:2-7:2-8", ":", $array_vertex)
STRSEPARATE("3-1:3-2:3-3:3-4:3-5:3-6:3-7:3-8", ":", $array_vertex)
STRSEPARATE("4-1:4-2:4-3:4-4:4-5", ":", $array_vertex)
STRSEPARATE("1-BL:2-BL:3-BL", ":", $array_vertex)

$size_array_vertex = ARRSIZE($array_vertex)

IF(TFCOUNT(READABILITY) - 1 != $size_array_vertex)
   TFCLEAR(READABILITY)
   FOR($count = 0, $count < $size_array_vertex)
      INIWRITE(READABILITY, $array_vertex[$count], $count)
   END_CYC
END_IF

SUB(_ADD_EDGE, $_1vertex, $_2vertex, $_weight)
   $array_weight_matrix[INT(INIREAD(READABILITY, $_1vertex)) + INT(INIREAD(READABILITY, $_2vertex)) * $size_array_vertex] = $_weight
   $array_weight_matrix[INT(INIREAD(READABILITY, $_2vertex)) + INT(INIREAD(READABILITY, $_1vertex)) * $size_array_vertex] = $_weight
END_SUB

FOR($count = 0, $count < ARRSIZE($array_company))
   
   #DEFINE #DX6_WEIGHT: 0.9
   #DEFINE #DX7_WEIGHT: 0.9
   #DEFINE #DX8_WEIGHT: 0.9
   
   #DEFINE #DBL_WEIGHT: 4
   
   #DEFINE #DEF_WEIGHT: 2
   
   $MMO_weight = 2
   $EIC_weight = 2
   $VRU_weight = 2
   
   $MF5_weight = $MMO_weight - 0.1
   $EF5_weight = $EIC_weight - 0.1
   $VF5_weight = $VRU_weight - 0.1
   
   SETVAR(STRCONCAT("$", $array_company[$count], "_weight"), 1)
   SETVAR(STRCONCAT("$", STRCUT($array_company[$count], 1, 1), "F5_weight"), GETVAR(STRCONCAT("$", $array_company[$count], "_weight")))
   
   FOR($i = 0, $i < POW($size_array_vertex, 2))
      $array_weight_matrix[$i] = #INFINITY
      FOR($k = 0, ($k < $size_array_vertex) and ($i < $size_array_vertex))
         $array_path_matrix[$i*$size_array_vertex+$k] = $array_vertex[$k]
      END_CYC
   END_CYC
   
   _ADD_EDGE("1-1",  "1-2",  $MMO_weight)
   _ADD_EDGE("1-2",  "1-3",  $MMO_weight)
   _ADD_EDGE("1-2",  "1-4",  $MMO_weight)
   _ADD_EDGE("1-3",  "1-4",  $MMO_weight)
   _ADD_EDGE("1-3",  "2-3",  #DEF_WEIGHT)
   _ADD_EDGE("1-4",  "3-4",  #DEF_WEIGHT)
   
   _ADD_EDGE("2-1",  "2-2",  $EIC_weight)
   _ADD_EDGE("2-2",  "2-3",  $EIC_weight)
   _ADD_EDGE("2-2",  "2-4",  $EIC_weight)
   _ADD_EDGE("2-3",  "2-4",  $EIC_weight)
   _ADD_EDGE("2-4",  "3-3",  #DEF_WEIGHT)
   
   _ADD_EDGE("3-1",  "3-2",  $VRU_weight)
   _ADD_EDGE("3-2",  "3-3",  $VRU_weight)
   _ADD_EDGE("3-2",  "3-4",  $VRU_weight)
   _ADD_EDGE("3-3",  "3-4",  $VRU_weight)
   
   _ADD_EDGE("1-5",  "1-6",  $MMO_weight)
   _ADD_EDGE("1-5",  "1-7",  #DX7_WEIGHT)
   _ADD_EDGE("1-6",  "1-8",  #DX6_WEIGHT)
   _ADD_EDGE("1-7",  "1-8",  #DX8_WEIGHT)
   
   _ADD_EDGE("2-5",  "2-6",  $EIC_weight)
   _ADD_EDGE("2-5",  "2-7",  #DX7_WEIGHT)
   _ADD_EDGE("2-6",  "2-8",  #DX6_WEIGHT)
   _ADD_EDGE("2-7",  "2-8",  #DX8_WEIGHT)
   
   _ADD_EDGE("3-5",  "3-6",  $VRU_weight)
   _ADD_EDGE("3-5",  "3-7",  #DX7_WEIGHT)
   _ADD_EDGE("3-6",  "3-8",  #DX6_WEIGHT)
   _ADD_EDGE("3-7",  "3-8",  #DX8_WEIGHT)
   
   _ADD_EDGE("4-1",  "1-4",  $MMO_weight)
   _ADD_EDGE("4-2",  "2-4",  $EIC_weight)
   _ADD_EDGE("4-3",  "3-4",  $VRU_weight)
   
   _ADD_EDGE("4-1",  "4-2",  #DEF_WEIGHT)
   _ADD_EDGE("4-2",  "4-3",  #DEF_WEIGHT)
   _ADD_EDGE("4-3",  "4-1",  #DEF_WEIGHT)
   
   _ADD_EDGE("4-4",  "4-1",  $MMO_weight)
   _ADD_EDGE("4-4",  "4-2",  $EIC_weight)
   _ADD_EDGE("4-4",  "4-3",  $VRU_weight)
   
   _ADD_EDGE("4-4",  "1-5",  $MMO_weight)
   _ADD_EDGE("4-4",  "2-5",  $EIC_weight)
   _ADD_EDGE("4-4",  "3-5",  $VRU_weight)
   
   _ADD_EDGE("4-5",  "1-5",  $MF5_weight)
   _ADD_EDGE("4-5",  "2-5",  $EF5_weight)
   _ADD_EDGE("4-5",  "3-5",  $VF5_weight)
   
   _ADD_EDGE("1-BL", "1-8",  #DBL_WEIGHT)
   _ADD_EDGE("2-BL", "2-8",  #DBL_WEIGHT)
   _ADD_EDGE("3-BL", "3-8",  #DBL_WEIGHT)
   
   _ADD_EDGE("1-BL", "2-BL", #DEF_WEIGHT)
   _ADD_EDGE("2-BL", "3-BL", #DEF_WEIGHT)
   _ADD_EDGE("3-BL", "1-BL", #DEF_WEIGHT)
   
   FOR($k = 0, $k < $size_array_vertex)
      FOR($i = 0, $i < $size_array_vertex)
         FOR($j = 0, $j < $size_array_vertex)
            IF($array_vertex[$i] != $array_vertex[$j])
               IF($array_weight_matrix[$j*$size_array_vertex+$i] > $array_weight_matrix[$k*$size_array_vertex+$i] + $array_weight_matrix[$j*$size_array_vertex+$k])
                  $array_weight_matrix[$j*$size_array_vertex+$i] = $array_weight_matrix[$k*$size_array_vertex+$i] + $array_weight_matrix[$j*$size_array_vertex+$k]
                  $array_path_matrix[$i*$size_array_vertex+$j] = $array_path_matrix[$i*$size_array_vertex+$k]
               END_IF
            END_IF
         END_CYC
      END_CYC
   END_CYC
   
   $horizontal_line = HTAB(7)
   
   FOR($i = 0, $i < $size_array_vertex)
      $horizontal_line = STRCONCAT($horizontal_line, "[", $array_vertex[$i], "]", HTAB(1))
   END_CYC
   
   TFWRITE(STRCONCAT($array_company[$count], MATRIX_FILE_NAME, ".txt"), STRCONCAT($horizontal_line, #ENDL), 1)
   
   FOR($i = 0, $i < $size_array_vertex)
      $horizontal_line = STRCONCAT("[", $array_vertex[$i], "]", STRCUT(HTAB(6), 1, 6 - STRLEN($array_vertex[$i])))
      FOR($k = 0, $k < $size_array_vertex)
         $temp = $array_path_matrix[$i*$size_array_vertex+$k]
         $horizontal_line = STRCONCAT($horizontal_line, $temp,  STRCUT(HTAB(6), 1, 6 - STRLEN($temp) + ABS(3 - STRLEN($array_vertex[$k]))) )
      END_CYC
      TFWRITE(STRCONCAT($array_company[$count], MATRIX_FILE_NAME, ".txt"),  STRCONCAT($horizontal_line, #ENDL), ($i*2) + 3)
   END_CYC
   
   FOR($i = 0, $i < $size_array_vertex)
      FOR($k = 0, $k < $size_array_vertex)
         IF($i != $k)
            INIWRITE(STRCONCAT($array_company[$count], ROUTE_FILE_NAME, ".ini"), STRCONCAT($array_vertex[$i], ":", $array_vertex[$k]), $array_path_matrix[$i*$size_array_vertex+$k])
         END_IF
      END_CYC
   END_CYC
   
END_CYC

HALT

3
Общие вопросы / Сортировка вставками
« on: May 15, 2019, 11:57:48 PM »
после того как элементы массива под индексами 0 и 1 меняются местами, $k становится = 0, но выхода и вложенного цикла не происходит. Почему так происходит, где я накосячил? 

Code: (clickermann) [Select]
SUB(_SWAP, $var1, $var2)
   $sub_temp_var = GETVAR($var1)
   SETVAR($var1, GETVAR($var2))
   SETVAR($var2, $sub_temp_var)
END_SUB

Code: (clickermann) [Select]
#include "data\include\swap.cms"

$arr[0] = 9
$arr[1] = 8
$arr[2] = 3
$arr[3] = 4

FOR($i = 1, $i < ARRSIZE($arr))
   FOR($k = $i, ( ($k > 0) and ($arr[$k-1] > $arr[$k]) ), - 1)
      _SWAP(STRCONCAT("$arr[", GETVAR("$k") - 1, "]"), STRCONCAT("$arr[", GETVAR("$k"),"]") )
   END_CYC
END_CYC

FOR($i = 0, $i < ARRSIZE($arr))
   PRINT($arr[$i])
END_CYC

halt

P.S. А вот даже не знаю, я косяка не вижу и на ++ всё работает  :(

4
Общие вопросы / GETVAR и ARRSIZE
« on: February 16, 2019, 12:14:44 AM »
Понадобилась подпрограмма для поиска заданного значения в массиве и в случае успеха возврата его индекса.

Я хотел сделать более универсальный вариант, но возникла проблема с определением размера массива внутри подпрограммы. Может кто то уже сталкивался с этим и может подсказать?

Code: (clickermann) [Select]
$arr[0] = "afds"
$arr[1] = "bd3h"
$arr[2] = "ce56"

$name_array = "$arr"
$cell_array = 1

PRINT(GETVAR(STRCONCAT($name_array, "[", GETVAR("$cell_array"), "]" ) ) ) // Значение по индексу возвращает правильно

PRINT(ARRSIZE(GETVAR("$name_array"))) // А вот размер массива не возвращает

HALT

5
Есть прямоугольная 2D карта, на ней есть одна синяя точка с ограниченной квадратной областью видимости и неизвестное кол-во красных точек.

Цель задачи:
Если в радиус синей точки попала красная, то совершать клики на N количество пикселей в противоположную сторону от красной точки, что бы красная точка вышла из радиуса видимости синей. Т.е. образно говоря, что бы синяя точка убегала от красных.

В чем, собственно, сама проблема.
Область карты ограниченна и это тоже нужно как то учитывать перед кликами. Не ясно как быть с красными точками, брать одну ближайшую или как то учитывать все, применять какие то шаблонны? 

В общем, я буду рад, если мне кто-то составит компанию в решении данной задачи...


Pages: [1]