Имя: Пароль:
1C
 
Придумать формулу соответствия
, ,
0 Злопчинский
 
27.01.21
14:24
есть множество из нескольких кортежей
(23,24,25,26),(27,28,29),(30,31,32,33),(34,35,36,37),(38,39,40),(41,42,43,44)
то есть по количеству чисел в кортеже 4-3-4-4-3-4 итд.
.
можно ли придумать формулу с простыми арифметическими действиями, которая бы для любого числа (начиная с 23) возвращала первое значение соответсвующего кортежа..?
то есть в примере - какое бы число из ряда мы не взяли - должно получиться одно из
23,27,30,34,38,41 итд...
?
1 Злопчинский
 
27.01.21
14:28
Простые арифметические действия - плюс-минус-умножить-делить-цел-окр-делитьнацело%...
2 Mikeware
 
27.01.21
14:30
число минус номер в кортеже?
3 Злопчинский
 
27.01.21
14:31
(2) номер в кортеже явно не задан, исходная последовательность - просто числа...
23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44
.
сорри за неточное описание первоначальное
4 Злопчинский
 
27.01.21
14:33
.. и мы знаем что числовой ряд можно разбить на кортежи по правилу "4-3-4"
5 ViSo76
 
27.01.21
14:33
(3) Через соответствие и массив ссылок в виде значения легко решить, зачем формула?
6 Mikeware
 
27.01.21
14:33
(3) ну тогда возвращать всегда 1, и считать, что кортеж начинается с этого числа
7 Злопчинский
 
27.01.21
14:35
(5) это крайний вариант, но это бяково, так как требует задния дополнительных данных явно. это хреново, требует "квалификации"
8 Злопчинский
 
27.01.21
14:35
(6) сорри. я тупой, ничего не понял...
9 Злопчинский
 
27.01.21
14:37
можно считать что числовой ряд начинается с 1, если разбить на кортежи то тоже получится "4-3-4"...
10 Mikeware
 
27.01.21
14:39
(цел((число-23)%11)-7)%4+(цел((число-23)%11)-4)%3+(цел((число-23)%11))%4
11 ViSo76
 
27.01.21
14:40
(7) датам данных то с гулькин нос
Число в кортежах ограниченное значение в виде ключа, ну а массив ссылок на кортежи так же не шибко много отдирает. Начальное заполнение может быть не быстрым, а вот добавление кортежа быстрое, поиск очень быстрый - одни плюсы, нужна память можно поджать в хранилище ), потом развернуть при поиске
12 Ненавижу 1С
 
гуру
27.01.21
14:41
(0) нужно знать периодичность, дальше арифметика
13 Mikeware
 
27.01.21
14:44
(12) периодичность - 11. внутри этого периода - три кортежа
14 Злопчинский
 
27.01.21
14:55
(10) не катит
Процедура Сформировать(ПараметрЧисло)
    врем1 = _GetPerformanceCounter();
    Результат = (цел((ПараметрЧисло-23)%11)-7)%4+(цел((ПараметрЧисло-23)%11)-4)%3+(цел((ПараметрЧисло-23)%11))%4;
    Сообщить("число= "+параметрЧисло+", первое число кортежа= "+Результат+", время расчета= "+(_GetPerformanceCounter()-врем1)/1000);
