Информатика | Илья Андрианов | itpy 🧑‍💻
1.06K subscribers
263 photos
20 videos
19 files
629 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
Хочешь сдать ЕГЭ по математике на 80+?

🗣️Хочу лично порекомендовать Вам репетитора, который точно знает, как сдать ЕГЭ на 80+, даже если вы только решили начать подготовку.

👩‍💻Дарья – преподает математику более 5 лет, а сама заканчивает в этом году Бауманку, поэтому точно знает все о поступлении на технические и экономические специальности, а ее ученики учатся в топовых вузах России: МИФИ, МГУ, ВШЭ💋

📚Подробную информацию о занятиях по подготовке к экзаменах можно узнать в ее канале, а также всем новым подписчикам Дарья отправляет полезные материалы для подготовки к экзаменам. Нужно только подписаться на канал и написать сообщение в личку💋

Не откладывай подготовку занимайся с лучшими преподавателями уже сейчас и совершенствуйся с каждым днём!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8👍43
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 12249 #kege по информатике #ЕГЭ17
Автор: ЕГКР 16.12.23
Уровень: Базовый


🚩 Условие задачи:
Определите количество троек элементов последовательности, в которых хотя бы один из трёх элементов оканчивается на 3, а сумма элементов тройки не больше максимального элемента последовательности, являющегося пятизначным числом, которое оканчивается на 3.

В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.


🚩 Теоретическая справка:
В данной задаче очень удобно собрать отдельный список для элементов оканчивающихся на 3 (список А) и потом пробежать все лежащие в нем элементы, чтоб добавить условие с пятизначными символам (список D).


👩‍💻 Код решения:
D = [int(x) for x in open('0. files/17.txt')]
R = []
A = [x for x in D if abs(x) % 10 == 3]
B = [x for x in A if len(str(abs(x))) == 5]
for i in range(len(D) - 2):
x, y, z = D[i], D[i + 1], D[i + 2]
if ((x in A) + (y in A) + (z in A)) >= 1:
if (x + y + z) <= max(B):
R.append(x + y + z)
print(len(R), max(R))

# Ответ: 1767 99081


👩‍💻 Комментарии к коду:

1⃣ D = int(x) for x in open('0. files/17.txt')
- Создаем список D, содержащий целые числа из файла '17.txt'.


2⃣ R = [ ]
- Инициализируем пустой список R для хранения результатов.


3⃣ A = x for x in D if abs(x) % 10 == 3
- Создаем список A, содержащий все числа из D, заканчивающиеся на 3.


4⃣ B = x for x in A if len(str(abs(x))) == 5
- Создаем список B, содержащий только те числа из A, которые являются пятиместными.


5⃣ for i in range(len(D) - 2):
- Начинаем цикл для перебора элементов списка D с индексом i от 0 до len(D) - 3.


6⃣ x, y, z = Di, Di + 1, Di + 2
- Присваиваем переменным x, y, z текущие и следующие два элемента из D.


7⃣ if ((x in A) + (y in A) + (z in A)) >= 1:
- Проверяем, содержится ли хотя бы одно из значений x, y, или z в списке A.


8⃣ if (x + y + z) <= max(B):
- Проверяем, меньше ли сумма x, y и z, чем максимальный элемент в B.


0⃣ R.append(x + y + z)
- Если обе проверки прошли, добавляем сумму x, y и z в список R.


🔟 print(len(R), max(R))
- Выводим количество элементов в списке R и максимальное значение из этого списка.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
29❤‍🔥4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 13715 #kege по информатике #ЕГЭ24
Автор: kompege.ru
Уровень: Средний


🚩 Условие задачи:
Текстовый файл состоит из символов A, B, C, D и E.

Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых комбинация символов AB встречается ровно 50 раз.


🚩 Теоретическая справка:
Важно после разбиения не забыть добавить по одному элементу справа и слева к строке r, так как мы удаляем пары символов, а отдельные символы должны оставить.


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.split('AB')
maxi = 0
for i in range(len(s)-50):
r = 'B' + 'AB'.join(s[i:i+51]) + 'A'
maxi = max(maxi, len(r))
print(maxi)

