Задать вопрос
  • Как привести значение ячейки к определенному формату в EXCEL?

    @shushpanio
    shushpanio
    Формула при условии что нужный номер в ячейке А1:
    ="+7("&ЛЕВСИМВ(A1;3)&") "&ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1)-3);3)&"-"&ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1)-6);2)&"-"&ПРАВСИМВ(A1;2)

    59db791060646724407108.jpeg
    Ответ написан
    4 комментария
  • Как привести значение ячейки к определенному формату в EXCEL?

    @lvv85
    Можно и без VBA сделать:
    ="+7 (" & ПСТР(A1;ДЛСТР(A1)-10;3) & ") " & ПСТР(A1;ДЛСТР(A1)-7;3) & "-" & ПСТР(A1;ДЛСТР(A1)-4;2) & "-" & ПСТР(A1;ДЛСТР(A1)-2;2)
    Ответ написан
    Комментировать
  • Как привести значение ячейки к определенному формату в EXCEL?

    x67
    @x67
    формула берет цифры из ячейки А1 и преобразует в нужный вид:
    ="+7("&ПСТР(A1;1;3)&")"&ПСТР(A1;4;3)&"-"&ПСТР(A1;7;2)&"-"&ПСТР(A1;9;2)
    или
    =СЦЕПИТЬ("+7(";ПСТР(A1;1;3);")";ПСТР(A1;4;3);"-";ПСТР(A1;7;2);"-";ПСТР(A1;9;2))
    Ответ написан
    Комментировать
  • Как оптимизировать простенький код?

    longclaps
    @longclaps
    a, b, n = 2, 3, 4  # 2сек/лист, 3сек/лист, 4 листа
    ab = a + b
    print(min(a * (n - n * a // ab), b * (n - n * b // ab)))
    Ответ написан
    2 комментария
  • Как оптимизировать простенький код?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Оптимизировать неправильное решение бесполезно. Тут 2 варианта:
    1) Реализовать бинарный поиск. У вас уже правильная идея, как определить, что за заданное количество секунд можно напечатать сколько надо или больше страниц (floor(seconds/s1)+floor(seconds/s2) >= n). Теперь осталось вместо линейного увеличения seconds, удваивать его. Т.е. вместо seconds = seconds+1 делать seconds = seconds*2. После чего сделать бинарный поиск на отрезке [1,seconds].

    2) Применить математику. Нужно найти минимальное x такое, что floor(x/s1)+floor(x/s2) >= n.

    Забъем на округление и решим x/s1 + x/s2 >= n.
    x = ceil(n*s1*s2/(s1+s2)).

    Но. это будет оценка сверху, потому что мы выкинули округления, которые уменьшают реальное значение количества напечатанных за x секунд страниц. Но, внимание, реальное количество страниц будет максимум на 2 страницы меньше, потому что oкругление сбивает максимум 1 страницу.

    Теперь будем увеличивать x, чтобы увеличить количество напечатанных страниц. Если просто прибавлять 1 каждый раз, то почти всегда занчение не поменяется, потому что x/s1 так и будет дробным. Увеличение произойдет только когда x/s1 или x/s2 будет целым. Следующее такое число можно легко найти (это будет x, делящееся на s1 или s2. Итак, решение:

    def twoprinters(s1,s2,pages):
        seconds= int(pages*s1*s2 + s1 + s2 - 1)/(s1+s2)
        while int(seconds/s1)+int(seconds/s2) < pages:
                a = seconds - seconds%s1 + s1
                b = seconds - seconds%s2 + s2
                seconds = min(a,b)


    Этот код будет работать мгновенно для очень больших чисел. Потому что цикл while тут будет исполнятся максимум 2 раза. Каждый раз значение напечатанных страниц будет увеличиваться как минимум на 1, а оно изначально будет максимум на 2 меньше ответа. Странные вычисления a и b - это следующие числа за seconds, которые делятся на s1 и s2 соответственно. Мы вычитаем остаток от деления и получаем предыдущее или равное seconds число, делящееся на s1 и s2. Прибавляя s1 или s2 мы получаем следующее число, как нам и надо.
    Ответ написан
    Комментировать
  • Как оптимизировать простенький код?

    thematdev
    @thematdev
    Плагинёр
    Я конечно понимаю, что пайтон медленный(ибо изжопыкомпиляция по строчкам), но оптимизацию все равно сделал:
    seconds=1
        r=0

    Напиши вне войда ибо не нужно каждый раз инициализировать переменную.
    Также зачем проверять на if/else? Поставь проверку
    if (r<pages):
        seconds += 1

    И поставь оператор начать цикл сначала(забыл его))), а если не дойдёт, то брейк -> проверок на 1 меньше.
    И забудь о foo = foo+1, есть же +=
    А если всё опять встанет, то пиши на Java!
    Ответ написан
    1 комментарий
  • Как удаленно подключить принтер пользователю?

    Стоит попросить доменных админов настроить GPP для подключения принтеров пользователям.
    Ответ написан
    Комментировать
  • Как удаленно подключить принтер пользователю?

    @SystemShock
    Когда-то решал вопрос подобный. Использовал логон скрипт для подключения - отключения принтеров. Перепишите под себя.
    spoiler
    'VBScript
    'on error resume next
    
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    MegaPrinter = 0
    
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set colPrinters = WSHNetwork.EnumPrinterConnections
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If colPrinters.Count > 0 then
    	For i = 0 To colPrinters.Count - 1 Step 2
    		if instr(colPrinters(i+1), "TNIKIT28") > 0 then
    '			msgbox colPrinters(i) & chr(9) & colPrinters(i+1)
    			WSHNetwork.RemovePrinterConnection colPrinters(i+1), true, true
    			writelog("remove printer \\TNIKIT28\CANONMF3")
    		end if
    '		if instr(colPrinters(i+1), "TNIKIT28") > 0 then
    '			MegaPrinter = 1
    '		end if
    		' Поиск удаляемого принтера
    		if instr(colPrinters(i+1), "BUH2") > 0 then
    '			msgbox colPrinters(i) & chr(9) & colPrinters(i+1)
    			WSHNetwork.RemovePrinterConnection colPrinters(i+1), true, true
    			WSHNetwork.AddWindowsPrinterConnection "\\IRUDEN12\FX890"
    			writelog("add printer \\IRUDEN12\FX890")
    		end if
    		if instr(colPrinters(i+1), "SECRETAR") > 0 then
    '			msgbox colPrinters(i) & chr(9) & colPrinters(i+1)
    			WSHNetwork.RemovePrinterConnection colPrinters(i+1), true, true
    			WSHNetwork.AddWindowsPrinterConnection "\\TNIKIT28\CANONMF3"
    			writelog("add printer \\TNIKIT28\CANONMF3")
    		end if
    	Next
    	if MegaPrinter = 0 then
    		WSHNetwork.AddWindowsPrinterConnection "\\TNIKIT28\ML1710"
    		writelog("add printer \\TNIKIT28\ML1710")
    	end if
    End If
    
    sub writelog (sLine)
        Set fList = fso.OpenTextFile("s:\b2user\temp\new_prn.log", ForAppending, True)
        fList.WriteLine sLine & " - " & now
        fList.Close
    end sub
    Ответ написан
    Комментировать