КонецПроцедуры // Сформировать
.
число= 23, первое число кортежа= -4, время расчета= 0
число= 24, первое число кортежа= -1, время расчета= 0
число= 25, первое число кортежа= -1, время расчета= 0.001
число= 26, первое число кортежа= 2, время расчета= 0
число= 27, первое число кортежа= -3, время расчета= 0
число= 28, первое число кортежа= 0, время расчета= 0
число= 29, первое число кортежа= 3, время расчета= 0
число= 30, первое число кортежа= 3, время расчета= 0
число= 31, первое число кортежа= 2, время расчета= 0
число= 32, первое число кортежа= 5, время расчета= 0
число= 33, первое число кортежа= 5, время расчета= 0
число= 34, первое число кортежа= -4, время расчета= 0
число= 35, первое число кортежа= -1, время расчета= 0
число= 36, первое число кортежа= -1, время расчета= 0
число= 37, первое число кортежа= 2, время расчета= 0
число= 38, первое число кортежа= -3, время расчета= 0.001
число= 39, первое число кортежа= 0, время расчета= 0
число= 40, первое число кортежа= 3, время расчета= 0
число= 41, первое число кортежа= 3, время расчета= 0
число= 42, первое число кортежа= 2, время расчета= 0
число= 43, первое число кортежа= 5, время расчета= 0.001
число= 44, первое число кортежа= 5, время расчета= 0
15 8 bit
 
27.01.21
14:56
Т.е. получается, что берем 1-е значение и это будет первое значение первого кортежа, потом надо пропустить 3 значения и вернуть 4-е, потом надо пропустить 2 значения и вернуть 3-е, потом 4-е и цикл повторить.

23 х х х 27 х х 30 х х х 34 х х х 38 х х 41
4________3______4________4________3______4 и т.д.

?
16 Garykom
 
гуру
27.01.21
14:59
(0) Нет, нельзя
17 Злопчинский
 
27.01.21
15:00
(15) без циклов. операциями арифметическими.
.
для упрощения можно считать, что числовой ряд с 1 начинается


(4)1,2,3,4 - д.б. 1
(3)5,6,7 - д.б. 5
(4)8,9,10,11 - д.б. 8
-
(4)12,13,14,15 - д.б. 12
(3)16,17,18 - д.б. 16
(4)19,20,21,22 - д.б. 19
-
(4)23,24,25,26 - д.б. 23
(3)27,28,29 - д.б. 27
(4)30,31,32,33 - д.б. 30
-
итд
18 Злопчинский
 
27.01.21
15:01
(16) должно получиться..
тут же вроде как простая периодчность...
19 Garykom
 
гуру
27.01.21
15:02
20 Злопчинский
 
27.01.21
15:04
пусть даже не одним оператором типа как в (10), пусть несколькими ;-)
21 RomanYS
 
27.01.21
15:07
(17)
Функция _(Ч)
    Ост = (Ч-1)%11+1;
    Нач = ?(Ост >= 8, 8, ?(Ост >= 5, 5, 1));
    Возврат Ч - Ост + Нач;
КонецФункции // ()
22 Garykom
 
гуру
27.01.21
15:07
(20) Можно попробовать через https://ru.wikipedia.org/wiki/Периодическая_функция
Только какую подобрать под 4-3-4-4-3-4-4-... и главное как ее без цикла считать?
23 Garykom
 
гуру
27.01.21
15:08
(21) Ты цикл нашел?
24 Garykom
 
гуру
27.01.21
15:10
(23)+ 11, 22, 33 и т.д. типа?
25 Mikeware
 
27.01.21
15:10
(22) считать просто - как %11
26 Garykom
 
гуру
27.01.21
15:11
(25) согласен %11
27 Злопчинский
 
27.01.21
15:11
(21)
число= 1, первое число кортежа= 1, время расчета= 0
число= 2, первое число кортежа= 1, время расчета= 0
число= 3, первое число кортежа= 1, время расчета= 0
число= 4, первое число кортежа= 1, время расчета= 0
-
число= 5, первое число кортежа= 5, время расчета= 0
число= 6, первое число кортежа= 5, время расчета= 0
число= 7, первое число кортежа= 5, время расчета= 0
-
число= 8, первое число кортежа= 8, время расчета= 0
число= 9, первое число кортежа= 8, время расчета= 0
число= 10, первое число кортежа= 8, время расчета= 0
число= 11, первое число кортежа= 8, время расчета= 0