# Ответ: 10128


👩‍💻 Комментарии к коду:

1⃣ s = open('0. files/24.txt').readline()
# Открываем файл '0. files/24.txt' и читаем первую строку.


2⃣ s = s.split('AB')
# Разделяем строку на подстроки по разделителю 'AB' и сохраняем результат в список.


3⃣ maxi = 0
# Инициализируем переменную maxi, которая будет содержать максимальную длину найденной строки.


4⃣ for i in range(len(s)-50):
# Запускаем цикл, который будет проходить по индексам списка s от 0 до длины списка минус 50.


5⃣ r = 'B' + 'AB'.join(si:i+51) + 'A'
# Формируем новую строку r, представляющую собой соединение элементов списка s от текущего индекса i до i+50 с добавлением 'B' в начале и 'A' в конце.


6⃣ maxi = max(maxi, len(r))
# Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.


7⃣ print(maxi)
# Выводим максимальную длину строки, соответствующую заданным условиям.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥104❤‍🔥22
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор этого номера #yandex по информатике #ЕГЭ24
Автор: Шастин Л
Уровень: Средний


🚩 Условие задачи:
Текстовый файл состоит из символов A, C, D, F и O.
Определите максимальное количество идущих подряд символов, среди которых не более 5 пар вида согласная + гласная в прилагаемом файле.


🚩 Теоретическая справка:
Чуть более сложная версия прошлой задачи.


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.replace('C', 'D').replace('F', 'D')
s = s.replace('O', 'A')
s = s.split('DA')
maxi = 0
for i in range(len(s)-5):
r = 'A' + 'DA'.join(s[i:i+6]) + 'D'
maxi = max(maxi, len(r))
print(maxi)

Ответ: 27


👩‍💻 Комментарии к коду:

1⃣ s = open('24.txt').readline()
Открываем файл '0. files/24.txt' и читаем первую строку.


2⃣ s = s.replace('C', 'D').replace('F', 'D')
Заменяем символы 'C' и 'F' на 'D' во всей строке.


3⃣ s = s.replace('O', 'A')
Заменяем символ 'O' на 'A' во всей строке.


4⃣ s = s.split('DA')
Разделяем строку на подстроки по разделителю 'DA' и сохраняем результат в список.


5⃣ maxi = 0
Инициализируем переменную maxi для хранения максимальной длины найденной строки.


6⃣ for i in range(len(s)-5):
Запускаем цикл по индексам списка s от 0 до длины списка минус 5.


7⃣ r = 'A' + 'DA'.join(si:i+6) + 'D'
Формируем новую строку r, соединяя элементы списка s от текущего индекса i до i+5 с добавлением 'A' в начале и 'D' в конце.


8⃣ maxi = max(maxi, len(r))
Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.


0⃣ print(maxi)
Выводим максимальную длину строки, соответствующую условиям задачи.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥9541
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 12476 #kege по информатике #ЕГЭ24
Автор: PRO100 ЕГЭ
Уровень: Сложный


🚩 Условие задачи:
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых комбинация символов RO встречается ровно 21 раз, а комбинации символов ORO и ROR ни разу не встречаются.


🚩 Теоретическая справка:
Если ORO и ROR найдутся в строке, то не нужно отсеивать все строку - необходимо разбить ее и исследовать подстроки по отдельности!


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.split('RO')
maxi = 0
for i in range(len(s)-21):
r = 'O' + 'RO'.join(s[i:i+22]) + 'R'
if 'ROR' in r or 'ORO' in r:
r = r.replace('ROR', 'RO OR')
r = r.replace('ORO', 'OR RO')
maxi = max(maxi, max([len(x) for x in r.split()]))
print(maxi)

Ответ: 814


👩‍💻 Комментарии к коду:

s = open('24.txt').readline()

1⃣ Открываем файл '24.txt' и читаем первую строку.

s = s.split('RO')

2⃣ Разделяем строку на подстроки по разделителю 'RO' и сохраняем результат в список.

