Вход | Регистрация
 

Придумать формулу соответствия

Придумать формулу соответствия
Я
   Злопчинский
 
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
Простые арифметические действия - плюс-минус-умножить-делить-цел-окр-делитьнацело%...
   Mikeware
 
2 - 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"
   ViSo76
 
5 - 27.01.21 - 14:33
(3) Через соответствие и массив ссылок в виде значения легко решить, зачем формула?
   Mikeware
 
6 - 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"...
   Mikeware
 
10 - 27.01.21 - 14:39
(цел((число-23)%11)-7)%4+(цел((число-23)%11)-4)%3+(цел((число-23)%11))%4
   ViSo76
 
11 - 27.01.21 - 14:40
(7) датам данных то с гулькин нос
Число в кортежах ограниченное значение в виде ключа, ну а массив ссылок на кортежи так же не шибко много отдирает. Начальное заполнение может быть не быстрым, а вот добавление кортежа быстрое, поиск очень быстрый - одни плюсы, нужна память можно поджать в хранилище ), потом развернуть при поиске
   Ненавижу 1С
 
12 - 27.01.21 - 14:41
(0) нужно знать периодичность, дальше арифметика
   Mikeware
 
13 - 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
   8 bit
 
15 - 27.01.21 - 14:56
Т.е. получается, что берем 1-е значение и это будет первое значение первого кортежа, потом надо пропустить 3 значения и вернуть 4-е, потом надо пропустить 2 значения и вернуть 3-е, потом 4-е и цикл повторить.

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.