число= 12, первое число кортежа= 12, время расчета= 0
число= 13, первое число кортежа= 12, время расчета= 0
число= 14, первое число кортежа= 12, время расчета= 0
число= 15, первое число кортежа= 12, время расчета= 0
-
число= 16, первое число кортежа= 16, время расчета= 0
число= 17, первое число кортежа= 16, время расчета= 0
число= 18, первое число кортежа= 16, время расчета= 0
-
число= 19, первое число кортежа= 19, время расчета= 0
число= 20, первое число кортежа= 19, время расчета= 0
число= 21, первое число кортежа= 19, время расчета= 0
число= 22, первое число кортежа= 19, время расчета= 0
-
число= 23, первое число кортежа= 23, время расчета= 0.001
число= 24, первое число кортежа= 23, время расчета= 0
число= 25, первое число кортежа= 23, время расчета= 0
число= 26, первое число кортежа= 23, время расчета= 0
-
число= 27, первое число кортежа= 27, время расчета= 0
число= 28, первое число кортежа= 27, время расчета= 0
число= 29, первое число кортежа= 27, время расчета= 0
-
число= 30, первое число кортежа= 30, время расчета= 0
число= 31, первое число кортежа= 30, время расчета= 0
число= 32, первое число кортежа= 30, время расчета= 0
число= 33, первое число кортежа= 30, время расчета= 0
-
число= 34, первое число кортежа= 34, время расчета= 0
число= 35, первое число кортежа= 34, время расчета= 0
число= 36, первое число кортежа= 34, время расчета= 0
число= 37, первое число кортежа= 34, время расчета= 0
-
число= 38, первое число кортежа= 38, время расчета= 0
число= 39, первое число кортежа= 38, время расчета= 0
число= 40, первое число кортежа= 38, время расчета= 0
-
число= 41, первое число кортежа= 41, время расчета= 0
число= 42, первое число кортежа= 41, время расчета= 0
число= 43, первое число кортежа= 41, время расчета= 0
число= 44, первое число кортежа= 41, время расчета= 0
28 Злопчинский
 
27.01.21
15:12
(21) результат верный.
29 Злопчинский
 
27.01.21
15:13
есть варианты "проще", без условий...?
30 Ненавижу 1С
 
гуру
27.01.21
15:14
R = (N-(N-1)%11)+((N-1)%11-(N-1)%11%7)+((N-1)%11-(N-1)%11%4)*(1-((N-1)%11-(N-1)%11%7)/7);
31 Малыш Джон
 
27.01.21
15:16
(0)А последовательность кортежей любая или всегда 4-3-4-4-3-4-... ?
32 Злопчинский
 
27.01.21
15:17
(30) Результат верный
число= 1, первое число кортежа= 1, время расчета= 0
число= 2, первое число кортежа= 1, время расчета= 0
число= 3, первое число кортежа= 1, время расчета= 0
число= 4, первое число кортежа= 1, время расчета= 0
число= 5, первое число кортежа= 5, время расчета= 0
число= 6, первое число кортежа= 5, время расчета= 0
число= 7, первое число кортежа= 5, время расчета= 0
число= 8, первое число кортежа= 8, время расчета= 0
число= 9, первое число кортежа= 8, время расчета= 0
число= 10, первое число кортежа= 8, время расчета= 0
число= 11, первое число кортежа= 8, время расчета= 0
число= 12, первое число кортежа= 12, время расчета= 0.001
число= 13, первое число кортежа= 12, время расчета= 0
число= 14, первое число кортежа= 12, время расчета= 0
число= 15, первое число кортежа= 12, время расчета= 0.001
число= 16, первое число кортежа= 16, время расчета= 0
число= 17, первое число кортежа= 16, время расчета= 0
число= 18, первое число кортежа= 16, время расчета= 0
число= 19, первое число кортежа= 19, время расчета= 0
число= 20, первое число кортежа= 19, время расчета= 0
число= 21, первое число кортежа= 19, время расчета= 0
число= 22, первое число кортежа= 19, время расчета= 0
число= 23, первое число кортежа= 23, время расчета= 0
число= 24, первое число кортежа= 23, время расчета= 0
число= 25, первое число кортежа= 23, время расчета= 0
число= 26, первое число кортежа= 23, время расчета= 0.001
число= 27, первое число кортежа= 27, время расчета= 0
число= 28, первое число кортежа= 27, время расчета= 0
число= 29, первое число кортежа= 27, время расчета= 0
число= 30, первое число кортежа= 30, время расчета= 0
число= 31, первое число кортежа= 30, время расчета= 0
число= 32, первое число кортежа= 30, время расчета= 0
число= 33, первое число кортежа= 30, время расчета= 0
число= 34, первое число кортежа= 34, время расчета= 0
число= 35, первое число кортежа= 34, время расчета= 0
число= 36, первое число кортежа= 34, время расчета= 0
число= 37, первое число кортежа= 34, время расчета= 0
число= 38, первое число кортежа= 38, время расчета= 0.001
число= 39, первое число кортежа= 38, время расчета= 0
число= 40, первое число кортежа= 38, время расчета= 0
число= 41, первое число кортежа= 41, время расчета= 0
число= 42, первое число кортежа= 41, время расчета= 0
число= 43, первое число кортежа= 41, время расчета= 0
число= 44, первое число кортежа= 41, время расчета= 0.001
33 RomanYS
 