maxi = 0

3⃣ Инициализируем переменную maxi для хранения максимальной длины отдельных частей строки.

for i in range(len(s)-21):

4⃣ Запускаем цикл по индексам списка s от 0 до длины списка минус 21.

r = 'O' + 'RO'.join(si:i+22) + 'R'

5⃣ Формируем новую строку r, соединяя 22 элемента списка s с добавлением 'O' в начале и 'R' в конце.

if 'ROR' in r or 'ORO' in r:

6⃣ Проверяем, содержит ли строка r подстроки 'ROR' или 'ORO'.

r = r.replace('ROR', 'RO OR')

7⃣ Заменяем все вхождения 'ROR' на 'RO OR' в строке r.


r = r.replace('ORO', 'OR RO')

8⃣ Заменяем все вхождения 'ORO' на 'OR RO' в строке r.

maxi = max(maxi, max(len(x) for x in r.split()))

0⃣ Обновляем значение maxi, определяя максимальную длину части среди всех частей, на которые была разделена строка r.

print(maxi)

🔟 Выводим максимальную длину среди найденных частей строки.

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥86👍5
Товарищи, важный вопрос! Какой вариант оформления комментариев к коду вам нравится больше: как в прошлом посте (1⃣ от 23 февраля) или как в позапрошлом (2⃣ от 22 февраля)? 🤔
Anonymous Poll
52%
1⃣
48%
2⃣
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 14513 #kege по информатике #ЕГЭ24
Автор: Л. Шастин
Уровень: Базовый


🚩 Условие задачи:
Назовём маской образец строки, который строится на основании служебных знаков # и &, причём знак # обозначает непустую последовательность из идущих подряд букв, а знак & задает непустую последовательность из идущих подряд цифр.

Определите в прилагаемом файле максимальную длину подстроки, которая соответствует маске #&#.


🚩 Теоретическая справка:
Очень понравилась эта задача, идея решения заключается в приведении всех букв к одному символу и всех цифр к другому символу. Затем разбиваем полученную последовательность на пары, разделенные пробелами, и убираем лишние цифры справа, после чего находим самую длинную строку.


👩‍💻 Код решения:
from string import *
maxi = 0
s = open('0. files/24.txt').readline()
for x in digits:
s = s.replace(x, '&')
for x in ascii_uppercase:
s = s.replace(x, '#')
s = s.replace('&#', '& #')
s = s.split()
for i in range(len(s)-1):
r = ''.join(s[i:i+2])

while r[-1] == '&':
r = r[:-1]
maxi = max(maxi, len(r))
print(maxi)

Ответ: 49


👩‍💻 Комментарии к коду:

from string import *

1⃣ Импортируем все символы и функции из модуля string, включая digits (цифры) и ascii_uppercase (заглавные буквы алфавита).

maxi = 0

2⃣ Инициализируем переменную maxi, которая будет хранить максимальную длину найденной последовательности.

s = open('24.txt').readline()

3⃣ Открываем файл '24.txt' и читаем первую строку.

for x in digits:

4⃣ Проходим по всем символам цифр от 0 до 9.

s = s.replace(x, '&')

5⃣ Заменяем каждую цифру в строке символом '&'.

for x in ascii_uppercase:

6⃣ Проходим по всем заглавным буквам английского алфавита.

s = s.replace(x, '#')

7⃣ Заменяем каждую заглавную букву в строке символом '#'.

s = s.replace('&#', '& #')

8⃣ Заменяем последовательность '&#' на '& #' с пробелом между ними.

s = s.split()

0⃣ Разбиваем строку s на список строк, используя пробелы в качестве разделителей.

for i in range(len(s)-1):

🔟 Перебираем индексы в списке s от 0 до длины списка минус 1.

r = ''.join(s[i:i+2])

1⃣1⃣ Формируем строку r путем объединения двух соседних элементов списка s.

while r[-1] == '&':

1⃣2⃣ Запускаем цикл, который продолжается, пока последний символ строки r равен '&'.

r = r[:-1]

