Информатика Сегодня
638
подписчиков
Канал посвящен информатике, основам программирования и информационным технологиям в разных сферах. Будет полезен для школьников, а также студентов и всем тем, кто интересуется фундаментальными и прикладными сферами информационных технологий в широком смысле. Здесь собираются авторские материалы по о
📎 24 задание на обработку строк решаем через регулярные выражения (№ 5645) (П. Финкель) Текстовый файл 24-230.txt состоит не более чем из 10^6 символов и содержит буквы английского алфавита и цифры. Определите максимальное число в этом файле, ограниченное двумя парами символов ZZ и удовлетворяющее маске «8???54???22», где символ ? обозначает любую цифру. Пример такого числа: 81235412322. Найдите произведение нечётных цифр найденного числа. #regex #регулярки #findall Решение на Python: import re s=open('24-230.txt').readline() l=re.findall(r'ZZ8\d{3}54\d{3}22ZZ',s) t = (max(int(x[2:-2]) for x in l)) p = 1 for x in str(t): if x in '13579': p*=int(x) print(p) Решение на pascalabc.net ## ReadAllText('24-230.txt') .MatchValues('ZZ8\d{3}54\d{3}22ZZ') .Select(t->t[3:^2].ToBigInteger) .max.ToString .Where(t->t in '13579') .Select(t->StrToInt(t)) .Product .Print;
Решаем 24.4917 задание через регулярные выражения (№ 4917) Текстовый файл 24-191.txt содержит строку из заглавных латинских букв, всего не более чем из 10^6 символов. Определите количество подстрок длиной не менее 20 символов, которые начинаются буквой A, заканчиваются буквой B и не содержат других букв A и B, кроме первой и последней. Pascal: ## ReadAllText('24-191.txt') .MatchValues('[A][C-Z]+[B]') .Select(s -> s.Length) .count(t -> t >= 20) .print; Python import re k=0 s=open('24-191.txt').readline() r=re.findall(r'[A][C-Z]+[B]',s) print(len([x for x in r if len(x)>=20]))
finditer() vs findall() Если вы осваиваете регулярные выражения, то в какой-то момент у вас возникнем вопрос: "В чем разница между функциями finditer() и findall()". Простой пример на python иллюстрирует эту разницу: import re s = 'ABBCAABAAAABD' r = re.finditer(r'(AA)+',s) r2 = re.findall(r'(AA)+',s) for x in r: print(x[0]) print('---') for x in r2: print(x)
Основные функции библиотеки school; ## uses school; println('{Системы счисления}'); var x:=Random(100); println(x); bin(x).Println; oct(x).Println; hex(x).Println; ToBase(x,28).Println; //Перевод в 28-ю систему счисления Dec('28FDN6',31).println; //Перевод из 31-й системы счисления x.Digits.Println; //Список цифр числа в десятичной системе счисления x.Digits(6).Println; //Список цифр числа в 6-ной системе счисления println('{Простые числа}'); x.isPrime.Println; Primes(x).Println; //Простые числа на интервале [2;x] (Решето Эратосфена) Primes(100,100000000).count.Print; //Кол-во простых числа на интервале [2;x] PrimeDivisorsCount(x).Println; //Количество простых делителей числа x println('{НОД НОК}'); НОД(1100,1260).Println; GCD(1100,1260).Println; НОК(25,30).Println; LCM(25,30).Println; println('{Факторизация и делители}'); x.Divisors.Println; //Все делители числа x.Factorize.Println; //Разложение числа на простые множители (x.Divisors.count-2).Println; //Кол-во нетривиальных делителй x.DivisorsCount.Println; //Кол-во делителй x.Divs(5).println; //Делится ли на 5 x.DivsAll(|2,5,7|).Println; //Возвращает True если целое делится на все значения x.DivsAny(|2,5,7|).Println; //Возвращает True если целое делится на одно из значений
Задача 24 ЕГЭ Информатика. Основная волна экзамена 2023 (№ 6676) (ЕГЭ-2023) Текстовый файл 24-264.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита и цифры. Определите максимальную длину подстроки, которая может являться записью числа в шестнадцатеричной системе счисления. Видео разбор задания: dzen.ru/...a71
(№ 7075) (PRO100-ЕГЭ) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240. Сколько в этой сети IP-адресов, для которых количество нулей в двоичной записи IP-адреса больше 21? Решение на pascalabc.net и python:
(№ 7006) (А. Минак) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 216.130.64.0 и маской сети 255.255.192.0. Сколько в этой сети IP-адресов, которые не имеют ни одного байта с нечётным значением? IP-адрес сети учитывать не следует. Решение на pascalabc.net and python:
14 номер ЕГЭ по информатике. Основная волна экзамена 2023. (№ 6744) (ЕГЭ-2023) Операнды арифметического выражения записаны в системе счисления с основанием 23: 7x3859623 + 14х3623 + 61x723 В записи чисел переменной x обозначена неизвестная цифра из алфавита 23-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 22. Для найденного значения x вычислите частное от деления значения арифметического выражения на 22 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно. Решение на PascalABC.NET: ## uses school; {1 способ решения} var s := ('0'..'9').JoinToString + ('A'..'M').JoinToString; s.Select(x -> Dec($'7{x}38596', 23) + Dec($'14{x}36', 23) + Dec($'61{x}7', 23)). Where(x -> x mod 22 = 0). Select(x -> x div 22).Take(1).println; {2 способ решения} var (sum, p) := (0bi, 23bi); for var x := 0 to 22 do begin sum := 7 * p ** 6 + x * p ** 5 + 3 * p ** 4 + 8 * p ** 3 + 5 * p ** 2 + 9 * p ** 1 + 6 + 1 * p ** 4 + 4 * p ** 3 + x * p ** 2 + 3 * p + 6 + 6 * p ** 3 + 1 * p ** 2 + x * p + 7; if sum mod 22 = 0 then print(sum div 22); end; Решение на python: s = '0123456789' for i in range(10,23): s+=chr(55+i) for x in s: a = int(f'7{x}38596', 23) + int(f'14{x}36', 23) + int(f'61{x}7', 23) if a % 22 == 0: print(a // 22)
№23 решаем задачу 6024 с сайта Полякова КЕГЭ . Рекурсия Условия задачи: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (И. Карпачев) Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены коды: A. Прибавь 2 B. Умножь на 2 С. Умножь на 4 Первая команда увеличивает число на 2 раза, вторая – в 2 раза, третья – в 4 раза. Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 1 результатом будет являться число 24, при этом траектория вычисления не содержит подпоследовательность команд BACA.Траектория вычисления программы – это последовательности результатов выполнения всех команд. Например, для программы BCA при исходном числе 4 траектория будет состоять из чисел 8, 32, 34. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Задача №08.6132 (Комбинаторика) *Определите количество семизначных чисел, записанных в девятеричной системе счисления, в записи которых ровно одна цифра 8 и ровно четыре нечётные цифры.
ЕГЭ Информатика 17. Задача 6096 сайт Полякова. Обработка последовательности Pascal vs Python Условия задачи 17.362.6096: (Д. Статный) В файле 17-362.txt содержится последовательность целых чисел, записанных в позиционных системах исчисления с основаниями от 2 до 36 (для систем с основаниями, большими 10, в качестве цифр используются буквы A, B, C, ..., Z). Будем считать, что основание системы счисления на единицу больше, чем максимальная цифра числа (например, для числа 1A42 основание системы счисления равно A + 1 = 10 + 1 = 11). Парой назовём два подряд идущих элемента последовательности. Определите количество пар, в которых основания систем счисления, в которых записаны числа, отличаются не более чем на 2. В ответ запишите сначала количество таких пар, а затем — максимальную сумму элементов пары (в десятичной системе счисления).
№17 ЕГЭ Информатика. Задача 6071 сайт Полякова. Обработка последовательности Pascal vs Python Условия задачи: (И. Митин) В файле 17-361.txt содержится последовательность натуральных чисел, по модулю не превышающих 100000. Определите количество троек последовательности, в которых дав элемента равны между собой, а третий отличается от них, и все элементы тройки больше минимального элемента последовательности, оканчивающегося на 40. В ответе запишите количество таких троек и максимальный порядковый номер элемента, отличного от остальных. Считается, что нумерация элементов последовательности начинается с 1, а под тройкой подразумевается три идущих подряд элемента последовательности.