Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи три камня или убрать из кучи семь камней или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 19 или меньше камней. В начальный момент в куче было S камней, S ≥ 20.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
from math import ceil, floor
def F(s, n):
if s <= 19:
return n % 2 == 0
if n == 0:
return 0
h = [F(s-7, n-1), F(floor(s/3), n-1)]
return any(h) if (n - 1) % 2 == 0 else all(h)
print([s for s in range(20, 1000) if F(s, 2)])
print([s for s in range(20, 1000) if F(s, 3) and not F(s, 1)])
print([s for s in range(20, 1000) if F(s, 4) and not F(s, 2)])
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥4
Укажите наименьшее целое значение А, при котором выражение
(2y + 3x < A) V (x > 15) V (y > 35)
истинно для любых целых положительных значений х и у.
def F(x, y, A):
return (2 * y + 3 * x < A) or (x > 15) or (y > 35)
for A in range(1, 1000):
if all(F(x, y, A) for x in range(1, 1000) for y in range(1, 1000)):
print(A)
break
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥5👍4
Дана программа для Редактора:
ПОКА нашлось (577) ИЛИ нашлось (677) ИЛИ нашлось (657)
ЕСЛИ нашлось (577)
ТО заменить (577,76)
ЕСЛИ нашлось (677)
ТО заменить (677,75)
ЕСЛИ нашлось (657)
ТО заменить (657, 56)
На вход приведённой выше программе поступает строка, начинающаяся с цифры «5», а затем содержащая п цифр «7» (3 < n < 10000). Определите наибольшее значение п, при котором сумма цифр в строке, получившейся в результате выполнения программы, равна 76.
for n in range(4, 10000):
s = '5' + n * '7'
while '577' in s or '677' in s or '657' in s:
if '577' in s:
s = s.replace('577', '76', 1)
if '677' in s:
s = s.replace('677', '75', 1)
if '657' in s:
s = s.replace('657', '56', 1)
summ = sum([int(i) for i in s])
if summ == 76:
print(n)
# Ответ: 19
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6❤🔥4🔥4👍2
Напишите программу, которая перебирает целые числа, бльшие 2 900 000, в порядке возрастания и ищет среди них такие, которые:
имеют ровно два различных натуральных делителя, кроме единицы и самого числа, то есть представляют собой произведение двух различных простых чисел, оба простых множителя содержат в своей записи ровно одну цифру О.
В ответе укажите первые пять таких чисел в порядке возрастания. Во втором столбце таблицы для каждого числа укажите его наибольший простой делитель.
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))
def Prost(x):
if x == 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
cnt = 0
for x in range(2_900_000, 10**10):
div = divisors(x)
if len(div) == 2 and Prost(div[0]) and Prost(div[1]):
if str(div[0]).count('0') == 1 and str(div[1]).count('0') == 1:
print(x, max(div))
cnt += 1
if cnt == 5:
break
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤🔥4❤4👍2
Как ваши успехи? Насколько оцениваете свои баллы?
Anonymous Poll
11%
< 30
7%
30-40
12%
40-50
6%
50-60
15%
60-70
18%
70-80
12%
80-90
19%
90+
17 заданий - 70 баллов
21 задание - 80 баллов
25 заданий - 90 баллов
Последние два номера дают по 2 первичных балла (за каждый ответ), суммарно за них можно получить 10 вторичных.
Забавный пример программки для перевода:
while True:
s = int(input('Сколько первичных баллов ты планируешь набрать? \n'))
if 1 <= s <= 29:
tab = [7, 14, 20, 27, 34, 40, 43, 46, 48, 51,
54, 56, 59, 62, 64, 67, 70, 72, 75, 78,
80, 83, 85, 88, 90, 93, 95, 98, 100]
print(f'Ты получишь: {tab[s - 1]} баллов! \n')
else:
print('Выход из программы.')
exit()
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤3❤🔥3
❤2
❤3
🥷 Ладно, последний опрос на сегодня!)
А насколько вам был полезен и пригодился контент на моём канале? В комментариях можно поделиться мнением, пожеланиями, конструктивной критикой🥷
А насколько вам был полезен и пригодился контент на моём канале? В комментариях можно поделиться мнением, пожеланиями, конструктивной критикой
Anonymous Poll
54%
10%
11%
8%
3%
2%
12%
❤4❤🔥2🔥1
Если вы еще выбираете вуз – обратите внимание на проект ИТ-гранты 2025. Это не просто консультации, а полноценная помощь в выборе университета и поступлении:
✨ Вузы с проходными от 200 баллов (не нужно гнаться за 290+)
✨ Современные кампусы с отличной техникой и условиями
✨ Занятия ведут преподаватели из МФТИ
✨ Уже со 2 курса – возможность попасть на стажировку в ИТ-компании (по специальности, а не “подработка ради галочки”)
🎯 Все консультации – бесплатны. Их поддерживают ИТ-компании, чтобы привлечь к себе перспективных студентов.
🔗 Узнать подробности
Посмотреть точно стоит – можно получить грант до 330 000 ₽ (сумма зависит от ваших баллов).
Удачи с поступлением! 🍀
IT-Гранты 2025 для абитуриентов
✨ Вузы с проходными от 200 баллов (не нужно гнаться за 290+)
✨ Современные кампусы с отличной техникой и условиями
✨ Занятия ведут преподаватели из МФТИ
✨ Уже со 2 курса – возможность попасть на стажировку в ИТ-компании (по специальности, а не “подработка ради галочки”)
🎯 Все консультации – бесплатны. Их поддерживают ИТ-компании, чтобы привлечь к себе перспективных студентов.
🔗 Узнать подробности
Посмотреть точно стоит – можно получить грант до 330 000 ₽ (сумма зависит от ваших баллов).
Удачи с поступлением! 🍀
IT-Гранты 2025 для абитуриентов
❤🔥6❤4👍3🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥6🔥4
Автор: Сергей Горбачев
Уровень: Средний
Сеть задана IP-адресом 140.116.194.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых каждый из четырёх байтов оканчивается нулём?
from ipaddress import *
net = ip_network('140.116.194.0/255.255.240.0', 0)
cnt = 0
for ip in net:
b = f'{ip:b}'
if b[:8][-1] == '0':
if b[8:16][-1] == '0':
if b[16:24][-1] == '0':
if b[24:][-1] == '0':
cnt += 1
print(cnt)
Ответ: 1024
from ipaddress import *
• Импортируются все классы и функции из модуля ipaddress, используемого для работы с IP-адресами и сетями.
net = ip_network('140.116.194.0/255.255.240.0', 0)
• Создаётся объект сети net с заданным IP-адресом и маской. Аргумент 0 указывает, что используется маска, а не префикс.
cnt = 0
• Инициализируется счётчик для подсчёта подходящих IP-адресов.
for ip in net:
• Цикл перебирает все IP-адреса в заданной сети.
b = f'{ip:b}'
• Преобразует IP-адрес в строку его двоичного представления (без точек и пробелов).
if b[:8][-1] == '0':
• Проверяет, оканчивается ли первый байт (первые 8 бит) на 0.
if b[8:16][-1] == '0':
• Проверяет, оканчивается ли второй байт (биты с 8 по 15) на 0.
if b[16:24][-1] == '0':
• Проверяет, оканчивается ли третий байт (биты с 16 по 23) на 0.
if b[24:][-1] == '0':
• Проверяет, оканчивается ли четвёртый байт (биты с 24 по 31) на 0.
cnt += 1
• Увеличивает счётчик, если все четыре байта оканчиваются нулём.
• Выводит количество IP-адресов, удовлетворяющих условию задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6👍3❤2🔥2
Автор: Л.Шастин
Уровень: Сложный
Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:
– числа в строке расположены в порядке неубывания;
– в строке есть повторяющиеся числа с чётной суммой цифр.
R = []
for n, s in enumerate(open('0. files/9.csv'), 1):
M = [int(x) for x in s.split(';')]
if M == sorted(M):
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
R.append(n)
print(max(R))
Ответ: 6937
R = []
Создается пустой список R, в который будут добавляться номера строк, удовлетворяющих условиям
for n, s in enumerate(open('0. files/9.csv'), 1):
Открывается файл 9.csv, итерируемся по его строкам s с нумерацией n, начиная с 1
M = [int(x) for x in s.split(';')]
Каждая строка s разбивается по разделителю ;, элементы преобразуются в целые числа, формируется список M
if M == sorted(M):
Проверяется, равен ли список M своему отсортированному варианту (проверка на неубывающую последовательность)
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
Проверяется, есть ли в списке M хотя бы одно число x, которое встречается больше одного раза (M.count(x) > 1) и сумма цифр которого четная (sum(map(int, str(x))) % 2 == 0)
R.append(n)
Если оба условия выполнены, номер строки n добавляется в список R
print(max(R))
Выводится максимальный номер строки из списка R (последняя подходящая строка в файле)
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤8❤🔥4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍5🔥5
Автор: Л.Шастин
Уровень: Средний
В некоторых системах счисления, для записи оснований которых используются целочисленные переменные p<37 и s<35, выполняется равенство: R4_(p−1)+B0_(s+2)+ T3NK4_p = 23593399_10. Определите произведение подходящих значений p и s и укажите его в ответе в десятичной системе счисления.
for p in range(30, 37):
for s in range(10, 35):
A = int(f'R4', p-1)
B = int(f'B0', s+2)
C = int(f'T3NK4', p)
if (A + B + C) == 23593399:
print(p * s)
Ответ: 780
for p in range(30, 37):
• Цикл, перебирающий значения p от 30 до 36 (включительно)
for s in range(10, 35):
• Вложенный цикл, перебирающий значения s от 10 до 34 (включительно)
A = int(f'R4', p-1)
• Преобразует строку 'R4' в число, интерпретируя её как число в системе счисления с основанием p-1
B = int(f'B0', s+2)
• Преобразует строку 'B0' в число, интерпретируя её как число в системе счисления с основанием s+2
C = int(f'T3NK4', p)
• Преобразует строку 'T3NK4' в число, интерпретируя её как число в системе счисления с основанием p
if (A + B + C) == 23593399:
• Проверяет, равна ли сумма чисел A, B и C значению 23593399
print(p * s)
• Если условие выполняется, выводит произведение p и s
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥3👍2
Автор: Л.Шастин
Уровень: Средний
В файле содержится последовательность натуральных чисел, которые нумеруются, начиная с единицы. Определите количество пар элементов последовательности, сумма номеров которых оканчивается на ту же цифру, что и максимальный элемент последовательности. В ответе запишите количество найденных пар, затем минимальное значение среди модулей разностей суммы элементов и суммы номеров таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
M = [int(x) for x in open('0. files/17.txt')]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
i, j = i+1, i+2
if (i + j) % 10 == max(M) % 10:
R.append(abs((x+y) - (i+j)))
print(len(R), min(R))
Ответ: 1000 811
M = [int(x) for x in open('0. files/17.txt')]
Читаем файл '0. files/17.txt', преобразуем каждую строку в целое число и сохраняем в список M
R = []
Создаем пустой список R для хранения результатов
for i in range(len(M)-1):
Запускаем цикл по индексам элементов списка M, кроме последнего
x, y = M[i], M[i+1]
Получаем текущий элемент x и следующий элемент y из списка M
i, j = i+1, i+2
Вычисляем индексы i и j для проверки условия (увеличиваем на 1 и 2 соответственно)
if (i + j) % 10 == max(M) % 10:
Проверяем, равен ли остаток от деления суммы индексов i и j на 10 остатку от деления максимального элемента списка M на 10
R.append(abs((x+y) - (i+j)))
Если условие выполняется, добавляем в список R модуль разности между суммой элементов x и y и суммой индексов i и j
print(len(R), min(R))
Выводим количество элементов в списке R и минимальное значение из этого списка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍4🔥3
Автор: Л.Шастин
Уровень: Средний
Текстовый файл состоит из символов, обозначающих буквы латинского алфавита A, В и С и цифры 1 и 8.
Определите в прилагаемом файле максимальную длину подстроки, которая начинается и заканчивается на разные цифры, включает в себя равное количество букв B и C и не содержит других цифр, кроме первой и последней.
Для выполнения этого задания следует написать программу.
s = open('0. files/24.txt').readline()
s = s.replace('1', '1 1').replace('8', '8 8')
maxi = 0
for x in s.split():
if x.count('1') == 1:
if x.count('B') == x.count('C'):
maxi = max(maxi, len(x))
print(maxi)
Ответ: 1315
s = open('0. files/24.txt').readline()
• Открываем файл '0. files/24.txt' и читаем первую строку, сохраняя её в переменную s
s = s.replace('1', '1 1').replace('8', '8 8')
• Заменяем каждый символ '1' на '1 1' и каждый символ '8' на '8 8', удваивая их и добавляя пробелы между ними
maxi = 0
• Инициализируем переменную maxi для хранения максимальной длины подходящей строки
for x in s.split():
• Разбиваем строку s на список подстрок по пробелам и начинаем перебирать каждую подстроку в цикле
if x.count('1') == 1:
• Проверяем, что текущая подстрока x содержит ровно один символ '1'
if x.count('B') == x.count('C'):
• Проверяем, что количество символов 'B' равно количеству символов 'C' в текущей подстроке
maxi = max(maxi, len(x))
• Если оба условия выше выполнены, обновляем maxi, сохраняя максимальное значение между текущим maxi и длиной подстроки x
print(maxi)
• Выводим максимальную длину подходящей подстроки, найденную в результате работы программы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍2🔥2