27.01.21
15:17
(29) Без условий или без "?(,,)"?
Без условий можно массив предварительно подготовить и использовать
{1,1,1,1,5,5,5,8,8,8}
34 Злопчинский
 
27.01.21
15:19
(31) в данном случае - 4-3-4
только, зараза, в ряду чисел кое-где встречаются числа не принадлежащие ни одному кортежу.. ;-)
например, с 1 до 44 идет 4-3-4, потом блин 45 которое считается внекортежным, с 46 снова 4-3-4
35 Злопчинский
 
27.01.21
15:20
(33) можно, но трабла в "подготовить и использовать", это требует "квалификации" и ручных действий.
вариант (30) предпочтительнее
36 RomanYS
 
27.01.21
15:21
(34) полки решил пронумеровать?
37 Злопчинский
 
27.01.21
15:21
задача тупо складская 4-3-4 - это стеллажи, по фронту на стеллаже "4яч-3яч-4яч"
38 Злопчинский
 
27.01.21
15:21
(36) если бы... пронумеровано уже.
39 Злопчинский
 
27.01.21
15:22
причем кривовато...
40 RomanYS
 
27.01.21
15:23
(35) А если ты понял (30) тогда - да, проще :)))
Сможешь же поправить формулу (30) для кортежей, например, 2-3-4-5?
41 Злопчинский
 
27.01.21
15:25
https://www.screencast.com/t/tgcwDi3BO - расстановка стеллажей, сейчас показано как есть сейчас. нумеровали от стены (67яч). с учетом того, что стеллажи могут быть еще наращиваться влево по картинке от 22 вниз по числам.
.
пронумеровали криво, нумеровать надо было с 68яч, потому что 22 яч которая сейчас на картинке - д.б. тоже проходом если стеллажи доставлять будут...
42 Злопчинский
 
27.01.21
15:26
по факту - задача расчета номера резервной ячейки, которая общая для нескольких резервных ячеек
43 Злопчинский
 
27.01.21
15:28
исходя из картинки в (41) ячейка 22 -будет проходом, и нумерация получится от 0 до 21 тоже по принципу 4-3-4..
а это хреново, обычно ячейка 00 - нумеруется буферная, а тут будет занята под рабочую ячейку - НО ЭТО НЕПРИНЦИПИАЛЬНО.
.
44 Mikeware
 
27.01.21
15:29
(39) а в чем нужда именно арифметики?
45 Garykom
 
гуру
27.01.21
15:30
(44) бесконечный склад ))
46 Злопчинский
 
