Python — стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. На Python реализовано большое количество проектов, также он активно используется для создания прототипов будущих программ. Python используется во многих крупных компаниях[102]: Dropbox, Google (например некоторые части Youtube и Youtube API написаны на Python[103]), Facebook[104], Instagram[105].
Python с пакетами NumPy, SciPy и MatPlotLib активно используется как универсальная среда для научных расчётов в качестве замены распространённым специализированным коммерческим пакетам Matlab, IDL и другим. Библиотека Astropy — популярный инструмент для астрономических расчётов.
Сочетание простоты и лаконичности с возможностью использования сложных абстракций и мощных разнообразных инструментов делает Python удобным в качестве скриптового языка. Возможность его встраивания ограничивается объёмом интерпретатора, но в крупных системах это ограничение несущественно. В профессиональных программах трёхмерной графики, таких как Autodesk Maya, Blender, Houdini и Nuke, Python используется для расширения стандартных возможностей программ[106][107]. В Microsoft Power BI Desktop Python, наряду со встроенными языками запросов и языком программирования R, может использоваться на этапе загрузки данных в ETL-процессах, расчётах и графической визуализации данных[108][109].
Также Python подходит для выполнения нестандартных или сложных задач в системах сборки проектов, что обусловлено отсутствием необходимости предварительной компиляции исходных файлов. В проекте Google Test он используется для генерации исходного кода mock-объектов для классов языка C++[110].
Интерпретатор Python может использоваться в качестве мощной командной оболочки и скриптового языка для написания командных файлов ОС. Лёгкость обращения из Python-скриптов к внешним программам и наличие библиотек, дающих доступ к управлению системой, делают Python удобным инструментом для системного администрирования.[111] Он широко используется для этой цели на платформе Linux: обычно Python поставляется с системой, во многих дистрибутивах инсталляторы и визуальный интерфейс системных утилит написаны именно на Python. Используется он и в администрировании других Unix-систем, в частности, в Solaris и macOS.[111] Кросс-платформенность самого языка и библиотек делает его привлекательным для унифицированной автоматизации задач системного администрирования в гетерогенных средах, где совместно применяются компьютеры с операционными системами различных типов.
n, m = 3, 3
bounty = [4, 2, 1]
coins = 0
# Игра установлена
queue = [(0, 0, 0)]
while queue:
score, k, day = queue.pop(0)
# Дни перед турниром
day += 1
if day > m:
# Наступил день турнира
coins = max(coins, score)
else:
# Еще есть время собирать монеты
# Пропустим этот день
queue.append((score, 0, day))
k += 1
# А лучше соберем награду
score += bounty[(k - 1) % n]
queue.append((score, k, day))
print(coins) # 8
def get_val(data, query):
main_key, index, sub_key = query.split('.')
if index == '*':
return [item[sub_key] for item in data[main_key]]
else:
return data[main_key][int(index)][sub_key]
data = {
"some_list": [
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
{"key1": "some_value1", "key2": "some_value2" },
]
}
print(get_val(data, 'some_list.*.key1'))
print(get_val(data, 'some_list.0.key1'))
program addition;
// обычное сложение в столбик
function add(a, b: string): string;
const
OFFSET = 48;
var
tmp: integer;
carry: integer;
index_a,
index_b: integer;
addend_a,
addend_b: integer;
begin
result := '';
// индексы последних цифр в каждой строке, т.к. сложение начинается справа налево
index_a := length(a);
index_b := length(b);
// значение переноса, то что держим в уме, когда в сумме получаем двузначное число
// например, 9 + 4 = 13: 3 пишем, а 1 в уме
carry := 0;
// продолжаем складывать, пока не пройдем по всем числам каждой строки
while (index_a <> 0) or (index_b <> 0) do
begin
// первое и второе слагаемые
addend_a := 0;
addend_b := 0;
// вместо выравнивания строк (дополнения нулями слева), я проверяю чтобы индекс не уходил в минус
if index_a > 0 then
begin
addend_a := ord(a[index_a]) - OFFSET;
dec(index_a);
end;
if index_b > 0 then
begin
addend_b := ord(b[index_b]) - OFFSET;
dec(index_b);
end;
// собственно само сложение
tmp := addend_a + addend_b + carry;
carry := tmp div 10;
result := chr((tmp mod 10) + OFFSET) + result;
end;
if carry > 0 then
result := chr(carry + OFFSET) + result;
end;
begin
writeln(add('999999999999999', '8009730000456465480001'));
// 8009731000456465480000;
end.
<TargetFramework>netcoreapp3.0</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
function div(x, y) {
return (x - x % y) / y;
}
function checked(number) {
const template = [1, 2, 5];
while (true) {
if (div(number, 100) > 0) {
number = div(number, 10);
} else {
return template.includes(div(number, 10));
}
}
}
let data = [10, 20, 30, 50, 235, 3000];
data.forEach(item => {
if (checked(item)) {
console.log(item);
}
});
Предположим, что таксомоторная компания имеет три свободные машины (исполнители), и три заказчика (работы), желающих получить такси как можно быстрее. Фирма заботится о времени доставки такси к заказчику, так что для каждой машины стоимость определяется временем, с какой машина доберётся до места ожидания, определённого заказчиком. Решением задачи о назначениях будет распределение машин по заказчикам такое, что суммарная стоимость (суммарное время ожидания) минимальна.
Задачу о назначениях можно сделать более гибкой. В вышеприведенном примере могут оказаться не три, а четыре свободных такси, но заказчика по-прежнему три. Можно назначить четвёртого фиктивного заказчика с нулевой стоимостью, распределение же машины на фиктивного заказчика означает — «ничего не делай».
Аналогичный приём можно использовать в случае, когда число заказов может превышать число доступных машин, и машина может быть назначена на выполнение нескольких работ, а также когда работа может быть назначена нескольким исполнителям (например, если заказчик — группа, не помещающаяся в одно такси). Можно также поставить задачу увеличения дохода, а не минимизацию цены.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
const int _DELAY = 300;
void set_cursor_position(int row, int col)
{
COORD coord;
coord.X = col;
coord.Y = row;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void set_left_top(int *start_row, int *start_col, const int finish_row, const int finish_col)
{
while (true)
{
Sleep(_DELAY);
set_cursor_position(*start_row, *start_col);
printf("1");
*start_row = *start_row - 1;
*start_col = *start_col - 1;
if (*start_row < finish_row)
{
*start_row = *start_row + 1;
*start_col = *start_col + 2;
break;
}
if (*start_col < finish_col)
{
*start_col = *start_col + 1;
break;
}
}
}
void set_right_bottom(int *start_row, int *start_col, const int finish_row, const int finish_col)
{
while (true)
{
Sleep(_DELAY);
set_cursor_position(*start_row, *start_col);
printf("0");
*start_row = *start_row + 1;
*start_col = *start_col + 1;
if (*start_col > finish_col)
{
*start_row = *start_row - 2;
*start_col = *start_col - 1;
break;
}
if (*start_row > finish_row)
{
*start_row = *start_row - 1;
break;
}
}
}
int main()
{
printf("*** MATRIX RESOLUTION ***\n\n");
int rows;
printf("ROWS: ");
scanf("%d", &rows);
int padding_top = rows + 4;
int padding_left = 2;
int cols;
printf("COLS: ");
scanf("%d", &cols);
cols = cols + padding_left;
bool direction = true;
int start_row = padding_top;
int start_col = padding_left;
while (start_row != (padding_top - rows) + 1 || start_col != cols)
{
if (direction)
{
set_left_top(&start_row, &start_col, (padding_top - rows) + 1, padding_left);
}
else
{
set_right_bottom(&start_row, &start_col, padding_top, cols - 1);
}
direction = !direction;
}
padding_top = padding_top + 1;
set_cursor_position(padding_top, 0);
return 0;
}