1⃣3⃣ Убираем последний символ из строки r.

maxi = max(maxi, len(r))

1⃣4⃣ Обновляем значение maxi, если длина текущей строки r больше, чем текущее значение maxi.

print(maxi)

1⃣5⃣ Выводим максимальную длину найденной последовательности.

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Наша Stepik подборкой задач😼
Please open Telegram to view this post
VIEW IN TELEGRAM
210🔥33👍1
Ребзя, пройдите, пожалуйста, опрос!
Хочу узнать свою аудиторию получше. В особенности понять сколько здесь учеников 8-го и 9-го классов 😍
Anonymous Poll
2%
Учусь в 8 классе
1%
Учусь в 9 классе
9%
Учусь в 10 классе
61%
Учусь в 11 классе
8%
Уже студент
2%
Родитель
10%
Репетитор Информатики
2%
Репетитор другой предмет
5%
Просто неравнодушный
🚩 🚩 🚩 🚩 🚩 🚩 🚩 🚩 🚩 🚩🚩 🚩 🚩 🚩🚩
Новый канал по подготовке к ОГЭ по информатике 🚀

Недавний опрос был не просто так - мы готовили для вас кое-что интересное! Вместе с моим другом мы запустили новый канал, который поможет вам подготовиться к ОГЭ по информатике на отлично! 📚

На канале вас ждут:
💚Полезные материалы и разборы заданий
💚Советы и лайфхаки для успешной сдачи экзамена
💚Поддержка и ответы на вопросы

Скоро я расскажу подробнее о проекте и познакомлю вас с нашим новым автором - экспертом в области информатики, который знает, как сделать подготовку максимально эффективной 👨‍💻

Пожалуй уже оставлю ссылку на канал👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🔥44
К команде itpy присоединился Алексей, @lkeeeey 😀

Молодой специалист работает старшим мобильным разработчиком в проекте Extremum, а также делится своими знаниями и опытом, готовя ребят не только к сдаче экзамена ОГЭ по информатике, но и изучению различных языков прогрмирования (python, c++, Kotlin, html, css, js) 🤩

При поддержке нашей команды itpy он канал:
IT by lkey | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥125🔥43
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера 3700 #reshu по информатике #ЕГЭ8
Автор: Решу ЕГЭ
Уровень: Базовый


🚩 Условие задачи:
Все 5-буквенные слова, составленные из букв Б, К, Ф, Ц, записаны
в алфавитном порядке и пронумерованы. Вот начало списка:
1. БББББ
2. ББББК
3. ББББФ
4. ББББЦ
5. БББКБ

Запишите слово, которое стоит на 486-м месте от начала списка.


🚩 Примечание к разбору:
Разберем задачу 3 разными способами и каждый выберет, тот способ,который ему понравился.



👩‍💻 Ход решения номер 🚩
s = sorted('БКФЦ')
print(s) # ['Б', 'К', 'Ф', 'Ц']
n = 0
for a in s:
for b in s:
for c in s:
for d in s:
for e in s:
slovo = a + b + c + d + e
n += 1
if n == 486:
print(n, slovo)


🚩 Комментарии к коду:
s = sorted('БКФЦ')

1⃣ Создается список s, содержащий отсортированные символы строки 'БКФЦ'.

print(s)  # ['Б', 'К', 'Ф', 'Ц']

2⃣ Выводится список s для проверки.

n = 0

3⃣ Вводим счетчик n, который будем использовать для подсчета количества сгенерированных слов.

for a in s:
for b in s:
for c in s:
for d in s:
for e in s:

4⃣ Перебираем все возможные комбинации из 5 символов, используя элементы списка s. Каждый цикл отвечает за одну позицию в слове.

slovo = a + b + c + d + e

5⃣ Формируется слово slovo путем объединения символов a, b, c, d, e.

n += 1

6⃣ Счетчик n увеличивается на 1 для каждой новой комбинации.

if n == 486:
print(n, slovo)

7⃣ Если счетчик n достигает значения 486, выводится номер комбинации и само слово.