27.01.21
15:33
Теперь в формулу (30) надо внести периодичность что
1. числовой ряд начинается с 0, ячейки 22 и 45 - "внекортежные"
2. и рассчитывать по получившемуся первому номеру кортежа соседние вверх и соседние вниз "первые номера".
.
то есть для любой рабочей ячейки (из соответсвующего кортежа) определяется номер общей резервной ячейки этого кортежа, если резервная полученная ячейка занята - ищем по соседним резервным ячейкам свободную...
.
47 RomanYS
 
27.01.21
15:35
(46) Формула станет чуть-чуть длиннее, пора уже писать прогу для написания формулы :))
На (44) ответь. Что мешает один раз пронумеровать и забыть?
48 Злопчинский
 
27.01.21
15:36
(44) упростить задание топологии и связи ячеек.
по большому счету иначе придется для каждой рабочей ячейки задавать связанную с ней резервную ячейку.
это порядка 2500 записей.
с учетом того, что эти 2500 записей связаных ячеек придется постоянно молотить, пусть даже и прочитав их единожды в память - хз как это на быстродействии скажется, потому как произведений и вычитаний таблиц и так немало еще до работы с резервными ячейками...
49 Злопчинский
 
27.01.21
15:37
(47) у тя бухи/манагеры часто настравивают принципиальные моменты в программе, которые определяют поведение/расчет результата программы?
50 Mikeware
 
27.01.21
15:38
а что мешает взять массив из 11 ячеек, и  один раз заполнить?
51 Mikeware
 
27.01.21
15:40
(48)  "потому как произведений и вычитаний таблиц и так немало еще до работы с резервными ячейками"  - ты "рюкзак" решаешь, чтоль?
52 Fragster
 
гуру
27.01.21
15:40
результат целочисленного деления на 11 и остаток от него спасут отца русской демократии
(37) а зачем ты на это забился? я когда адресацию делал отдельно стеллажи, отдельно ячейки нумеровал. типа А (проход) - 4 (стеллаж) - 3 (ярус) - 2 (ячейка)
53 RomanYS
 
27.01.21
15:41
(49) Не)))... всё само считается по формула принесенным с форума
54 Fragster
 
гуру
27.01.21
15:41
вот еще лайфхак - если несколько вариантов маршрута по складу - то можно одному стеллажу несколько (виртуальных) адресов присваивать (для правильной сортировки при различных путях обхода)
55 RomanYS
 
27.01.21
15:42
(50) (52) Так одного остатка уже недостаточно, проход с номером появился
56 Fragster
 
гуру
27.01.21
15:43
(55) так я и говорю - задача возникла изначально из-за неправильной нумерации
57 Fragster
 
гуру
27.01.21
15:44
просто правило 4-3-4 легко перерастет в 2-2-2-2, 3-3-3-1 и прочее
58 Fragster
 
гуру
27.01.21
15:45
ну и да - прочитал из всей ветке выборочно сообщения три-четыре
59 Fragster
 
гуру
27.01.21
15:45
*ветки
60 Garykom
 
гуру
27.01.21
15:47
Визуальный редактор схемы склада с переводом в компактную форму хранения и функция работающая по этой компактной
61 Злопчинский
 
27.01.21
15:47
(56) если бы Я нумеровал - я бы нумеровал правильно.
62 Fragster
 
гуру
27.01.21
15:48
(61) ну прилепи свою абстракцию сверху
63 Garykom
 
гуру
27.01.21
15:48
А на эти ваши " формулу с простыми арифметическими действиями" следующий прогер будет громко матом ругаться - икать кто то устанет
64 Fragster
 
гуру
27.01.21
15:51
(63) согласен
65 Злопчинский
 
