• Не ведется подсчет в алгоритме. Как это можно исправить и что может быть не так?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    #include <iostream>
    
    int main() {
        int count = 0;
        long num;
        
        std::cout << "Введите ваше число: ";
        std::cin >> num;
    
        int previous1 = -1;
        int previous2 = -1;
        int current;
    
        while (num > 0) {
            current = num % 10;
            num /= 10; 
    
            if (previous2 == 7 && previous1 == 7 && current == 7) {
                count += 1;
                break;
            }
    
            previous2 = previous1;
            previous1 = current;
        }
    
        if (count > 0) {
            std::cout << 'T' << std::endl;
        } else {
            std::cout << 'F' << std::endl;
        }
    
        return 0;
    }
    Ответ написан
    Комментировать
  • Почему не правильно передается название файла?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Имя файла должно быть обернуто в кавычки:

    xml_event_data = """
    <item EnabledEvent="False" UseDate="False" EveryYear="False" Imm="False" Above="False" FileName='run cmd /c del "{}"' ...
    """.format(full_filename.replace('"', '\\"'), task_name)
    Ответ написан
  • Любой символ в маске ввода номера, как сделать?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Да просто доработайте маску и всё:

    $("input[name=phone]").mask("+?99999999999");

    Если прям хотите изощриться, то можно использовать более сложный шаблон:

    $("input[name=phone]").mask("A9999999999", {
      translation: {
        'A': { pattern: /[0-9+]/ }
      }
    });
    Ответ написан
    1 комментарий
  • Как правильно наложить оверлей?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Ответ написан
    Комментировать
  • Как запустить Jquery Sortable по событию touchstart?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1">
    	<title>jQuery UI Sortable - Default functionality</title>
    	<link rel="stylesheet" href="https://code.jquery.com/ui/1.14.0/themes/base/jquery-ui.css">
    	<style>
    		#sortable {
    			list-style-type: none;
    			margin: 0;
    			padding: 0;
    			width: 60%;
    		}
    
    		#sortable li {
    			margin: 0 3px 3px 3px;
    			padding: 0.4em;
    			padding-left: 1.5em;
    			font-size: 1.4em;
    			height: 18px;
    		}
    
    		#sortable li span {
    			position: absolute;
    			margin-left: -1.3em;
    		}
    	</style>
    	<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
    	<script src="https://code.jquery.com/ui/1.14.0/jquery-ui.js"></script>
    	<script src="jquery.ui.touch-punch.min.js"></script>
    	<script>
    		$(function () {
    			const $sortable = $("#sortable");
    
    			$sortable.sortable({
    				disabled: true
    			});
    
    			$sortable.on("contextmenu", function (e) {
    				e.preventDefault();
    			});
    
    			$sortable.on("touchstart", function () {
    				$(this).sortable("option", "disabled", false);
    			});
    		});
    	</script>
    </head>
    
    <body>
    
    	<ul id="sortable">
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
    		<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
    	</ul>
    
    </body>
    
    </html>
    Ответ написан
  • Где моя ошибка в питоне?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    import math
    
    while True:
        a = int(input("ax^2+bx+c=0 / a: ")) 
        b = int(input("ax^2+bx+c=0 / b: "))
        c = int(input("ax^2+bx+c=0 / c: "))
        
        d = b ** 2 - 4 * a * c
        
        if d > 0:
            x1 = (-b + math.sqrt(d)) / (2 * a)
            x2 = (-b - math.sqrt(d)) / (2 * a)
            print(f'Корней: 2. \n x1 = {x1}')
            print(f'Корней: 2. \n x2 = {x2}')
            
        elif d == 0:
            x1 = -b / (2 * a)
            print(f'Корень: 1. \n x1 = {x1}')
            
        else:
            print("Корней: 0")
    Ответ написан
    Комментировать
  • Как создать уникальное событие?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    <html>
    <body onload="bodyload()">
    <button onclick="colorchangerclick()">newcolor</button>
    <script>
    function bodyload() {
      document.body.addEventListener("bodybgcolorchange", () => alert("bodybgcolorchange сработало!"));
    }
    
    function colorchangerclick() {
      document.body.style.background = prompt("Введите новый цвет фона (например, red, #000, rgb(0, 0, 0))");
    
      const bodybgcolorchange = new CustomEvent("bodybgcolorchange", {
        detail: {
          name: "bodybgcolor",
        },
      });
    
      document.body.dispatchEvent(bodybgcolorchange);
    }
    </script>
    </body>
    </html>
    Ответ написан
  • Как лучше делать адаптивные размеры у блоков не имеющих font-size?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Используйте единицы vw и vh, они зависят от ширины и высоты окна браузера и очень хорошо подходят для создания адаптивных отступов.

    .section {
      padding: calc(10px + 2vw);
    }


    В примере 2vw добавит динамичный отступ в зависимости от ширины окна браузера.
    Ответ написан
    Комментировать
  • Почему перестал работать кусок кода на Линукс?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Попробуйте явно читать содержимое файла перед отправкой в S3:

    @upload_router.post('')
    async def upload_file(
            request: Request, 
            file: Annotated[UploadFile, File()],
        ):
        file_content = await file.read()
    
        await s3_client.upload_fileobj(
            io.BytesIO(file_content),
            'bucket-name',
            f'{unique_filename}_{file.filename}' 
        )
    Ответ написан
    Комментировать
  • Как решить задачу на определения ближайшего др сотрудника?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    У тебя в первом варианте программы логика сравнения возраста работает некорректно - необходимо сравнивать день рождения и текущую дату, учитывая текущий год.
    Во втором варианте программы осуществляется сортировка только по дате рождения, но не по возрасту.

    Исправленный итоговый вариант:

    from datetime import datetime, timedelta
    
    def find_youngest_birthday(employees, current_date):
        current_date = datetime.strptime(current_date, '%d.%m.%Y')
        
        start_date = current_date + timedelta(days=1)
        end_date = current_date + timedelta(days=7)
        
        youngest_employee = None
        youngest_birthday = None
        youngest_age = None
        
        for employee in employees:
            birthday = datetime.strptime(employee['birthday'], '%d.%m.%Y')
            
            birthday_this_year = birthday.replace(year=current_date.year)
            
            if start_date <= birthday_this_year <= end_date:
                age = current_date.year - birthday.year
                if current_date.month < birthday.month or (current_date.month == birthday.month and current_date.day < birthday.day):
                    age -= 1
                
                if youngest_employee is None or age < youngest_age:
                    youngest_employee = employee
                    youngest_age = age
                    youngest_birthday = birthday_this_year
                elif age == youngest_age and birthday_this_year > youngest_birthday:
                    youngest_employee = employee
                    youngest_birthday = birthday_this_year
    
        if youngest_employee:
            return f"{youngest_employee['name']} {youngest_employee['surname']}"
        else:
            return "Дни рождения не планируются"
    
    current_date = input()
    n = int(input())
    employees = []
    for _ in range(n):
        name, surname, birthday = input().split()
        employees.append({'name': name, 'surname': surname, 'birthday': birthday})
    
    print(find_youngest_birthday(employees, current_date))
    Ответ написан
  • Как в yii2 получить 2 параметра в поле?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Добавьте просто скрытое поле для передачи id_field, а в основное поле передавайте только данные:

    <?php foreach ($fields as $field): ?>
        <?= Html::activeHiddenInput($model, "[$field->id]id_field", ['value' => $field->id]) ?>
        <?= $form->field($model, "[$field->id]data")->textInput(['value' => $model->data]) ?>
    <?php endforeach; ?>


    В результате вы получите примерно такую структуру post запроса:

    Field_Data[1][id_field] = 1
    Field_Data[1][data] = "значение поля 1"
    Field_Data[2][id_field] = 2
    Field_Data[2][data] = "значение поля 2"


    А уже в контроллере обрабатывайте полученные поля как вам нужно:

    if (Yii::$app->request->post('Field_Data')) {
        foreach (Yii::$app->request->post('Field_Data') as $fieldData) {
            $model = new FieldData();
            $model->id_field = $fieldData['id_field'];
            $model->data = $fieldData['data'];
            if ($model->validate()) {
                $model->save();
            }
        }
    }
    Ответ написан
    1 комментарий
  • Как нынче делают WSS?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Как сказал человек выше, лучшим будет использование реверс-прокси на Nginx. Причин этому достаточно, во-первых, высокая производительность, особенно если у вас проект высоконагружаемый, отлично работает с SSL.

    Вот пример конфигурации Nginx для правильной работы:

    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        ssl_certificate /etc/nginx/ssl/your_domain.crt;
        ssl_certificate_key /etc/nginx/ssl/your_domain.key;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        # Прокси для WebSocket
        location /wss/ {
            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        location / {
            proxy_pass http://localhost:80;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    Ответ написан
  • Почему последовательный вызов работает, а в одну строку нет?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Метод getOfers() должен возвращать объект класса, а не true.

    class ProductAmount
    {
        function __construct($array = array()) { 
            ...
        }
    
        function getOfers($items = []) {
            ...
            return $this;
        }
    
        function getProfuctStore($inListStore = 'N') {
            ...
            return $this;
        }
    
        function setListStore($inListStore = 'Y') {
            ...
            return $this;
        }
    }


    $obj = new ProductAmount();
    $res = $obj->getOfers([229411])->getProfuctStore('Y')->setListStore('Y');
    Ответ написан
    Комментировать
  • Как отправить запрос на сервер при закрытии вкладки?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Можно установить флаг в sessionStorage для условия перезагрузки страницы:

    useEffect(() => {
      sessionStorage.setItem('isReloading', 'true');
    
      const handleBeforeUnload = (event) => {
        const isReloading = sessionStorage.getItem('isReloading');
        if (isReloading === 'false') {
          QDB.edit(manager.id, { online: 0, logout_date: D_TimeNow(), navigator: navigator.userAgent }, 'users');
        }
      };
    
      const handleUnload = () => {
        sessionStorage.setItem('isReloading', 'false');
      };
    
      window.addEventListener('beforeunload', handleBeforeUnload);
      window.addEventListener('unload', handleUnload);
    
      return () => {
        window.removeEventListener('beforeunload', handleBeforeUnload);
        window.removeEventListener('unload', handleUnload);
      };
    }, []);
    Ответ написан
  • Почему не работает pywinauto?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Вы пытаетесь запустить телегу, которая скорее всего у вас 64-битная, а вы пытаетесь запустить её в 32-битной среде.
    Ответ написан
  • Tinkoff api invest не принимает токен. В чём ошибка?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    У вас неправильное представление как работать с переменными окружения. В квадратных скобках должен быть не сам токен, а название переменной, задаваемой в .env. А дальше уже получайте значение с этой переменной в вашем коде;

    from dotenv import load_dotenv
    import os
    
    load_dotenv()
    
    TOKEN = os.getenv("TINKOFF_INVEST_TOKEN")


    Пример .env:

    TINKOFF_INVEST_TOKEN=мой токен
    Ответ написан
    Комментировать
  • Как упомянуть ответственного в комментариях через вебхук?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    В API Битрикс24 нет прямой возможности упомянуть пользователя в комментарии, как это реализовано в интерфейсе Битрикс24. Могу предложить сделать простое упоминание текстом:

    $responsibleId = 123;
    $responsibleName = "Иван Иванов";
    
    $updateComm = CRest::call(
        'crm.timeline.comment.add',
        array(
            'fields' => array(
                'ENTITY_ID' => $dealId,
                'ENTITY_TYPE' => 'deal',
                'COMMENT' => "Ответственный: $responsibleName (#$responsibleId)"
            )
        )
    );
    Ответ написан
    Комментировать
  • Как в QTextEdit::contextMenuEvent получить номер стоки?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    void MyTextEdit::contextMenuEvent(QContextMenuEvent *event) {
        QPoint mousePos = event->pos();
    
        QTextCursor cursor = cursorForPosition(mousePos);
        int blockNumber = cursor.blockNumber(); 
    
        QMenu *menu = createStandardContextMenu();
        menu->addAction(QString("Строка: %1").arg(blockNumber + 1)); 
        menu->exec(event->globalPos());
        delete menu;
    }
    Ответ написан
    Комментировать
  • Почему текст не распространяется под фотографией?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Ответ написан
    Комментировать