👩‍💻 Ход решения номер 🚩
from itertools import *
n = 0
for p in product(sorted('БКФЦ'), repeat=5):
slovo = ''.join(p)
n += 1
if n == 486:
print(n, slovo)


🚩 Комментарии к коду:
from itertools import *

1⃣ Импортируется модуль itertools, который предоставляет функции для работы с комбинациями.

n = 0

2⃣ Вводим счетчик n для подсчета количества сгенерированных слов.

for p in product(sorted('БКФЦ'), repeat=5):

3⃣ Используется функция product, которая генерирует все возможные комбинации из символов 'Б', 'К', 'Ф', 'Ц' с длиной 5 .

slovo = ''.join(p)

4⃣ Каждый элемент p преобразуется в строку slovo с помощью метода join.

n += 1

5⃣ Счетчик n увеличивается на 1 для каждой новой комбинации.

if n == 486:
print(n, slovo)

6⃣ Если счетчик n достигает значения 486, выводится номер комбинации и само слово.


👩‍💻 Ход решения номер 🚩
from itertools import *
for n, p in enumerate(product(sorted('БКФЦ'), repeat=5), 1):
slovo = ''.join(p)
if n == 486:
print(n, slovo)


🚩 Комментарии к коду:
from itertools import *

1⃣ Импортируется модуль itertools.

for n, p in enumerate(product(sorted('БКФЦ'), repeat=5), 1):

2⃣ Используем функцию enumerate, которая добавляет счетчик n к каждому элементу, генерируемому функцией product. Счетчик начинается с 1.

slovo = ''.join(p)

3⃣ Каждый элемент p преобразуется в строку slovo с помощью метода join.

if n == 486:
print(n, slovo)

4⃣ Если счетчик n достигает значения 486, выводится номер комбинации и само слово.

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍843🔥2
Как вам формат больших разборов, хотели бы видеть больше таких полдробных разборов на канале?
Anonymous Poll
75%
✔️ Да
19%
⁉️ Уже сдал ЕГЭ
6%
Нет
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера 11616 #kege по информатике #ЕГЭ8
Автор: М. Ишимов
Уровень: Средний


🚩 Условие задачи:
Сколько существует семнадцатеричных пятизначных чисел, не содержащих в своей записи более двух цифр 1, при этом никакая нечётная цифра не стоит рядом с цифрой 1?


🚩 Теоретическая справка:
Данный способ позволяет перебрать алфавит и отсортировать его.


👩‍💻 Код решения:
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
print(alphabet[3:17:2])
from itertools import *
cnt = 0
for s in product(alphabet[:17], repeat=5):
num = ''.join(s)
if num[0] != '0':
if num.count('1') <= 2:
for a in alphabet[3:17:2]:
num = num.replace(a, '*')
if '1*' not in num and '*1' not in num and '11' not in num:
cnt += 1

print(cnt)

Ответ: 1117608


👩‍💻 Комментарии к коду:
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')

1⃣ Создается строка, содержащая цифры от 0 до 9 и заглавные буквы английского алфавита. Функция sorted сортирует символы в алфавитном порядке.

print(alphabet[3:17:2])

2⃣ Выводится часть алфавита с индексами от 3 до 17 (не включая 17) с шагом 2.

from itertools import *

3⃣ Импортируется модуль itertools, который предоставляет функции для работы с генерациями комбинаций.

cnt = 0

4⃣ Создается переменная cnt, которая будет использоваться для подсчета подходящих комбинаций.

for s in product(alphabet[:17], repeat=5):

5⃣ Используется функция product, которая генерирует все возможные комбинации длиной 5 из первых 17 символов алфавита (alphabet[:17]).
Каждая комбинация s представляет собой кортеж из 5 символов.

num = ''.join(s)

6⃣ Кортеж символов s преобразуется в строку num с помощью метода join.

if num[0] != '0':

7⃣ Проверяется, что первый символ строки не равен '0'.

if num.count('1') <= 2:

8⃣ Проверяется, что символ '1' встречается в строке не более двух раз.