27.01.21
15:52
(52) варианты нумерации разные. с отдельнйо нумерацией стеллажей/секций - хорошо когда стеллажи КРУПНЫЕ.
когда туева хуча меочевки и один стеллаж/секция от другого визуально еще выцепить надо - однопроходный поиск найди ячейку 77 превращается в двух проходный найди стеллаж/секцию 7, на ней найди место 3. это канает на крупных секциях стеллажах, а когда мелочевка и место 3 на секции 7 отстоит от места 3 в секции 8 на расстоянии метра - ты нафиг "убьешься" от мельтешения в обозримом поле кучи одинаковых номеров 1-2-3-1-2-3-4-1-2-3-1-2-3 и сборщики накосячат вместо 7-1 возьмут 8-1.
66 Злопчинский
 
27.01.21
15:53
(63) да, я тоже согласен.
67 RomanYS
 
27.01.21
15:54
(63) можно в комментариях @Ненавижу1С автором формулы указать, путь икает)
68 Злопчинский
 
27.01.21
15:54
(63) Предлагаешь все-таки остановиться на связных ячейках? задавать для каждой рабочей ячейки "подчиненную" резервную? так-то оно конечно "прозрачнее" будет. наверное к этому варианту склонюсь...
69 Злопчинский
 
27.01.21
15:55
(67) ;-) блин, ребята мозгоголовастые капец как! завидую прям хорошей завистью.
70 Fragster
 
гуру
27.01.21
16:14
(65) не возьмут, если сканить номера ячеек будут. да и никто не мешает вместо 3 писать полный адрес
71 Mikeware
 
27.01.21
16:16
(65) поэтому и используют нумерацию вида [I/II/III/IV]-[А/Б/В/Д/Е]-[1/2/3/4/5]-[А/Б/В/Д/Е]. Ну на крайняк просто цифра-буква-цифра
72 RomanYS
 
27.01.21
16:18
(69) Мы без злости, но (30) в продакшене не сильно лучше менеджеров делающих себе настройки)
73 Злопчинский
 
27.01.21
16:25
(70) сборщик должен быстро собирать и по минимум по возможности отвлекаться на РЕГУЛЯРНОЕ чтение множества цифр и букв.
74 Злопчинский
 
27.01.21
16:28
(70) возьмут, ибо скан ячейки не сеть физическое действие взятие товар а из ячейки. Скан всего лишь снижает вероятность ошибки. на крупных ячейках - ошибаться труднее, на куче мелких ячеек - сплошь и рядом. и каждый лишний скан на сборе кучи мелочевки - это потраченное время, отвлечение на скан, переключение с экрана (какую эячейку сосканирвоать) на сам скан. Понятно что тут идеальности не будет. надо точить собственно сами интерфейсы на ТСД и только опыт эксплуатации покажет что где как улучшить. пока - так.
75 Aleksey
 
27.01.21
16:50
(74) ну идёт отскана и замена на роботов которые сами по стойки заезжают и берут товар. Но это у супер крупняков
76 Ненавижу 1С
 
гуру
27.01.21
17:45
(67) да блин, чё сразу икает?
77 Злопчинский
 
27.01.21
18:52
(75) это хорошо для коробочной/паллетной сборки. для мелкоштучки - фиг вам. для мелкоштучки хорошо работает вертикальные конвеерные системы "товар к человеку", но ни стоят - мама не горюй.
78 Злопчинский
 
27.01.21
18:54
(68) не, делать надо не так, есть другие "штатные" методы. совокупности рабочих ячеек кортежа и родственной ячейке резерва присваивается одинаковый рейтинг, и операция размещения, при поиске ячеек-приемников, например, упорядочиваются по рейтингу.. и все получится... Попробуем.
79 Йохохо
 
27.01.21
19:05
(78) что такое ячейка резерва?
80 Йохохо
 
27.01.21
19:17
а, всё)
81 Конструктор1С
 
27.01.21
19:43
(10)(21)(30) омайгадбл! Отладчик рыдает, глаза выпадают...
82 Йохохо
 
27.01.21
20:32
(81) перепиши через ?(,,) =)
83 Злопчинский
 
28.01.21
03:16
(81) эх, такая хорошая формула в (30)...