for a in alphabet[3:17:2]:
num = num.replace(a, '*')

0⃣ Каждый символ из списка заменяется на '*' в строке.

if '1*' not in num and '*1' not in num and '11' not in num:

🔟 Проверяется, что в строке нет подстрок '1*', '*1' и '11'.

cnt += 1

1⃣1⃣ Если все условия выполнены, счетчик увеличивается на 1.

print(cnt)

1⃣2⃣ В конце программы выводится значение счетчика, которое равно количеству подходящих комбинаций.

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3❤‍🔥2
👩‍💻 Мастерим срезы в Python: Изучаем эффективное использование срезов в списках и строках #tpy

🚩 Извлечение подсписка:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[2:5]
print(subset) # Вывод: [3, 4, 5]

Здесь мы извлекаем подсписок, начиная с индекса 2 и заканчивая индексом 5 (не включая). Это полезно, когда нам нужна определенная часть списка.

🚩 Извлечение каждого второго элемента:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[1::2]
print(subset) # Вывод: [2, 4, 6, 8, 10]

В этом примере мы извлекаем каждый второй элемент, начиная с индекса 1, то есть все нечетные ИНДЕКСЫ.

🚩 Извлечение обратного порядка списка:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
reverse_list = my_list[::-1]
print(reverse_list) # Вывод: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Использование среза с отрицательным шагом позволяет нам легко создать список в обратном порядке.

🚩 Извлечение подстроки:
my_string = "Hello, World!"
substring = my_string[7:12]
print(substring) # Вывод: "World"

В данном случае, мы извлекаем подстроку, начиная с индекса 7 и заканчивая индексом 12 (не включая). Это полезно для работы с текстовыми данными.

🚩 Извлечение каждого второго символа:
my_string = "Hello, World!"
substring = my_string[::2]
print(substring) # Вывод: "Hlo ol!"

Использование среза с шагом 2 помогает нам извлекать каждый второй символ из строки.

🚩 Извлечение обратного порядка строки:
my_string = "Hello, World!"
reverse_string = my_string[::-1]
print(reverse_string) # Вывод: "!dlroW ,olleH"

Также, как и в случае с списками, срез с отрицательным шагом позволяет легко получить строку в обратном порядке.

Использование срезов делает код более эффективным и читаемым. Практикуйтесь в их применении, и вы обнаружите, насколько они улучшают ваши навыки работы с данными в Python.

Азим вкатывается в IT | itpy 💻
Наш второй канал по подготовке к ЕГЭ 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥733
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 8960 #kege по информатике #ЕГЭ25
Автор: Е.Джобс
Уровень: Базовый


🚩 Условие задачи:
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Найдите первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?. Найденные числа выведите в порядке возрастания, справа от каждого запишите найденную сумму делителей.


🚩 Теоретическая справка:
Нужно найти первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?.


👩‍💻 Код решения:
from fnmatch import *

def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))

k = 0
for x in range(500_001, 10**10):
summa = sum(divisors(x))
if fnmatch(str(summa), '*7?'):
print(x, summa)
k += 1
if k == 5:
break

Ответ:
500001 666672
500048 968874
500069 500070
500079 666776
500114 750174



👩‍💻 Комментарии к коду:

1⃣ from fnmatch import *
Импортируется модуль fnmatch.


2⃣ def divisors(x):
Создаем функцию divisors.


3⃣ div = []
Создаётся пустой список div


4⃣ for j in range(1, int(x**0.5)+1):
Запускается цикл for, который проходит по всем числам от 1 до квадратного корня из x (включительно).


5⃣ if x % j == 0:
Проверяется, делится ли число x на j без остатка.


6⃣ div += [j, x // j]
Если j является делителем, то в список div добавляются как сам делитель j, так и результат деления x на j.


7⃣ return sorted(set(div))
Возвращается отсортированный список уникальных делителей.


8⃣ k = 0
Создаем счетчик.


0⃣ for x in range(500_001, 10**10):
Запускается цикл for, который проходит по всем числам от 500,001 до 10^10.


🔟 summa = sum(divisors(x))
Для каждого числа x вычисляется сумма всех его делителей с помощью функции divisors(x), а затем результат сохраняется в переменной summa.


1⃣1⃣ if fnmatch(str(summa), '*7?'):
Проверяется, соответствует ли строка, представляющая сумму делителей.


1⃣2⃣ print(x, summa)
Если условие выше выполняется, то выводится число x и сумма его делителей summa.


1⃣3⃣ k += 1
Увеличивается счётчик k на 1, так как найдено число, удовлетворяющее условию.


1⃣4⃣ if k == 5:
Проверяется, достиг ли счётчик k значения 5.


1⃣5⃣ break
Прерывает выполнение цикла for, если найдено 5 чисел, удовлетворяющих условию.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥97🤯6
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 4333 #kege по информатике #ЕГЭ23
Автор: /dev/inf advanced
Уровень: Средний


🚩 Условие задачи:
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 3
3. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Известно, что исполнитель не может повторить команду, выполненную на предыдущем шаге. Например, если была выполнена команда 1, на следующем шаге могут быть выполнены только команды 2 или 3.
Сколько существует программ, для которых при исходном числе 1 результатом является число 25, и при этом траектория вычислений содержит число 5, но не содержит число 6?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 11, 12.


🚩 Теоретическая справка:
Исполнитель не может повторить команду, выполненную на предыдущем шаге.


👩‍💻 Код решения:
def F(a, b, c):
if a >= b or a == 6:
return a == b
if c == '1':
return F(a + 3, b, '2') + F(a ** 2, b, '3')
if c == '2':
return F(a + 1, b, '1') + F(a ** 2, b, '3')
if c == '3':
return F(a + 1, b, '1') + F(a + 3, b, '2')
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a ** 2, b, '3')


print(F(1, 5, '') * F(5, 25, ''))

Ответ: 10


👩‍💻 Комментарии к коду:

1⃣ def F(a, b, c):
Создается функция F, которая принимает три аргумента.


2⃣ if a >= b or a == 6:
Если текущее значение a больше или равно значению b, или a равно 6.


3⃣ return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.


4⃣ if c == '1':
Проверяется, равно ли значение c строке '1'.


5⃣ return F(a + 3, b, '2') + F(a 2, b, '3')
Если c == '1', функция вызывает саму себя дважды.


6⃣ if c == '2':
Проверяется, равно ли значение c строке '2'.


7⃣ return F(a + 1, b, '1') + F(a 2, b, '3')
Если c == '2', функция вызывает саму себя дважды.


8⃣ if c == '3':
Проверяется, равно ли значение c строке '3'.


0⃣ return F(a + 1, b, '1') + F(a + 3, b, '2')
Если c == '3', функция вызывает саму себя дважды.


🔟 return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a 2, b, '3')
Если значение c не равно '1', '2' или '3' (например, пустая строка `''`), функция вызывает саму себя трижды.


1⃣1⃣ print(F(1, 5, '') * F(5, 25, ''))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵💵
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥107🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 11953 #kege по информатике #ЕГЭ23
Автор: PRO100 ЕГЭ
Уровень: Средний


🚩 Условие задачи:
Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Команда А прибавляет к числу его последнюю цифру. Например, из числа 68 получится число 76.
Команда B прибавляет к числу его остаток от деления на 68. Например, из числа 10 получится число 20.
Команда C возводит число в квадрат. Например, из числа 9 получится число 81.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.


🚩 Теоретическая справка:
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.


👩‍💻 Код решения:
from functools import lru_cache

@lru_cache(None)

def F(a, b):
if a >= b or a == 100:
return a == b
count = 0
x = a % 10
if x != 0:
count += F(a + x, b)
x = a % 68
if x != 0:
count += F(a + x, b)
x = a ** 2
if x != a:
count += F(x, b)
return count
print(F(2, 68) * F(68, 680))

Ответ: 47997789947424


👩‍💻 Комментарии к коду:

1⃣ from functools import lru_cache
Импортируется декоратор lru_cache из модуля functools.


2⃣ @lru_cache(None)
Декоратор lru_cache применяется к функции . Параметр None означает, что кэш не имеет ограничений по размеру.


3⃣ def F(a, b):
Определяется функция F, которая принимает два аргумента.


4⃣ if a >= b or a == 100:
Если текущее значение a больше или равно значению b, или a равно 100.


5⃣ return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.


6⃣ count = 0
Создаем счетчик.


7⃣ x = a % 10
Вычисляется последняя цифра числа a.


8⃣ if x != 0:
Проверяется, не равна ли последняя цифра числа a нулю.


0⃣ count += F(a + x, b)
Если последняя цифра числа a не равна нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.


🔟 x = a % 68
Вычисляется остаток от деления числа a на 68.


1⃣1⃣ if x != 0:
Проверяется, не равен ли остаток от деления числа a на 68 нулю.


1⃣2⃣ count += F(a + x, b)
Если остаток от деления числа a на 68 не равен нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.


1⃣3⃣ x = a** 2
Вычисляется квадрат числа a.


1⃣4⃣ if x != a:
Проверяется, не равен ли квадрат числа a самому числу a.


1⃣5⃣ count += F(x, b)
Если квадрат числа a не равен самому числу a, функция вызывает саму себя с аргументами (x, b) и результат этого вызова добавляется к переменной count.


1⃣6⃣ return count
Возвращается значение переменной count.


1⃣7⃣ print(F(2, 68) * F(68, 680))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1286
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера 11228 #kege по информатике #ЕГЭ9
Автор: М.Ишимов
Уровень: Сложный

🚩 Условие задачи:
Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите сумму чисел всех строк таблицы, для которых выполнены оба условия:
– в строке есть только одно число, которое повторяется трижды, и только два числа, каждое из которых повторяется дважды;
– четыре наименьших числа строки можно разбить на две пары чисел с нечётными суммами.
В ответе запишите полученное число.


🚩 Теоретическая справка:
Определите сумму чисел всех строк таблицы


👩‍💻 Код решения:
from itertools import *
summa = 0
for s in open('9.txt'):
M = sorted([int(x) for x in s.split()])
copied_2 = [x for x in M if M.count(x) == 2]
copied_3 = [x for x in M if M.count(x) == 3]
if len(copied_3) == 3 and len(copied_2) == 4:
if any(sum(p[:2]) % 2 != 0 and sum(p[2:]) % 2 != 0 for p in permutations(M[:4])):
summa += sum(M)
print(summa)

Ответ: 4675


📱 Комментарии к коду:

1⃣ from itertools import *
Импортируется модуль itertools.


2⃣ summa = 0
Создается переменная summa.


3⃣ for s in open('9.txt'):
В цикле for происходит построчное чтение файла. Каждая строка файла сохраняется в переменную s.


4⃣ M = sorted([int(x) for x in s.split()])
Строка s разбивается на список строк с помощью метода split(). Каждая строка преобразуется в целое число с помощью int(x). Полученный список чисел сортируется и сохраняется в переменную M.


5⃣ copied_2 = [x for x in M if M.count(x) == 2]
Создается список copied_2, который содержит элементы из списка M, встречающиеся ровно два раза.


6⃣ copied_3 = [x for x in M if M.count(x) == 3]
Создается список copied_3, который содержит элементы из списка M, встречающиеся ровно три раза.


7⃣ if len(copied_3) == 3 and len(copied_2) == 4:
Проверяется условие: если длина списка copied_3 равна 3 и длина списка copied_2 равна 4 .


8⃣ if any(sum(p[:2]) % 2 != 0 and sum(p[2:]) % 2 != 0 for p in permutations(M[:4])):
Генерируются все возможные перестановки первых четырех элементов списка M . Для каждой перестановки p проверяется, является ли сумма первых двух элементов нечетной и сумма последних двух элементов также нечетной.


0⃣ summa += sum(M)
Сумма всех элементов списка M добавляется к переменной summa.


🔟 print(summa)
Выводится значение переменной summa.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥14👍8🔥66