├── zadanie_5 ├── 5-28.py ├── 5-29.py ├── 5-7.py ├── 5-13.py ├── 5-31.py ├── 5-9.py ├── 5-14.py ├── 5-5.py ├── 5-10.py ├── 5-25.py ├── 5-16.py ├── 5-24.py ├── 5-8.py ├── 5-12.py ├── 5-11.py ├── 5-26.py ├── 5-15.py ├── 5-18.py ├── 5-4.py ├── 5-6.py ├── 5-3.py ├── 5-19.py ├── 5-1.py ├── 5-2.py ├── 5-33.py ├── 5-27.py └── 5-17.py ├── zadanie_6 ├── 6-3.py ├── 6-2.py └── 6-1.py ├── .idea ├── .name ├── misc.xml ├── vcs.xml ├── inspectionProfiles │ └── profiles_settings.xml ├── modules.xml └── ege_informatika_python.iml ├── zadanie_14 ├── 14-10.py ├── 14-1.py ├── 14-2.py ├── 14-3.py ├── 14-15.py ├── 14-4.py ├── 14-14.py ├── 14-5.py ├── 14-13.py ├── 14-7.py ├── 14-6.py ├── 14-8.py ├── 14-12.py ├── 14-11.py └── 14-9.py ├── zadanie_25 ├── 25-34.py ├── 25-10.py ├── 25-32.py ├── 25-9.py ├── 25-22.py ├── 25-28.py ├── 25-25.py ├── 25-7.py ├── 25-23.py ├── 25-6.py ├── 25-1.py ├── 25-2.py ├── 25-24.py ├── 25-3.py ├── 25-11.py ├── 25-5.py ├── 25-27.py ├── 25-15.py ├── 25-20.py ├── 25-33.py ├── 25-12.py ├── 25-18.py ├── 25-13.py ├── 25-14.py ├── 25-31.py ├── 25-30.py ├── 25-21.py ├── 25-19.py ├── 25-8.py ├── 25-26.py ├── 25-4.py ├── 25-29.py └── 25-17.py ├── zadanie_17 ├── 17-26.py ├── 14-17.py ├── 17-14.py ├── 17-18.py ├── 17-19.py ├── 17-7.py ├── 17-4.py ├── 17-27.py ├── 17-6.py ├── 17-20.py ├── 17-5.py ├── 17-10.py ├── 17-25.py ├── 17-13.py ├── 17-11.py ├── 17-2.py ├── 17-1.py ├── 17-28.py ├── 17-9.py ├── 17-3.py ├── 17-34.py ├── 17-17.py ├── 17-29.py ├── 17-23.py ├── 17-16.py ├── 17-21.py ├── 17-33.py ├── 17-8.py ├── 17-30.py ├── 17-31.py ├── 17-22.py ├── 17-35.py └── 17-36.py ├── .DS_Store ├── .gitattributes ├── task5.py ├── README.md ├── zadanie_2 ├── 2-2.py └── 2-1.py ├── zadanie_24 ├── 24-12.py ├── 24-16.py ├── 24-25.py ├── 24-23.py ├── 24-6.py ├── 24-7.py ├── 24-5.py ├── 24-30.py ├── 24-8.py ├── 24-10.py ├── 24-11.py ├── 24-20.py ├── 24-33.py ├── 24-9.py ├── 24-24.py ├── 24-18.py ├── 24-34.py ├── 24-2.py ├── 24-1.py ├── 24-14.py ├── 24-26.py ├── 24-22.py ├── 24-4.py ├── 24-21.py ├── 24-31.py ├── 24-13.py ├── 24-17.py ├── 24-15.py └── 24-19.py ├── zadanie_16 ├── 16-1.py ├── 16-7.py ├── 16-8.py ├── 16-21.py ├── 16-22.py ├── 16-4.py ├── 16-9.py ├── 16-24.py ├── 16-10.py ├── 16-11.py ├── 16-27.py ├── 16-2.py ├── 16-6.py ├── 16-26.py ├── 16-28.py ├── 16-23.py ├── 16-15.py ├── 16-13.py ├── 16-14.py ├── 16-12.py ├── 16-3.py ├── 16-20.py ├── 16-25.py ├── 16-5.py ├── 16-16.py ├── 16-17.py ├── 16-18.py └── 16-19.py ├── zadanie_8 ├── 8-2.py ├── 8-8.py ├── 8-4.py ├── 8-20.py ├── 8-18.py ├── 8-19.py ├── 8-26.py ├── 8-10.py ├── 8-24.py ├── 8-12.py ├── 8-23.py ├── 8-31.py ├── 8-25.py ├── 8-15.py ├── 8-5.py ├── 8-30.py ├── 8-32.py ├── 8-13.py ├── 8-29.py ├── 8-16.py ├── 8-7.py ├── 8-6.py ├── 8-28.py ├── 8-22.py ├── 8-14.py ├── 8-27.py ├── 8-21.py ├── 8-3.py ├── 8-17.py ├── 8-9.py ├── 8-11.py └── 8-1.py ├── zadanie_23 ├── 23-28.py ├── 23-23.py ├── 23-29.py ├── 23-2.py ├── 23-3.py ├── 23-4.py ├── 23-38.py ├── 23-10.py ├── 23-41.py ├── 23-16.py ├── 23-12.py ├── 23-13.py ├── 23-39.py ├── 23-40.py ├── 23-20.py ├── 23-36.py ├── 23-33.py ├── 23-37.py ├── 23-31.py ├── 23-32.py ├── 23-5.py ├── 23-6.py ├── 23-8.py ├── 23-9.py ├── 23-34.py ├── 23-7.py ├── 23-22.py ├── 23-17.py ├── 23-35.py ├── 23-1.py ├── 23-27.py ├── 23-30.py ├── 23-15.py ├── 23-11.py ├── 23-24.py ├── 23-14.py ├── 23-26.py ├── 23-21.py ├── 23-45.py ├── 23-19.py ├── 23-44.py ├── 23-18.py ├── 23-25.py ├── 23-42.py └── 23-43.py ├── zadanie_12 ├── 12-2.py ├── 12-14.py ├── 12-3.py ├── 12-5.py ├── 12-11.py ├── 12-8.py ├── 12-15.py ├── 12-10.py ├── 12-7.py ├── 12-16.py ├── 12-6.py ├── 12-4.py ├── 12-13.py ├── 12-17.py ├── 12-12.py ├── 12-18.py └── 12-9.py ├── zadanie_22 ├── 22-1.py └── 22-2.py ├── files ├── 17 │ ├── 17-5.txt │ ├── 17-9.txt │ └── 17-278.txt └── 24 │ ├── k7.txt │ └── 24-4.txt ├── zadanie_15 ├── 15-10.py ├── 15-9.py ├── 15-11.py ├── 15-4.py ├── 15-3.py ├── 15-12.py ├── 15-7.py ├── 15-5.py ├── 15-1.py ├── 15-8.py ├── 15-2.py └── 15-6.py ├── stream.py ├── zadanie_27 └── 27-1.py ├── zadanie_19-21 ├── 19-21-5.py └── 19-21-1.py └── zadanie_26 ├── 26-4.py └── 26-1.py /zadanie_5/5-28.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zadanie_6/6-3.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | 17-23.py -------------------------------------------------------------------------------- /zadanie_14/14-10.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zadanie_25/25-34.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zadanie_17/17-26.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plugarivan/ege_informatika_python/HEAD/.DS_Store -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /zadanie_14/14-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько единиц в двоичной записи числа 3 | 4 ** 2016 + 2 ** 2018 - 8 ** 600 + 6 4 | ''' 5 | print(bin(4 ** 2016 + 2 ** 2018 - 8 ** 600 + 6).count('1')) -------------------------------------------------------------------------------- /zadanie_14/14-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько единиц в двоичной записи числа 3 | 4 ** 2016 - 2 ** 2018 + 8 ** 800 - 80 4 | ''' 5 | print(bin(4 ** 2016 - 2 ** 2018 + 8 ** 800 - 80).count('1')) -------------------------------------------------------------------------------- /task5.py: -------------------------------------------------------------------------------- 1 | s = '111010111' 2 | 3 | if len(s) % 2 == 0: 4 | s = s[:((len(s)-1) // 2)] + s[len(s) // 2 + 1:] 5 | else: 6 | s = s[:(len(s) // 2) - 1] + s[len(s) // 2 + 2:] 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /zadanie_14/14-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько значащих нулей в двоичной записи числа 3 | 8 ** 152 + 4 ** 915 - 2 ** 778 - 4 ** 71 - 2 ** 31 - 30 4 | ''' 5 | print(bin(8 ** 152 + 4 ** 915 - 2 ** 778 - 4 ** 71 - 2 ** 31 - 30)[2:].count('0')) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ege_informatika_python 2 | Решение заданий ЕГЭ по информатике на языке программирования Python. Задания взяты отсюда: 3 | 1) https://www.kpolyakov.spb.ru/school/ege/generate.htm 4 | 2) https://inf-ege.sdamgia.ru/ 5 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /zadanie_14/14-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Укажите наименьшее основание системы счисления, в которой запись числа 86 оканчивается на 22. 3 | ''' 4 | for n in range(3, 36): 5 | x = 86 6 | if 86 % n == 22 or (86 % n == 2 and 86 // n % n == 2): 7 | print(n) -------------------------------------------------------------------------------- /zadanie_2/2-2.py: -------------------------------------------------------------------------------- 1 | print('x y z w') 2 | for x in range(2): 3 | for y in range(2): 4 | for z in range(2): 5 | for w in range(2): 6 | if ((x == (not(y))) <= ((x and w) == z)) == False: 7 | print(x, y, z, w) -------------------------------------------------------------------------------- /zadanie_2/2-1.py: -------------------------------------------------------------------------------- 1 | print('x y z w') 2 | for x in range(2): 3 | for y in range(2): 4 | for z in range(2): 5 | for w in range(2): 6 | if ((x and y) or (y and z)) == ((x <= w) and (w <= z)): 7 | print(x, y, z, w) 8 | -------------------------------------------------------------------------------- /zadanie_24/24-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Е. Джобс) Текстовый файл 24-j5.txt состоит не более чем из 10**6 символов S, T, O, C, K. Сколько раз встречается в файле комбинация «KOT»? 3 | ''' 4 | with open('../files/24/24-j5.txt') as f: 5 | s = f.readline() 6 | print(s.count('KOT')) -------------------------------------------------------------------------------- /zadanie_16/16-1.py: -------------------------------------------------------------------------------- 1 | '''Чему равно значение функции f(25)?''' 2 | 3 | def f(n): 4 | if n == 1: 5 | return 1 6 | elif n > 1: 7 | if n % 2 == 0: 8 | return 3 * f(n - 1) - 1 9 | else: 10 | return 2 * f(n - 2) 11 | 12 | print(f(25)) -------------------------------------------------------------------------------- /zadanie_14/14-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Значение арифметического выражения: 25 ** 56 + 5 ** 138 - 5 записали в системе счисления с основанием 5. Сколько цифр «4» в этой записи? 3 | ''' 4 | x = 25 ** 56 + 5 ** 138 - 5 5 | k = 0 6 | while x > 0: 7 | if x % 5 == 4: 8 | k += 1 9 | x //= 5 10 | print(k) -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /zadanie_14/14-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Запись числа 67 в системе счисления с основанием N оканчивается на 1 и содержит 4 цифры. Укажите основание этой системы счисления N. 3 | ''' 4 | for n in range(2, 36): 5 | x = 67 6 | k = 0 7 | while x > 0: 8 | k += 1 9 | x //= n 10 | if 67 % n == 1 and k == 4: 11 | print(n) -------------------------------------------------------------------------------- /zadanie_14/14-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (М.В. Кузнецова) Значение арифметического выражения: 9 ** 5 + 3**25 – 20 записали в системе счисления с основанием 3. 3 | Найдите сумму цифр в этой записи. Ответ запишите в десятичной системе. 4 | ''' 5 | x = 9 ** 5 + 3 ** 25 - 20 6 | summa = 0 7 | while x > 0: 8 | summa += x % 3 9 | x //= 3 10 | print(summa) -------------------------------------------------------------------------------- /zadanie_8/8-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Найдите количество 9-значных чисел таких, что в их десятичной записи ровно 7 цифр "8" и нет цифр "1" и "2" 3 | ''' 4 | 5 | count = 0 6 | for i in range(308888888, 888888899): 7 | if str(i).count('8') == 7 and '1' not in str(i) and '2' not in str(i): 8 | print(i) 9 | count += 1 10 | print(count) 11 | -------------------------------------------------------------------------------- /zadanie_25/25-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Д.Ф. Муфаззалов, г. Уфа) Определите количество простых чисел в диапазоне [2; 200000] 3 | ''' 4 | 5 | def prost(n): 6 | for i in range(2, n): 7 | if n % i == 0: 8 | return False 9 | return True 10 | 11 | k = 0 12 | for i in range(2, 200001): 13 | if prost(i): 14 | k += 1 15 | print(k) -------------------------------------------------------------------------------- /zadanie_14/14-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Запись числа 381 в системе счисления с основанием N оканчивается на 3 и содержит 3 цифры. Укажите наибольшее возможное основание этой системы счисления N. 3 | ''' 4 | for n in range(4, 36): 5 | x = 381 6 | k = 0 7 | while x > 0: 8 | k += 1 9 | x //= n 10 | if 381 % n == 3 and k == 3: 11 | print(n) -------------------------------------------------------------------------------- /zadanie_16/16-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n при n > 18 4 | F(n) = 3·F(n+1) + n + 8, если n ≤ 18 5 | Чему равно значение функции F(9)? 6 | ''' 7 | def f(n): 8 | if n > 18: 9 | return n 10 | else: 11 | return 3 * f(n + 1) + n + 8 12 | 13 | print(f(9)) -------------------------------------------------------------------------------- /zadanie_16/16-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = 2 при n = 1 4 | F(n) = F(n–1) + 5·n2, если n > 1 5 | Чему равно значение функции F(39)? 6 | ''' 7 | def f(n): 8 | if n == 1: 9 | return 2 10 | if n > 1: 11 | return f(n - 1) + 5 * n ** 2 12 | 13 | print(f(39)) -------------------------------------------------------------------------------- /zadanie_23/23-28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор две команды, которым присвоены номера: 3 | 1. прибавь 2 4 | 2. умножь на 3 5 | Сколько есть программ, которые число 1 преобразуют в число 49? 6 | ''' 7 | def f(x, y): 8 | if x > y: 9 | return 0 10 | elif x == y: 11 | return 1 12 | return f(x + 2, y) + f(x * 3, y) 13 | 14 | print(f(1, 49)) -------------------------------------------------------------------------------- /zadanie_14/14-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Значение выражения 12 * 7 ** 135 + 11 * 7 ** 92 - 63 * 7 ** 22 + 17 * 7 ** 11 + 157 записали в системе счисления с основанием 7. 3 | Сколько различных цифр содержится в этой записи? 4 | ''' 5 | x = 12 * 7 ** 135 + 11 * 7 ** 92 - 63 * 7 ** 22 + 17 * 7 ** 11 + 157 6 | k = set() 7 | while x > 0: 8 | k.add(x % 7) 9 | x //= 7 10 | print(len(k)) -------------------------------------------------------------------------------- /zadanie_12/12-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 101 единицы? 3 | НАЧАЛО 4 | ПОКА нашлось (111) 5 | заменить (111, 22) 6 | заменить (222, 11) 7 | КОНЕЦ ПОКА 8 | КОНЕЦ 9 | ''' 10 | s = 101 * '1' 11 | while '111' in s: 12 | s = s.replace('111', '22', 1) 13 | s = s.replace('222', '11', 1) 14 | print(s) -------------------------------------------------------------------------------- /zadanie_16/16-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Определите, сколько символов * выведет эта процедура при вызове F(28): 3 | Python 4 | def F( n ): 5 | print("*") 6 | if n >= 1: 7 | print("*") 8 | F(n-1) 9 | F(n-2) 10 | ''' 11 | k = 0 12 | def f(n): 13 | global k 14 | k += 1 15 | if n >= 1: 16 | k += 1 17 | f(n - 1) 18 | f(n - 2) 19 | 20 | f(28) 21 | print(k) -------------------------------------------------------------------------------- /zadanie_22/22-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Ниже приведен алгоритм. Укажите наибольшее число x, при вводе которого алгоритм печатает 110, а потом 120. 3 | ''' 4 | for j in range(1, 1000): 5 | x = j 6 | p = 0 7 | s = 7 * (x - x % 25) 8 | i = 1 9 | while p < s: 10 | s = s - 2 * i 11 | p = p + i 12 | i = i + 1 13 | if s == 110 and p == 120: 14 | print(j) -------------------------------------------------------------------------------- /zadanie_23/23-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | ''' 4 | fib = [1]*10 5 | for i in range(10): 6 | if i > 1: 7 | fib[i] = fib[i-2] + fib[i-1] 8 | print(fib) 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | if x == y: 13 | return 1 14 | for c in fib: 15 | if c >= x: 16 | return f(x + 1, y) + f(x + 5, y) + f(x + c, y) 17 | 18 | 19 | print(f(1, 13)) -------------------------------------------------------------------------------- /zadanie_6/6-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Е. Джобс) Сколько существует различных значений d, оканчивающихся на 8, при вводе которых эта приведенная программа выведет число 1247? 3 | ''' 4 | k = 0 5 | for i in range(1, 10000): 6 | d = i 7 | s = 5 8 | n = 7 9 | while s <= 3011: 10 | s = s + d 11 | n = n + 124 12 | if n == 1247 and i % 10 == 8: 13 | k += 1 14 | print(k) -------------------------------------------------------------------------------- /zadanie_8/8-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько существует различных трёхзначных числе, записанных в пятеричной системе счисления, в записи которых цифры следуют 3 | слева направо в строго убывающем порядке? 4 | ''' 5 | k = 0 6 | for a in range(0, 5): 7 | for b in range(0, 5): 8 | for c in range(0, 5): 9 | if a > b and b > c: 10 | k += 1 11 | print(k) 12 | 13 | 14 | -------------------------------------------------------------------------------- /zadanie_8/8-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Артур составляет 5-буквенные коды перестановкой букв слова ВОРОН. При этом нельзя ставить рядом две гласные. 3 | Сколько различных кодов может составить Артур? 4 | ''' 5 | from itertools import permutations 6 | words = permutations('ворон') 7 | s = set() 8 | for w in words: 9 | word = ''.join(w) 10 | if 'оо' not in word: 11 | s.add(word) 12 | print(len(s)) 13 | -------------------------------------------------------------------------------- /zadanie_23/23-29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор три команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. умножь на 2 5 | 3. умножь на 3 6 | Сколько есть программ, которые число 1 преобразуют в число 14? 7 | ''' 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(x * 2, y) + f(x * 3, y) 14 | 15 | print(f(1, 14)) -------------------------------------------------------------------------------- /zadanie_24/24-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-s1.txt состоит не более чем из 106 заглавных латинских букв (A..Z). Текст разбит на строки различной 3 | длины. Определите количество строк, в которых комбинация YZ встречается больше одного раза. 4 | ''' 5 | with open('../files/24/24-s1.txt') as f: 6 | count = 0 7 | for s in f: 8 | if s.count('YZ') > 1: 9 | count += 1 10 | print(count) -------------------------------------------------------------------------------- /zadanie_14/14-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (М.В. Кузнецова) Значение арифметического выражения: 9**7 + 3**8 – 1 записали в системе счисления с основанием 3. 3 | Какая из цифр чаще всего встречается в полученном числе? В ответе укажите, сколько таких цифр в этой записи. 4 | ''' 5 | numbers = {} 6 | x = 9 ** 7 + 3 ** 8 - 1 7 | while x > 0: 8 | numbers[x % 3] = numbers.get(x % 3, 0) + 1 9 | x //= 3 10 | print(numbers) 11 | -------------------------------------------------------------------------------- /zadanie_14/14-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (П. Волгин) Значение выражения 8 ** 888 + 15 * 15 ** 1515 - 2 ** 444 записали в системе счисления с основанием 8. 3 | Определите количество комбинаций цифр 7# в этой записи, где # – любая цифра от 1 до 6. 4 | ''' 5 | x = oct(8 ** 888 + 15 * 15 ** 1515 - 2 ** 444)[2:] 6 | k = 0 7 | for i in range(len(x) - 1): 8 | if x[i] == '7' and x[i + 1] in '123456': 9 | k += 1 10 | print(k) -------------------------------------------------------------------------------- /zadanie_25/25-32.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Среди натуральных чисел, не превышающих 1000000, найдите все числа, соответствующие маске 123*5* и делящихся на число 42 без остатка. 3 | В ответе запишите все найденные числа в порядке возрастания, а рядом с ними - соответствующие им частные от деления на 42. 4 | ''' 5 | for i in range(1235, 1000000): 6 | if str(i)[:3] == '123' and '5' in str(i) and i % 42 == 0: 7 | print(i, i // 42) 8 | -------------------------------------------------------------------------------- /zadanie_8/8-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Артур составляет 6-буквенные коды перестановкой букв слова АСПЕКТ. При этом нельзя ставить рядом две гласные. 3 | Сколько различных кодов может составить Артур? 4 | ''' 5 | from itertools import permutations 6 | words = permutations('аспект') 7 | s = set() 8 | for w in words: 9 | word = ''.join(w) 10 | if 'ае' not in word and 'еа' not in word: 11 | s.add(word) 12 | print(len(s)) -------------------------------------------------------------------------------- /zadanie_8/8-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Петя составляет шестибуквенные слова перестановкой букв слова АДЖИКА. При этом он избегает слов с двумя подряд одинаковыми буквами. 3 | Сколько всего различных слов может составить Петя? 4 | ''' 5 | from itertools import permutations 6 | k = set() 7 | words = permutations('аджика') 8 | for w in words: 9 | word = ''.join(w) 10 | if 'аа' not in word: 11 | k.add(word) 12 | print(len(k)) -------------------------------------------------------------------------------- /zadanie_16/16-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Определите, сколько символов * выведет эта процедура при вызове F(35): 3 | Python 4 | def F( n ): 5 | print("*") 6 | if n >= 1: 7 | print("*") 8 | F(n-1) 9 | F(n-2) 10 | print("*") 11 | ''' 12 | k = 0 13 | def f(n): 14 | global k 15 | k += 1 16 | if n >= 1: 17 | k += 1 18 | f(n - 1) 19 | f(n - 2) 20 | k += 1 21 | 22 | f(35) 23 | print(k) -------------------------------------------------------------------------------- /zadanie_24/24-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Определите максимальное количество идущих подряд символовЮ среди которых нет символа Z. 3 | ''' 4 | with open('../files/24/24 варианты 5-9.txt') as f: 5 | s = f.readline() 6 | k, kmax = 1, 1 7 | for i in range(1, len(s)): 8 | if s[i] == 'Z' or s[i-1] == 'Z': 9 | k = 1 10 | else: 11 | k += 1 12 | kmax = max(k, kmax) 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_14/14-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Б.С. Михлин) Число 538 записали в системах счисления с основаниями от 2 до 10 включительно. При каких основаниях сумма цифр этого числа четная? 3 | В ответе укажите сумму всех подходящих оснований. 4 | ''' 5 | summa = 0 6 | for i in range(2, 11): 7 | ss = 0 8 | x = 538 9 | while x > 0: 10 | ss += x % i 11 | x //= i 12 | if ss % 2 == 0: 13 | summa += i 14 | print(summa) -------------------------------------------------------------------------------- /zadanie_16/16-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(1) = 1 4 | F(2) = 3 5 | F(n) = F(n–1) * n + F(n–2) * (n – 1) , при n >2 6 | Чему равно значение функции F(5)? 7 | ''' 8 | def f(n): 9 | if n == 1: 10 | return 1 11 | if n == 2: 12 | return 3 13 | if n > 2: 14 | return f(n-1) * n + f(n-2) * (n-1) 15 | 16 | print(f(5)) -------------------------------------------------------------------------------- /zadanie_8/8-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Артур составляет 5-буквенные коды перестановкой букв слова АРЕАЛ. При этом нельзя ставить рядом две гласные. 3 | Сколько различных кодов может составить Артур? 4 | ''' 5 | from itertools import permutations 6 | words = permutations('ареал') 7 | s = set() 8 | for w in words: 9 | word = ''.join(w) 10 | if 'аа' not in word and 'ае' not in word and 'еа' not in word: 11 | s.add(word) 12 | print(len(s)) -------------------------------------------------------------------------------- /zadanie_14/14-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Число 652 записали в системах счисления с основаниями от 2 до 10 включительно. При каких основаниях в записи этого числа нет цифры 2? 3 | В ответе укажите сумму всех подходящих оснований. 4 | ''' 5 | summa = 0 6 | for i in range(2, 11): 7 | k2 = 0 8 | x = 652 9 | while x > 0: 10 | if x % i == 2: 11 | k2 = 1 12 | x //= i 13 | if k2 == 0: 14 | summa += i 15 | print(summa) -------------------------------------------------------------------------------- /.idea/ege_informatika_python.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /zadanie_6/6-1.py: -------------------------------------------------------------------------------- 1 | """ 2 | (А.Г. Минак) Определите, при каком наименьшем введённом значении переменной s программа выведет число, 3 | не меньшее, чем 30. 4 | Python 5 | s = int(input()) 6 | n = 32 7 | while n > s: 8 | s = s + 1 9 | n = n - 1 10 | print(n) 11 | """ 12 | for i in range(1, 1000): 13 | s = i 14 | n = 32 15 | while n > s: 16 | s = s + 1 17 | n = n - 1 18 | if n >= 30: 19 | print(i) 20 | break -------------------------------------------------------------------------------- /files/17/17-5.txt: -------------------------------------------------------------------------------- 1 | 92 2 | 67 3 | -12 4 | 5 5 | 35 6 | -77 7 | -43 8 | -8 9 | 7 10 | -44 11 | 37 12 | 84 13 | -36 14 | 10 15 | -4 16 | -63 17 | -55 18 | -54 19 | 40 20 | -17 21 | 74 22 | -67 23 | -51 24 | 25 25 | 44 26 | 63 27 | 73 28 | 51 29 | 74 30 | 89 31 | 2 32 | 25 33 | -28 34 | -91 35 | -38 36 | 79 37 | -37 38 | -80 39 | 73 40 | 41 41 | 58 42 | 10 43 | -6 44 | 32 45 | 37 46 | 76 47 | 86 48 | 19 49 | 79 50 | -30 -------------------------------------------------------------------------------- /zadanie_8/8-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Из букв А З И М У Т составляются 6-буквенные последовательности. Сколько можно составить различных последовательностей, 3 | если известно, что в каждой из них содержится не менее 3 согласных? 4 | ''' 5 | from itertools import product 6 | words = product('азимут', repeat=6) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if (word.count('а') + word.count('у') + word.count('и')) >= 3: 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_24/24-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Определите максимальное количество идущих подряд символов, расположенных в алфавитном порядке (возможно, с повторением символов). 3 | ''' 4 | with open('../files/24/24 варианты 5-9.txt') as f: 5 | s = f.readline() 6 | k, kmax = 1, 1 7 | for i in range(1, len(s)): 8 | if s[i] >= s[i-1]: 9 | k += 1 10 | kmax = max(k, kmax) 11 | else: 12 | k = 1 13 | print(kmax) 14 | -------------------------------------------------------------------------------- /zadanie_8/8-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Из букв слова К А Р К А С составляются 6-буквенные последовательности. 3 | Сколько можно составить различных последовательностей, если известно, что в каждой из них содержится не менее 3 согласных? 4 | ''' 5 | import itertools 6 | words = itertools.product('карс', repeat=6) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if (word.count('к') + word.count('р') + word.count('с')) >= 3: 11 | k += 1 12 | print(k) 13 | -------------------------------------------------------------------------------- /zadanie_8/8-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Вася составляет 4-буквенные коды из букв У, Л, Е, Й. Каждую букву нужно использовать ровно 1 раз, при этом код не может 3 | начинаться с буквы Й и не может содержать сочетания ЕУ. Сколько различных кодов может составить Вася? 4 | ''' 5 | from itertools import permutations 6 | words = permutations('улей') 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if word[0] != 'й' and 'еу' not in word: 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_24/24-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В текстовом файле k7.txt находится цепочка из символов латинского алфавита A, B, C длиной не более 10**6 символов. Найдите длину самой длинной подцепочки, состоящей из символов C. 3 | ''' 4 | with open('../files/24/k7.txt') as f: 5 | s = f.readline() 6 | k, kmax = 0, 0 7 | for i in s: 8 | if i == 'C': 9 | k += 1 10 | kmax = max(k, kmax) 11 | else: 12 | k = 0 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_24/24-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А.М. Кабанов) В текстовом файле k7a-4.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, не содержащей символа D. 3 | ''' 4 | with open('../files/24/k7a-4.txt') as f: 5 | s = f.readline() 6 | k, kmax = 0, 0 7 | for i in s: 8 | if i != 'D': 9 | k += 1 10 | kmax = max(k, kmax) 11 | else: 12 | k = 0 13 | print(kmax) -------------------------------------------------------------------------------- /files/17/17-9.txt: -------------------------------------------------------------------------------- 1 | 145 2 | 687 3 | 344 4 | 127 5 | 264 6 | 666 7 | 567 8 | 912 9 | 861 10 | 134 11 | 40 12 | 6 13 | 6 14 | 384 15 | 254 16 | 7 17 | 199 18 | 493 19 | 430 20 | 429 21 | 986 22 | 70 23 | 930 24 | 611 25 | 76 26 | 232 27 | 554 28 | 643 29 | 973 30 | 317 31 | 445 32 | 829 33 | 509 34 | 384 35 | 6 36 | 129 37 | 65 38 | 129 39 | 513 40 | 257 41 | 1025 42 | 1027 43 | 822 44 | 838 45 | 795 46 | 970 47 | 72 48 | 72 49 | 127 50 | 948 -------------------------------------------------------------------------------- /zadanie_24/24-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24.txt состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны. 3 | ''' 4 | with open('../files/24/24.txt') as f: 5 | s = f.readline() 6 | k, kmax = 1, 0 7 | for i in range(1, len(s)): 8 | if s[i] != s[i-1]: 9 | k += 1 10 | kmax = max(k, kmax) 11 | else: 12 | k = 1 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_25/25-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [4301614; 4301717], простые числа. 3 | Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку. 4 | ''' 5 | def prost(n): 6 | for i in range(2, n): 7 | if n % i == 0: 8 | return False 9 | return True 10 | 11 | for i in range(4301614, 4301718): 12 | if prost(i): 13 | print(i) -------------------------------------------------------------------------------- /zadanie_8/8-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Ольга составляет 5-буквенные коды из букв О, Л, Ь, Г, А. Каждую букву нужно использовать ровно 1 раз, 3 | при этом Ь нельзя ставить первым и нельзя ставить после гласной. Сколько различных кодов может составить Ольга? 4 | ''' 5 | from itertools import permutations 6 | words = permutations('ольга') 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if word[0] != 'ь' and 'оь' not in word and 'аь' not in word: 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_15/15-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На числовой прямой даны два отрезка: P = [15, 20] и Q = [5, 38]. Найдите наибольшую возможную длину отрезка A, при котором формула 3 | ( (x ∈ А) → (x ∈ P) ) ∨ (x ∈ Q) 4 | тождественно истинна, то есть принимает значение 1 при любых x. 5 | ''' 6 | p = set(range(15, 21)) 7 | q = set(range(5, 39)) 8 | a = set(range(-1000, 1000)) 9 | for x in range(-1000, 1000): 10 | if not(((x in a) and (x in p)) or (x in q)): 11 | a.remove(x) 12 | print(max(a) - min(a)) -------------------------------------------------------------------------------- /zadanie_17/14-17.py: -------------------------------------------------------------------------------- 1 | def nFun(a, func): 2 | return [func(k) for k in a].count(True) 3 | 4 | with open('../files/17/17-1.txt') as f: 5 | s = [int(x) for x in f] 6 | sred = sum(s) // len(s) 7 | numbers = [] 8 | for i in range(len(s) - 2): 9 | tr = s[i:i + 3] 10 | if nFun(tr, lambda x: x < sred) >= 2 and nFun(tr, lambda x: '1' in str(x)) == 3: 11 | numbers.append(sum(tr)) 12 | print(len(numbers), max(numbers)) 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /zadanie_25/25-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Найдите все натуральные числа, N, принадлежащие отрезку [150 000 000; 300 000 000], которые можно представить в виде 3 | N = 2m•3n, где m – нечётное число, n – чётное число. В ответе запишите все найденные числа в порядке возрастания, 4 | а справа от каждого числа – сумму m+n. 5 | ''' 6 | for m in range(1, 1000, 2): 7 | for n in range(0, 1000, 2): 8 | if 150000000 <= 2 ** m * 3 ** n <= 300000000: 9 | print(2 ** m * 3 ** n, m + n) 10 | -------------------------------------------------------------------------------- /zadanie_25/25-28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Найдите все натуральные числа, N, принадлежащие отрезку [100 000 000; 300 000 000], 3 | которые можно представить в виде N = 2m•7n, где m – нечётное число, n – чётное число. 4 | В ответе запишите все найденные числа в порядке возрастания, а справа от каждого числа – сумму m+n. 5 | ''' 6 | for m in range(1, 1000, 2): 7 | for n in range(0, 1000, 2): 8 | if 100000000 <= 2 ** m * 7 ** n <= 300000000: 9 | print(2 ** m * 7 ** n, m + n) 10 | -------------------------------------------------------------------------------- /zadanie_15/15-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На числовой прямой даны два отрезка: P = [10, 40] и Q = [25, 35]. Найдите наибольшую возможную длину отрезка A, при котором формула 3 | ( (x ∈ А) ∧ (x ∉ P) ) → (x ∈ Q) 4 | тождественно истинна, то есть принимает значение 1 при любых x. 5 | ''' 6 | p = set(range(10, 41)) 7 | q = set(range(25, 36)) 8 | a = set(range(-1000, 1000)) 9 | for x in range(-1000, 1000): 10 | if not(((x in a) and (x not in p)) <= (x in q)): 11 | a.remove(x) 12 | print(max(a) - min(a)) -------------------------------------------------------------------------------- /zadanie_23/23-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 4 5 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько есть программ, которые число 1 преобразуют в число 32? 6 | ''' 7 | def f(x, y): 8 | if x > y: 9 | return 0 10 | elif x == y: 11 | return 1 12 | return f(x + 1, y) + f(x * 4, y) 13 | 14 | 15 | print(f(1, 32)) -------------------------------------------------------------------------------- /zadanie_8/8-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько слов длины 4, начинающихся с согласной буквы и заканчивающихся гласной буквой, можно составить из букв М, Е, Т, Р, О? 3 | Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка. 4 | ''' 5 | from itertools import product 6 | words = product('метро', repeat=4) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if word[0] in 'мтр' and word[-1] in 'ео': 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_23/23-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 3 5 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько есть программ, которые число 7 преобразуют в число 20? 6 | ''' 7 | 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(x + 3, y) 14 | 15 | 16 | print(f(7, 20)) -------------------------------------------------------------------------------- /zadanie_23/23-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 3 4 | 2. Умножить на 3 5 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько есть программ, которые число 5 преобразуют в число 27? 6 | ''' 7 | 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 3, y) + f(x * 3, y) 14 | 15 | 16 | print(f(5, 27)) -------------------------------------------------------------------------------- /zadanie_24/24-30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл состоит из более яем 10**6 символов. 3 | Определите максимальное количество идущих подряд одинаковых цифр. 4 | Для выполнения этого задания следует написать программу. 5 | ''' 6 | with open('../files/24/24_krilov10-18.txt') as f: 7 | s = f.readline() 8 | k, kmax = 1, 1 9 | for i in range(1, len(s)): 10 | if s[i] == s[i-1]: 11 | k += 1 12 | kmax = max(k, kmax) 13 | else: 14 | k = 1 15 | print(kmax) -------------------------------------------------------------------------------- /zadanie_8/8-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Все 5-буквенные слова, составленные из букв А, К, Р, У, записаны в алфавитном порядке. Вот начало списка: 3 | 1. ААААА 4 | 2. ААААК 5 | 3. ААААР 6 | 4. ААААУ 7 | 5. АААКА 8 | ... 9 | Какое количество слов находятся между словами РУКАА и УКАРА (включая эти слова)? 10 | ''' 11 | from itertools import product 12 | words = product('акру', repeat=5) 13 | s = [] 14 | for w in words: 15 | word = ''.join(w) 16 | s.append(word) 17 | print(s.index('укара') - s.index('рукаа') + 1) -------------------------------------------------------------------------------- /zadanie_16/16-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = 2·n при n < 3 4 | F(n) = 3·n + 5 + F(n–2), если n ≥ 3 и чётно, 5 | F(n) = n + 2·F(n–6), если n ≥ 3 и нечётно. 6 | Чему равно значение функции F(61)? 7 | ''' 8 | def f(n): 9 | if n < 3: 10 | return 2 * n 11 | else: 12 | if n % 3 == 0: 13 | return 3 * n + 5 + f(n - 2) 14 | else: 15 | return n + 2 * f(n - 6) 16 | 17 | print(f(61)) -------------------------------------------------------------------------------- /zadanie_23/23-38.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (С.С. Поляков) У исполнителя Калькулятор есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 2 6 | Сколько существует программ минимальной длины, в результате выполнения которых при исходном числе 1 результатом является число 28? 7 | ''' 8 | def f(x, k): 9 | if x == 28: 10 | s.append(k) 11 | elif x < 28: 12 | return f(x + 1, k + 1), f(x + 2, k + 1), f(x * 2, k + 1) 13 | 14 | s = [] 15 | f(1, 0) 16 | print(s.count(min(s))) -------------------------------------------------------------------------------- /zadanie_24/24-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А.М. Кабанов) В текстовом файле k7a-2.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, состоящей из символов A, C, D (в произвольном порядке). 3 | ''' 4 | with open('../files/24/k7a-2.txt') as f: 5 | s = f.readline() 6 | k, kmax = 0, 0 7 | for i in s: 8 | if i == 'D' or i == 'A' or i == 'C': 9 | k += 1 10 | kmax = max(k, kmax) 11 | else: 12 | k = 0 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_14/14-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) Значение выражения 125 ** 7 - 25 ** 4 + x записали в пятеричной системе счисления, при этом в записи оказалось 15 3 | цифр 4, одна тройка и две единицы. При каком минимальном натуральном x это возможно? 4 | ''' 5 | for x in range(1, 1000): 6 | f = 125 ** 7 - 25 ** 4 + x 7 | s = '' 8 | while f > 0: 9 | s += str(f % 5) 10 | f //= 5 11 | if s.count('4') == 15 and s.count('3') == 1 and s.count('1') == 2: 12 | print(x) 13 | break 14 | 15 | 16 | -------------------------------------------------------------------------------- /zadanie_23/23-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор две команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. увеличь число десятков на 1 5 | Например, при помощи команды 2 число 23 преобразуется в 33. Если перед выполнением команды 2 вторая с конца цифра 6 | равна 9, она не изменяется. Сколько есть программ, которые число 10 преобразуют в число 33? 7 | ''' 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(x + 10, y) 14 | print(f(10, 33)) -------------------------------------------------------------------------------- /zadanie_25/25-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [7178551; 7178659], простые числа. 3 | Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку. 4 | ''' 5 | def prost(n): 6 | for d in range(2, n): 7 | if n % d == 0: 8 | return False 9 | return True 10 | 11 | count = 1 12 | for i in range(7178551, 7178660): 13 | if prost(i): 14 | print(count, i) 15 | count += 1 -------------------------------------------------------------------------------- /stream.py: -------------------------------------------------------------------------------- 1 | def prost(n): 2 | for d in range(2, round(n ** 0.5) + 1): 3 | if n % d == 0: 4 | return False 5 | return True 6 | 7 | 8 | minimum = 1000000000000 9 | for i in range(309829, 365875): 10 | for d in range(2, round(i ** 0.5)): 11 | if d * (i // d) == i and prost(d) and prost(i // d): 12 | print(d, i // d) 13 | if abs(i // d - d) < minimum: 14 | minimum = abs(i // d - d) 15 | d1, d2 = d, i // d 16 | print(minimum, d1, d2) 17 | 18 | -------------------------------------------------------------------------------- /zadanie_16/16-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 3200000. 3 | Запишите в ответе сначала найденное значение n, а затем через пробел – соответствующую сумму выведенных чисел. 4 | ''' 5 | def f(n): 6 | global s 7 | s += (n * n) 8 | if n > 1: 9 | s += (2 * n + 1) 10 | f(n - 2) 11 | f(n // 3) 12 | 13 | for n in range(10000): 14 | s = 0 15 | f(n) 16 | if s > 3200000: 17 | break 18 | print(n, s) -------------------------------------------------------------------------------- /zadanie_24/24-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-181.txt строку из заглавных латинских букв и точек, всего не более чем из 10**6 символов. Определите максимальное количество идущих подряд символов, среди которых не более одной точки. 3 | ''' 4 | with open('../files/24/24-181.txt') as f: 5 | s = f.readline() 6 | kmax = 0 7 | a = [] 8 | for i in range(len(s)): 9 | if s[i] == '.': 10 | a.append(i) 11 | for i in range(2, len(a)): 12 | kmax = max(kmax, a[i] - a[i - 2] - 1) 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_24/24-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-181.txt строку из заглавных латинских букв и точек, всего не более чем из 10**6 символов. Определите максимальное количество идущих подряд символов, среди которых не более двух точек. 3 | ''' 4 | with open('../files/24/24-181.txt') as f: 5 | s = f.readline() 6 | kmax = 0 7 | a = [] 8 | for i in range(len(s)): 9 | if s[i] == '.': 10 | a.append(i) 11 | for i in range(2, len(a)): 12 | kmax = max(kmax, a[i] - a[i - 3] - 1) 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_23/23-41.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавь 1 4 | 2. Умножь на 2 и вычти 3 5 | Сколько различных результатов можно получить из исходного числа 3 после выполнения программы, содержащей ровно 12 команд? 6 | 7 | ''' 8 | s = set() 9 | def f(x, k): 10 | global s 11 | if k == 12: 12 | s.add(x) 13 | else: 14 | f(x + 1, k + 1) 15 | f(x * 2 - 3, k + 1) 16 | 17 | f(3, 0) 18 | print(len(s)) -------------------------------------------------------------------------------- /zadanie_24/24-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Текстовый файл состоит из символов арабских цифр.Определите максимальное количество идущих подряд символов в 3 | прилагаемом файле, среди которых нет трёх символов 0, стоящих рядом. 4 | ''' 5 | with open('../files/24/24 варианты 1-4.txt') as f: 6 | s = f.readline() 7 | k, kmax = 2, 1 8 | for i in range(2, len(s)): 9 | if s[i-2] == s[i-1] == s[i] == '0': 10 | k = 2 11 | else: 12 | k += 1 13 | kmax = max(k, kmax) 14 | print(kmax) 15 | 16 | -------------------------------------------------------------------------------- /zadanie_8/8-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Василий составляет 4-буквенные коды из букв А, Р, С, Е, Н, И, Й. Каждую букву можно использовать любое количество раз, 3 | при этом код не может начинаться с буквы Й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий? 4 | ''' 5 | from itertools import product 6 | words = product('арсений', repeat=4) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if word[0] != 'й' and (word.count('а') + word.count('е') + word.count('и')) >= 1: 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_15/15-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На числовой прямой даны три отрезка: P = [20, 30], Q = [5, 15] и R = [35,50]. Какова наименьшая длина отрезка A, при котором формула 3 | ((x ∈ P) → (x ∈ Q)) ∨ (¬(x ∈ A) → (x ∈ R)) 4 | тождественно истинна, то есть принимает значение 1 при любом значении переменной х? 5 | ''' 6 | p = set(range(20, 31)) 7 | q = set(range(5, 16)) 8 | r = set(range(35, 51)) 9 | a = set() 10 | for x in range(-1000, 1000): 11 | if not(((x in p) <= (x in q)) or ((x not in a) <= (x in r))): 12 | a.add(x) 13 | print(max(a) - min(a)) -------------------------------------------------------------------------------- /zadanie_16/16-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значений функций F(n) и G(n), где n – натуральное число, задан следующими соотношениями: 3 | F(1) = 1; G(1) = 1; 4 | F(n) = F(n–1) – 2·G(n–1), при n >=2 5 | G(n) = F(n–1) + 2·G(n–1), при n >=2 6 | Чему равно значение величины G(21)? 7 | ''' 8 | def f(n): 9 | if n == 1: 10 | return 1 11 | if n >= 2: 12 | return f(n - 1) - 2 * g(n - 1) 13 | 14 | def g(n): 15 | if n == 1: 16 | return 1 17 | if n >= 2: 18 | return f(n - 1) + 2 * g(n - 1) 19 | 20 | print(g(21)) -------------------------------------------------------------------------------- /zadanie_24/24-33.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-196.txt содержит строку из заглавных латинских букв X, Y и Z, всего не более чем из 106 символов. 3 | Определите максимальное количество идущих подряд пар символов ZX или ZY. 4 | ''' 5 | with open('../files/24/24-196.txt') as f: 6 | s = f.readline() 7 | s = s.replace('Y', 'X') 8 | s = s.replace('ZX', '.') 9 | k, kmax = 0, 0 10 | for c in s: 11 | if c == '.': 12 | k += 1 13 | kmax = max(k, kmax) 14 | else: 15 | k = 0 16 | print(kmax) -------------------------------------------------------------------------------- /zadanie_12/12-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (В.Ю. Беспалова) Чертежнику был дан для исполнения следующий алгоритм: 3 | Сместиться на (1,–1) 4 | Повтори 3 раза 5 | Сместиться на (a, b) 6 | Сместиться на (4, 5) 7 | конец 8 | Сместиться на (17, 31) 9 | Найдите целые значения a и b, для которых после выполнения программы Чертёжник окажется в исходной точке. В ответе запишите произведение этих чисел. 10 | ''' 11 | for a in range(-100, 100): 12 | for b in range(-100, 100): 13 | if (1 + 3 * (a + 4) + 17) == (-1 + 3 * (b + 5) + 31) == 0: 14 | print(a * b) -------------------------------------------------------------------------------- /zadanie_23/23-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Исполнитель Вычислитель преобразует число, записанное на экране. 3 | У исполнителя есть три команды, которым присвоены номера: 4 | 1. Прибавить 2 5 | 2. Умножить на 2 6 | 3. Умножить на 3 7 | Сколько существует программ, которые преобразут исходное число 2 в число 28 и при этом траектория вычислений, содержит число 6? 8 | ''' 9 | 10 | def f(x, y): 11 | if x > y: 12 | return 0 13 | elif x == y: 14 | return 1 15 | return f(x + 2, y) + f(x * 2, y) + f(x * 3, y) 16 | 17 | print(f(2, 6) * f(6, 28)) -------------------------------------------------------------------------------- /zadanie_24/24-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-157.txt состоит не более чем из 10**6 символов и содержит только заглавные буквы латинского алфавита (A..Z). Определите максимальное количество идущих подряд символов, среди которых нет сочетания символов QW. 3 | ''' 4 | with open('../files/24/24-157.txt') as f: 5 | s = f.readline() 6 | k, kmax = 1, 0 7 | for i in range(1, len(s)): 8 | if s[i] == 'W' and s[i - 1] == 'Q': 9 | k = 1 10 | else: 11 | k += 1 12 | kmax = max(k, kmax) 13 | print(kmax) -------------------------------------------------------------------------------- /zadanie_8/8-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Миша составляет 5-буквенные коды из букв С, А, К, У, Р, А. 3 | Каждая допустимая гласная буква может входить в код не более одного раза. Сколько кодов может составить Миша? 4 | ''' 5 | letters = 'сакур' 6 | k = 0 7 | for a in letters: 8 | for b in letters: 9 | for c in letters: 10 | for d in letters: 11 | for e in letters: 12 | word = a + b + c + d + e 13 | if word.count('а') <= 1 and word.count('у') <= 1: 14 | k += 1 15 | print(k) -------------------------------------------------------------------------------- /zadanie_12/12-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 247 идущих подряд цифр 5? В ответе запишите полученную строку. 3 | НАЧАЛО 4 | ПОКА нашлось (222) ИЛИ нашлось (555) 5 | ЕСЛИ нашлось (222) 6 | ТО заменить (222, 5) 7 | ИНАЧЕ заменить (555, 2) 8 | КОНЕЦ ЕСЛИ 9 | КОНЕЦ ПОКА 10 | КОНЕЦ 11 | ''' 12 | s = 247 * '5' 13 | while '222' in s or '555' in s: 14 | if '222' in s: 15 | s = s.replace('222', '5', 1) 16 | else: 17 | s = s.replace('555', '2', 1) 18 | print(s) -------------------------------------------------------------------------------- /zadanie_23/23-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 2 6 | Сколько разных чисел на отрезке [34, 59] может быть получено из числа 1 с помощью программ, состоящих из 6 команд? 7 | ''' 8 | s = set() 9 | def f(x, k): 10 | global s 11 | if k == 6: 12 | s.add(x) 13 | else: 14 | f(x + 1, k + 1) 15 | f(x + 2, k + 1) 16 | f(x * 2, k + 1) 17 | 18 | f(1, 0) 19 | s1 = set([i for i in range(34, 60)]) 20 | print(len(s & s1)) 21 | -------------------------------------------------------------------------------- /zadanie_24/24-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Текстовый файл состоит не более чем из 10 **6 символов арабских цифр. 3 | Определите максимальное количество идущих подряд нечётных цифр. 4 | Для выполнения этого задания следует написать программу. 5 | ''' 6 | with open('../files/24/24 варианты 10-18.txt') as f: 7 | s = f.readline() 8 | k, kmax = 1, 1 9 | for i in range(1, len(s)-1): 10 | if int(s[i]) % 2 != 0 and int(s[i-1]) % 2 != 0: 11 | k += 1 12 | kmax = max(k, kmax) 13 | else: 14 | k = 1 15 | print(kmax) -------------------------------------------------------------------------------- /zadanie_8/8-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Е. Джобс) Стасик выписывает все шестисимвольные комбинации, составленные из букв А, Б, Г, О, Щ. 3 | При этом упорядочивая их в обратном алфавитном порядке. Вот начало списка: 4 | 1. ЩЩЩЩЩЩ 5 | 2. ЩЩЩЩЩО 6 | 3. ЩЩЩЩЩГ 7 | 4. ЩЩЩЩЩБ 8 | 5. ЩЩЩЩЩА 9 | 6. ЩЩЩЩОЩ 10 | Определите номер слова ОБЩАГА в этом списке. 11 | ''' 12 | from itertools import product 13 | words = product('ЩОГБА', repeat=6) #i -это количество символов в слове 14 | s = [] 15 | for w in words: 16 | s.append(''.join(w)) 17 | print(s.index('ОБЩАГА') + 1) 18 | 19 | 20 | -------------------------------------------------------------------------------- /zadanie_16/16-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(1) = G(1) = 1 4 | F(n) = 2·F(n–1) + G(n–1) – 2n, если n > 1 5 | G(n) = F(n–1) +2·G(n–1) + n, если n > 1 6 | Чему равно значение F(14) + G(14)? 7 | ''' 8 | def f(n): 9 | if n == 1: 10 | return 1 11 | if n > 1: 12 | return 2 * f(n - 1) + g(n - 1) - 2 * n 13 | 14 | def g(n): 15 | if n == 1: 16 | return 1 17 | if n > 1: 18 | return f(n - 1) + 2 * g(n - 1) + n 19 | 20 | print(f(14) + g(14)) -------------------------------------------------------------------------------- /zadanie_23/23-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране в троичной системе счисления. У исполнителя есть две 3 | команды, которым присвоены номера: 4 | 1. Прибавь 1 5 | 2. Умножь на 2 и прибавь 1 6 | Сколько различных результатов можно получить из исходного числа 3 после выполнения программы, содержащей ровно 11 команд? 7 | ''' 8 | d = set() 9 | def f(x, k): 10 | global d 11 | if k == 11: 12 | d.add(x) 13 | else: 14 | f(x + 1, k + 1) 15 | f(x * 2 + 1, k + 1) 16 | f(3, 0) 17 | print(len(d)) 18 | -------------------------------------------------------------------------------- /zadanie_23/23-39.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 5 5 | 3. Умножить на 3 6 | Сколько разных чисел на отрезке [1000, 1024] может быть получено из числа 1 с помощью программ, состоящих из 8 команд? 7 | ''' 8 | s = set() 9 | def f(x, k): 10 | global s 11 | if k == 8: 12 | s.add(x) 13 | else: 14 | f(x + 1, k + 1) 15 | f(x + 5, k + 1) 16 | f(x * 3, k + 1) 17 | 18 | f(1, 0) 19 | s1 = set([i for i in range(1000, 1025)]) 20 | print(len(s & s1)) 21 | -------------------------------------------------------------------------------- /zadanie_5/5-29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N по следующему алгоритму: 3 | 1) Строится двоичная запись числа N. 4 | 2) Запись «переворачивается», то есть читается справа налево. Если при этом появляются ведущие нули, они отбрасываются. 5 | 3) Полученное число переводится в десятичную систему счисления и выводится на экран. 6 | Какое наименьшее число, превышающее 100, после обработки автоматом даёт результат 9? 7 | ''' 8 | for n in range(100, 1000): 9 | s = bin(n)[2:] 10 | if int(s[::-1], 2) == 9: 11 | print(n) 12 | break -------------------------------------------------------------------------------- /zadanie_23/23-40.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране в троичной системе счисления. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавь 3 4 | 2. Умножь на 2 и прибавь 1 5 | Сколько различных результатов можно получить из исходного числа 2 после выполнения программы, содержащей ровно 13 команд? 6 | 7 | ''' 8 | s = set() 9 | def f(x, k): 10 | global s 11 | if k == 13: 12 | s.add(x) 13 | else: 14 | f(x + 3, k + 1) 15 | f(x * 2 + 1, k + 1) 16 | 17 | f(2, 0) 18 | print(len(s)) 19 | -------------------------------------------------------------------------------- /zadanie_24/24-18.py: -------------------------------------------------------------------------------- 1 | with open('../files/24/24-s1.txt') as f: 2 | minN = 1000000000 3 | #print(f.read().count('V')) 4 | slovar = {} 5 | answer = [] 6 | for line in f: 7 | countN = line.count('A') 8 | if countN < minN: 9 | minN, s = countN, line 10 | for x in s: 11 | if x in slovar: 12 | slovar[x] += 1 13 | else: 14 | slovar[x] = 1 15 | for key, value in slovar.items(): 16 | if max(slovar.values()) == value: 17 | answer.append(key) 18 | print(max(answer)) -------------------------------------------------------------------------------- /zadanie_24/24-34.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). 3 | Текст разбит на строки различной длины. В строках, содержащих менее 15 букв G, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке. 4 | ''' 5 | with open('../files/24/24-164.txt') as f: 6 | maximum = 0 7 | for s in f: 8 | if s.count('G') < 15: 9 | for i in s: 10 | maximum = max(maximum, s.rindex(i)-s.index(i)) 11 | print(maximum) 12 | -------------------------------------------------------------------------------- /zadanie_12/12-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | К исходной строке, содержащей не более 100 троек и не содержащей других символов, применили приведённую ниже программу. 3 | НАЧАЛО 4 | ПОКА нашлось (333) 5 | заменить (333, 4) 6 | заменить (4444, 3) 7 | КОНЕЦ ПОКА 8 | КОНЕЦ 9 | В результате получилась строка 43. Какое наибольшее количество троек могло быть в исходной строке? 10 | ''' 11 | for i in range(1, 101): 12 | s = i * '3' 13 | while '333' in s: 14 | s = s.replace('333', '4', 1) 15 | s = s.replace('4444', '3', 1) 16 | if s == '43': 17 | print(i) -------------------------------------------------------------------------------- /zadanie_8/8-30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 5 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом. 3 | ''' 4 | k = 0 5 | chet = '02468' 6 | nechet = '13579' 7 | for i in range(10000, 100000, 5): 8 | x = str(i) 9 | if len(x) == len(set(x)) and ((x[0] in chet and x[1] in nechet and x[2] in chet and x[3] in nechet and x[4] in chet) or \ 10 | (x[0] in nechet and x[1] in chet and x[2] in nechet and x[3] in chet and x[4] in nechet)): 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_12/12-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | ПОКА нашлось (555) ИЛИ нашлось (888) 4 | заменить (555, 8) 5 | заменить (888, 55) 6 | КОНЕЦ ПОКА 7 | Известно, что начальная строка состоит не менее чем из двух цифр 5 и не содержит других цифр. Сколько различных строк может получиться в результате работы алгоритма? 8 | ''' 9 | strs = set() 10 | for i in range(2, 100): 11 | s = i * '5' 12 | while '555' in s or '888' in s: 13 | s = s.replace('555', '8', 1) 14 | s = s.replace('888', '55', 1) 15 | strs.add(s) 16 | print(len(strs)) -------------------------------------------------------------------------------- /zadanie_24/24-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (демо-2022) Текстовый файл состоит из символов P, Q, R, S. Определите максимальное количество идущих подряд символов в 3 | прилагаемом файле, среди которых нет идущих подряд символов P. 4 | Для выполнения этого задания следует написать программу 5 | ''' 6 | with open('../files/24/24.txt') as f: 7 | s = f.readline() 8 | count, maximum = 1, 0 9 | for i in range(1, len(s)): 10 | if s[i] == s[i - 1] == 'P': 11 | count = 1 12 | else: 13 | count += 1 14 | maximum = max(maximum, count) 15 | print(maximum) -------------------------------------------------------------------------------- /zadanie_5/5-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N<256 по следующему алгоритму: 3 | 1) Строится восьмибитная двоичная запись числа N. 4 | 2) Инвертируются все разряды исходного числа (0 заменяется на 1, 1 на 0). 5 | 3) К полученному двоичному числу прибавляют единицу. 6 | 4) Полученное число переводится в десятичную систему счисления. 7 | Чему равен результат работы алгоритма для N = 120? 8 | ''' 9 | s = '0' + bin(120)[2:] 10 | s1 = '' 11 | for i in s: 12 | if i == '1': 13 | s1 += '0' 14 | else: 15 | s1 += '1' 16 | print(int(s1, 2) + 1) 17 | 18 | -------------------------------------------------------------------------------- /zadanie_8/8-32.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Досрочный ЕГЭ-2022) Все 5-буквенные слова, составленные из букв слова ПАРУС записаны в алфавитном порядке и пронумерованы. Вот начало списка: 3 | 1. ААААА 4 | 2. ААААП 5 | 3. ААААР 6 | 4. ААААС 7 | 5. ААААУ 8 | 6. АААПА 9 | ... 10 | Укажите номер первого слова в списке, начинающегося на У, в котором две буквы А не стоят рядом? 11 | ''' 12 | from itertools import product 13 | words = product('апрсу', repeat=5) 14 | k = 0 15 | for w in words: 16 | k += 1 17 | word = ''.join(w) 18 | if word[0] == 'у' and 'аа' not in word: 19 | print(word, k) -------------------------------------------------------------------------------- /zadanie_12/12-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | НАЧАЛО 4 | ПОКА нашлось (555) ИЛИ нашлось (333) 5 | ЕСЛИ нашлось (555) 6 | ТО заменить (555, 3) 7 | ИНАЧЕ заменить (333, 5) 8 | КОНЕЦ ЕСЛИ 9 | КОНЕЦ ПОКА 10 | КОНЕЦ 11 | Дана строка, состоящая из 400 цифр 5. Сколько пятёрок было удалено за время обработки строки по этой программе? 12 | ''' 13 | k = 0 14 | s = 400 * '5' 15 | while '555' in s or '333' in s: 16 | if '555' in s: 17 | s = s.replace('555', '3', 1) 18 | k += 3 19 | else: 20 | s = s.replace('333', '5', 1) 21 | print(k) -------------------------------------------------------------------------------- /zadanie_23/23-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя три команды, которым присвоены номера: 3 | 1. прибавь 1, 4 | 2. сделай чётное, 5 | 3. сделай нечётное. 6 | Первая из них увеличивает на 1 число x на экране, вторая умножает это число на 2, третья переводит число x в число 2x + 1. 7 | Программа для исполнителя – это последовательность команд. Сколько существует программ, которые число 2 преобразуют в число 16? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | if x == y: 13 | return 1 14 | return f(x + 1, y) + f(x * 2, y) + f(x * 2 + 1, y) 15 | 16 | print(f(2, 16)) -------------------------------------------------------------------------------- /zadanie_25/25-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190061; 190072], 3 | числа, имеющие ровно 4 различных НЕЧЁТНЫХ делителя. В ответе для каждого найденного числа запишите два его наибольших 4 | нечётных делителя в порядке убывания. 5 | ''' 6 | for i in range(190061, 190073): 7 | divs = [] 8 | for d in range(1, i + 1): 9 | if i % d == 0 and d % 2: 10 | divs.append(d) 11 | if len(divs) > 4: 12 | break 13 | if len(divs) == 4: 14 | print(sorted(divs)) 15 | -------------------------------------------------------------------------------- /zadanie_8/8-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Пробный КЕГЭ, 2022) Определите количество семизначных чисел, записанных в семеричной системе счисления, учитывая, 3 | что числа не могут начинаться с цифр 3 и 5 и не должны содержать сочетания цифр 22 и 44 одновременно. 4 | ''' 5 | from itertools import product 6 | numbers = product('0123456', repeat=7) 7 | k = 0 8 | for n in numbers: 9 | number = ''.join(n) 10 | if number[0] not in '035' and (('44' in number and '22' not in number) or ('44' not in number and '22' in number) or ('44' not in number and '22' not in number)): 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_8/8-29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Вася составляет слова из букв слова АВТОРОТА. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться 3 | столько же раз, сколько в заданном слове. Кроме того, в коде не должны стоять рядом две гласные и две согласные буквы. 4 | Сколько различных слов может составить Вася? 5 | ''' 6 | from itertools import permutations 7 | words = permutations('авторота') 8 | k = set() 9 | for w in words: 10 | word = ''.join(w) 11 | if 'оо' not in word and 'аа' not in word and 'ао' not in word and 'оа' not in word: 12 | k.add(word) 13 | print(len(k)) -------------------------------------------------------------------------------- /zadanie_12/12-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (В.Ю. Беспалова) Чертёжник находился в начале координат. Ему был дан для исполнения следующий алгоритм: 3 | Сместиться на (-5, 15) 4 | Повтори 4 раза 5 | Сместиться на (5, 1) 6 | Сместиться на (a, b) 7 | конец 8 | Сместиться на (90, 4) 9 | Найдите целые значения a и b, для которых после выполнения программы Чертёжник окажется в точке (5; 3). В ответе запишите произведение этих чисел. 10 | ''' 11 | for a in range(-100, 100): 12 | for b in range(-100, 100): 13 | if (-5 + 4 * (5 + a) + 90) == 5 and (15 + 4 * (1 + b) + 4) == 3: 14 | print(a * b) -------------------------------------------------------------------------------- /zadanie_15/15-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Укажите наименьшее целое значение А, при котором выражение 3 | (3y + x < A) ∨ (x > 12) ∨ (y > 15) 4 | истинно для любых целых положительных значений x и y. 5 | ''' 6 | def f(x, y, a): 7 | return (3 * y + x < a) or (x > 12) or (y > 15) 8 | 9 | for a in range(0, 1000): 10 | flag = True 11 | for x in range(0, 1000): 12 | for y in range(0, 1000): 13 | if not(f(x, y, a)): 14 | flag = False 15 | break 16 | if not(flag): 17 | break 18 | if flag: 19 | print(a) 20 | break 21 | -------------------------------------------------------------------------------- /zadanie_16/16-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = 1, при n < 2, 4 | F(n) = F(n/3) + 1, когда n ≥ 2 и делится на 3, 5 | F(n) = F(n - 2) + 5, когда n ≥ 2 и не делится на 3. 6 | Назовите количество значений n на отрезке [1;100000], для которых F(n) равно 55. 7 | ''' 8 | s = 100000 * [0] 9 | for n in range(len(s)): 10 | if n < 2: 11 | s[n] = 1 12 | else: 13 | if n % 3 == 0: 14 | s[n] = s[n // 3] + 1 15 | else: 16 | s[n] = s[n - 2] + 5 17 | 18 | print(s.count(55)) -------------------------------------------------------------------------------- /zadanie_8/8-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Василий составляет 4-буквенные коды из букв Г, А, Ф, Н, И, Й. Каждую букву можно использовать любое количество раз, 3 | при этом код не может начинаться с буквы Й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий? 4 | ''' 5 | letters = 'гафний' 6 | k = 0 7 | for a in letters: 8 | for b in letters: 9 | for c in letters: 10 | for d in letters: 11 | word = a + b + c + d 12 | if word[0] != 'й' and (word.count('а') + word.count('и')) >= 1: 13 | k += 1 14 | print(k) -------------------------------------------------------------------------------- /zadanie_8/8-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Сколько существует различных четырёхзначных чисел, записанных в десятичной системе счисления в записи которых есть ровно 3 | две одинаковые цифры, причем стоящие рядом? 4 | ''' 5 | from itertools import product 6 | words = product('0123456789', repeat=4) #i -это количество символов в слове 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if word[0] != '0' and ((word[0] == word[1] and word.count(word[0]) == 2) or (word[1] == word[2] and word.count(word[1]) == 2) or (word[2] == word[3] and word.count(word[2]) == 2)): 11 | k += 1 12 | print(k) -------------------------------------------------------------------------------- /zadanie_15/15-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На числовой прямой даны отрезки A = [30; 62], B = [25; 38] и C = [40; N] и функция 3 | F(x) = ( (x  B)   (x  A) )  ( (x  C)  (x  B) ) 4 | При каком наименьшем числе N функция F(x) истинна более чем для 20 целых чисел x? 5 | ''' 6 | 7 | 8 | def f(x, n): 9 | return ((not(25 <= x <= 38)) <= (not(30 <= x <= 62))) and ((not(40 <= x <= n)) <= (25 <= x <= 38)) 10 | 11 | 12 | for n in range(1, 100): 13 | s = set() 14 | for x in range(1, 1000): 15 | if f(x, n): 16 | s.add(x) 17 | if len(s) > 20: 18 | print(n) 19 | break -------------------------------------------------------------------------------- /zadanie_16/16-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = 1, при n < 2, 4 | F(n) = F(n/3) + 1, когда n ≥ 2 и делится на 3, 5 | F(n) = F(n - 2) + 5, когда n ≥ 2 и не делится на 3. 6 | Назовите количество значений n на отрезке [1;100000], для которых F(n) равно 55. 7 | ''' 8 | s = [0] * 100000 9 | for i in range(len(s)): 10 | if i < 2: 11 | s[i] = 1 12 | else: 13 | if i % 3 == 0: 14 | s[i] = s[i//3] + 1 15 | else: 16 | s[i] = s[i-2] + 5 17 | print(s.count(55)) 18 | 19 | -------------------------------------------------------------------------------- /zadanie_16/16-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое неотрицательное число, задан следующими соотношениями: 3 | F(0) = 0; 4 | F(n) = F(n - 1) + 1, если n не кратно 3, 5 | F(n) = F(n / 3), если n > 0 и при этом n кратно 3. 6 | Укажите наибольшее значение функции F(n) при 1 200 000 000 <= n <= 1 600 000 000 7 | ''' 8 | s = [0] * 1600000000 9 | for i in range(len(s)): 10 | if i == 0: 11 | s[i] = 0 12 | else: 13 | if i % 3 == 0: 14 | s[i] = s[i//3] 15 | else: 16 | s[i] = s[i-1] + 1 17 | print(max(s[1200000000:])) 18 | -------------------------------------------------------------------------------- /zadanie_25/25-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [338472; 338494], числа, 3 | имеющие ровно 4 различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания 4 | ''' 5 | for i in range(338472, 338495): 6 | divs = set() 7 | for d in range(1, round(i**0.5) + 1): 8 | if i % d == 0: 9 | divs.add(d) 10 | divs.add(i // d) 11 | if len(divs) > 4: 12 | break 13 | if len(divs) == 4: 14 | print(sorted(list(divs))[-2:]) -------------------------------------------------------------------------------- /zadanie_25/25-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [194455; 194500], числа, имеющие 3 | ровно 4 различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в 4 | порядке возрастания. 5 | ''' 6 | for i in range(194455, 194501): 7 | divs = set() 8 | for d in range(1, round(i ** 0.5)+1): 9 | if i % d == 0: 10 | divs.add(d) 11 | divs.add(i // d) 12 | if len(divs) > 4: 13 | break 14 | if len(divs) == 4: 15 | print(sorted(list(divs))) -------------------------------------------------------------------------------- /zadanie_16/16-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | 4 | F(n) = 1, при n < 2, 5 | F(n) = F(n/3) - 1, когда n ≥ 2 и делится на 3, 6 | F(n) = F(n - 1) + 7, когда n ≥ 2 и не делится на 3. 7 | Назовите количество значений n на отрезке [1;100000], для которых F(n) равно 35. 8 | ''' 9 | s = 100000 * [0] 10 | for n in range(len(s)): 11 | if n < 2: 12 | s[n] = 1 13 | else: 14 | if n % 3 == 0: 15 | s[n] = s[n // 3] - 1 16 | else: 17 | s[n] = s[n - 1] + 7 18 | 19 | print(s.count(35)) -------------------------------------------------------------------------------- /zadanie_23/23-36.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Прибавить 3 6 | Программа для исполнителя Калькулятор – это последовательность команд. 7 | Сколько существует программ, состоящих из 7 команд, для которых при исходном числе 3 результатом является число 22? 8 | ''' 9 | def f(x, k): 10 | if x == 22 and k == 7: 11 | return 1 12 | elif x > 22: 13 | return 0 14 | return f(x + 1, k + 1) + f(x + 2, k + 1) + f(x + 3, k + 1) 15 | 16 | print(f(3, 0)) 17 | -------------------------------------------------------------------------------- /zadanie_23/23-33.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, для которых 6 | при исходном числе 3 результатом является число 30 и при этом траектория вычислений содержит число 20 и не содержит числа 12? 7 | ''' 8 | def f(x, y): 9 | if x > y or x == 12: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(x * 2, y) 14 | 15 | print(f(3, 20) * f(20, 30)) -------------------------------------------------------------------------------- /zadanie_23/23-37.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 2 6 | Программа для исполнителя Калькулятор – это последовательность команд. 7 | Сколько существует программ, состоящих из 6 команд, для которых при исходном числе 1 результатом является число 20? 8 | 9 | ''' 10 | def f(x, k): 11 | if x == 20 and k == 6: 12 | return 1 13 | elif x > 20: 14 | return 0 15 | return f(x + 1, k + 1) + f(x + 2, k + 1) + f(x * 2, k + 1) 16 | 17 | print(f(1, 0)) 18 | -------------------------------------------------------------------------------- /zadanie_23/23-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор три команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. прибавь 2 5 | 3. прибавь предыдущее 6 | Первая команда увеличивает число на экране на 1, вторая увеличивает это число на 2, третья прибавляет к числу на экране 7 | число, меньшее на 1 (к числу 3 прибавляется 2, к числу 11 прибавляется 10 и т. д.). Сколько существует программ, которые число 2 преобразуют в число 9? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(x + 2, y) + f(x * 2 - 1, y) 15 | 16 | print(f(2, 9)) -------------------------------------------------------------------------------- /zadanie_23/23-32.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | 3. Умножить на 3 6 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, для которых 7 | при исходном числе 2 результатом является число 31, и при этом траектория вычислений не содержит число 25? 8 | ''' 9 | def f(x, y): 10 | if x > y or x == 25: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(x * 2, y) + f(x * 3, y) 15 | 16 | print(f(2, 31)) -------------------------------------------------------------------------------- /zadanie_23/23-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 3 6 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, 7 | для которых при исходном числе 2 результатом является число 16 и при этом траектория вычислений содержит число 14? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(x + 2, y) + f(x * 3, y) 15 | 16 | 17 | print(f(2, 14) * f(14, 16)) -------------------------------------------------------------------------------- /zadanie_23/23-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 2 6 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, для которых при 7 | исходном числе 3 результатом является число 13 и при этом траектория вычислений не содержит число 8? 8 | ''' 9 | def f(x, y): 10 | if x > y or x == 8: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(x + 2, y) + f(x * 2, y) 15 | 16 | 17 | print(f(3, 13)) -------------------------------------------------------------------------------- /zadanie_25/25-1.py: -------------------------------------------------------------------------------- 1 | """ 2 | (А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку 3 | [190201; 190220], числа, имеющие ровно 4 различных делителя. 4 | В ответе для каждого найденного числа запишите два его наибольших делителя в порядке убывания. 5 | """ 6 | for i in range(190201, 190221): 7 | divs = set() 8 | for d in range(1, round(i**0.5) + 1): 9 | if i % d == 0: 10 | divs.add(d) 11 | divs.add(i // d) 12 | if len(divs) > 4: 13 | break 14 | if len(divs) == 4: 15 | print(sorted(list(divs))[-2:]) 16 | -------------------------------------------------------------------------------- /zadanie_15/15-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Элементами множеств А, P, Q являются натуральные числа, причём P={1,3,4,9,11,13,15,17,19,21}, Q={3,6,9,12,15,18,21,24,27,30}. Известно, что выражение 3 | ((x ∈ P) → (x ∈ A)) ∨ ((x ∉ A) → (x ∉ Q)) 4 | истинно (т.е. принимает значение 1 при любом значении переменной х. Определите наименьшее возможное количество элементов в множестве A. 5 | ''' 6 | p = set([1, 3, 4, 9, 11, 13, 15, 17, 19, 21]) 7 | q = set([3, 6, 9, 12, 15, 18, 21, 24, 27, 30]) 8 | a = set() 9 | for x in range(-1000, 1000): 10 | if not(((x in p) <= (x in a)) or ((x not in a) <= (x not in q))): 11 | a.add(x) 12 | print(len(a)) -------------------------------------------------------------------------------- /zadanie_16/16-28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое неотрицательное число, задан следующими соотношениями: 3 | F(0) = 8 4 | F(n) = 5 + F(n / 3) если n > 0 и n делится на 3 5 | F(n) = F(n // 3) в остальных случаях 6 | Здесь // означает деление нацело. Определите количество значений n на отрезке [1, 100 000 000], для которых F(n) = 18. 7 | ''' 8 | s = 100000000 * [0] 9 | for n in range(len(s)): 10 | if n == 0: 11 | s[n] = 8 12 | else: 13 | if n % 3 == 0: 14 | s[n] = 5 + s[n // 3] 15 | else: 16 | s[n] = s[n // 3] 17 | 18 | print(s.count(18)) -------------------------------------------------------------------------------- /zadanie_25/25-2.py: -------------------------------------------------------------------------------- 1 | """ 2 | Найдите 5 чисел больших 500000, таких, что среди их делителей есть число, оканчивающееся на 8, при этом этот делитель 3 | не равен 8 и самому числу. В качестве ответа приведите 5 наименьших чисел, соответствующих условию. Формат вывода: 4 | для каждого из найденных чисел в отдельной строке запишите само число, а затем минимальный делитель, 5 | оканчивающийся на 8, не равный 8 и самому числу. 6 | """ 7 | for i in range(500000, 600000): 8 | for d in range(1, i): 9 | if i % d == 0: 10 | if d % 10 == 8 and d != 8: 11 | print(i, d) 12 | break 13 | -------------------------------------------------------------------------------- /zadanie_27/27-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, 3 | чтобы сумма всех выбранных чисел не делилась на 41 и при этом была максимально возможной. Гарантируется, что искомую сумму 4 | получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи. 5 | Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). 6 | Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000. 7 | ''' -------------------------------------------------------------------------------- /zadanie_17/17-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, которые удовлетворяют следующим условиям: 3 | − в числе есть хотя бы два нуля; 4 | − число кратно 7. 5 | Найдите наибольшее из таких чисел и их количество. 6 | ''' 7 | with open('../files/17/17-4.txt') as f: 8 | s = [int(x) for x in f] 9 | res = [] 10 | for i in s: 11 | if str(i).count('0') >= 2 and i % 7 == 0: 12 | res.append(i) 13 | print(max(res), len(res)) -------------------------------------------------------------------------------- /zadanie_23/23-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор две команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. умножь на 1,5 5 | Первая из них увеличивает на 1 число на экране, вторая увеличивает это число 6 | в 1,5 раза, если число чётное. К нечётным числам вторая команда неприменима. Сколько есть программ, которые число 1 преобразуют в число 20? 7 | ''' 8 | 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | else: 15 | if x % 2 == 0: 16 | return f(x * 1.5, y) + f(x + 1, y) 17 | else: 18 | return f(x + 1, y) 19 | print(f(1, 20)) -------------------------------------------------------------------------------- /zadanie_8/8-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Все 6-буквенные слова, составленные из букв А, О, И, Э, У, записаны в алфавитном порядке и пронумерованы. Вот начало списка: 3 | 1. АААААА 4 | 2. АААААИ 5 | 3. АААААО 6 | 4. АААААУ 7 | ... 8 | Под каким номером стоит последнее слово, начинающееся и заканчивающееся буквой О 9 | ''' 10 | letters = 'аиоуэ' 11 | s = [] 12 | for a in letters: 13 | for b in letters: 14 | for c in letters: 15 | for d in letters: 16 | for e in letters: 17 | for f in letters: 18 | s.append(a+b+c+d+e+f) 19 | print(s.index('оээээо') + 1) 20 | 21 | -------------------------------------------------------------------------------- /zadanie_23/23-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Июнь17 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Сделай нечётное 5 | Выполняя первую команду, исполнитель увеличивает число на 1, а выполняя вторую – из числа x получает число 2x+1. 6 | Сколько существует программ, для которых при исходном числе 1 результатом является число 31 и при этом траектория вычислений не содержит число 25? 7 | ''' 8 | def f(x, y): 9 | if x > y or x == 25: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(2 * x + 1, y) 14 | print(f(1, 31)) 15 | 16 | -------------------------------------------------------------------------------- /zadanie_25/25-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [244143; 1367821], числа, имеющие 3 | ровно 5 различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя, 4 | не равных самому числу, в порядке возрастания. 5 | ''' 6 | for i in range(244143, 1367822): 7 | divs = set() 8 | for d in range(1, round(i**0.5) + 1): 9 | if i % d == 0: 10 | divs.add(d) 11 | divs.add(i // d) 12 | if len(divs) > 5: 13 | break 14 | if len(divs) == 5: 15 | print(sorted(list(divs))[-3:-1]) -------------------------------------------------------------------------------- /zadanie_5/5-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N > 1 по следующему алгоритму: 3 | 1) Строится двоичная запись числа N. 4 | 2) В конец записи (справа) дописывается вторая справа цифра двоичной записи. 5 | 3) В конец записи (справа) дописывается вторая слева цифра двоичной записи. 6 | 4) Результат переводится в десятичную систему. 7 | 8 | Для скольких значений N в результате работы алгоритма получится число, принадлежащее отрезку [150; 250]? 9 | ''' 10 | k = 0 11 | for n in range(2, 1000): 12 | s = bin(n)[2:] 13 | s += s[-2] 14 | s += s[1] 15 | if 150 <= int(s, 2) <= 250: 16 | k += 1 17 | print(k) -------------------------------------------------------------------------------- /zadanie_15/15-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наименьшего натурального числа А формула 3 | ДЕЛ(x, A) → (ДЕЛ(x, 14) ∧ ДЕЛ(x, 21)) 4 | тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)? 5 | ''' 6 | def f(x, a): 7 | return (x % a == 0) <= ((x % 14 == 0) and (x % 21 == 0)) 8 | 9 | for a in range(1, 1000): 10 | flag = True 11 | for x in range(1, 1000): 12 | if not(f(x, a)): 13 | flag = False 14 | break 15 | if flag: 16 | print(a) 17 | break -------------------------------------------------------------------------------- /zadanie_23/23-34.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Прибавить 2 5 | 3. Умножить на 3 6 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, для которых 7 | при исходном числе 2 результатом является число 15, и при этом траектория вычислений содержит числа 4 и 11? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(x + 2, y) + f(x * 3, y) 15 | 16 | print(f(2, 4) * f(4, 11) * f(11, 15)) 17 | -------------------------------------------------------------------------------- /zadanie_23/23-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Вычти 8 4 | 2. Раздели нацело на 2 5 | Первая команда уменьшает число на 8, вторая – вдвое. Программа для исполнителя – это последовательность команд. 6 | Сколько существует таких программ, которые исходное число 102 преобразуют в число 5 и при этом траектория вычислений программы содержит число 43? 7 | ''' 8 | def f(x, y): 9 | if x < y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x - 8, y) + f(x // 2, y) 14 | 15 | print(f(102, 43) * f(43, 5)) -------------------------------------------------------------------------------- /zadanie_24/24-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-157.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (A..Z). 3 | Определите максимальное количество идущих подряд символов, среди которых нет сочетания стоящих рядом букв P и R (в любом порядке). 4 | ''' 5 | with open('../files/24/24-157.txt') as f: 6 | s = f.readline() 7 | k, kmax = 1, 0 8 | for i in range(1, len(s)): 9 | if (s[i] == 'P' and s[i - 1] == 'R') or (s[i] == 'R' and s[i - 1] == 'P'): 10 | k = 1 11 | else: 12 | k += 1 13 | kmax = max(k, kmax) 14 | print(kmax) 15 | 16 | -------------------------------------------------------------------------------- /zadanie_16/16-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 1000000. 3 | Запишите в ответе сначала найденное значение n, а затем через пробел – соответствующую сумму выведенных чисел. 4 | Python 5 | def F( n ): 6 | print(n+1) 7 | if n > 1: 8 | print(n+5) 9 | F(n-1) 10 | F(n-2) 11 | ''' 12 | def f(n): 13 | global s 14 | s += (n + 1) 15 | if n > 1: 16 | s += (n + 5) 17 | f(n-1) 18 | f(n-2) 19 | 20 | for n in range(10000): 21 | s = 0 22 | f(n) 23 | if s > 1000000: 24 | break 25 | print(n, s) 26 | -------------------------------------------------------------------------------- /zadanie_23/23-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Тренер преобразует число на экране. 3 | У исполнителя есть две команды, которым присвоены номера: 4 | 1. Прибавить 1 5 | 2. Умножить на 2 6 | Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Тренер— это последовательность команд. 7 | Сколько существует программ, которые преобразуют исходное число 1 в число 40 и при этом траектория вычислений содержит числа 12 и 25? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | if x == y: 13 | return 1 14 | return f(x + 1, y) + f(x * 2, y) 15 | print(f(1, 12) * f(12, 25) * f(25, 40)) -------------------------------------------------------------------------------- /zadanie_23/23-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор две команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. увеличь число десятков на 1 5 | Например, при помощи команды 2 число 23 преобразуется в 33. Если перед выполнением команды 2 вторая с конца цифра равна 6 | 9, она не изменяется. Сколько есть программ, которые число 10 преобразуют в число 33? 7 | ''' 8 | 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | else: 15 | if str(x)[-2] == '9': 16 | return f(x + 1, y) 17 | else: 18 | return f(x + 1, y) + f(x + 10, y) 19 | print(f(10, 33)) 20 | -------------------------------------------------------------------------------- /zadanie_23/23-35.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, для которых 6 | при исходном числе 3 результатом является число 20, предпоследней командой которых является команда «1»? 7 | ''' 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | return f(x + 1, y) + f(x * 2, y) 14 | 15 | print(f(3, 18) + f(3, 9)) # Т.к. предпоследняя команда +1, то 18 +1 +1 = 20, (9+1) * 2 = 20 -------------------------------------------------------------------------------- /zadanie_5/5-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N > 1 по следующему алгоритму: 3 | 1) Строится двоичная запись числа N. 4 | 2) В конец записи (справа) дописывается вторая справа цифра двоичной записи. 5 | 3) В конец записи (справа) дописывается вторая слева цифра двоичной записи. 6 | 4) Результат переводится в десятичную систему. 7 | При каком наименьшем числе N в результате работы алгоритма получится R > 210? В ответе запишите это число в десятичной системе счисления. 8 | ''' 9 | for n in range(2, 200): 10 | s = bin(n)[2:] 11 | s += s[-2] 12 | s += s[1] 13 | if int(s, 2) > 210: 14 | print(n) 15 | break -------------------------------------------------------------------------------- /zadanie_5/5-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N > 1 по следующему алгоритму. 3 | 1. Строится двоичная запись числа N. 4 | 2. Последняя цифра двоичной записи удаляется. 5 | 3. Если исходное число N было нечётным, в конец записи (справа) дописываются цифры 10, если чётным— 01. 6 | 4. Результат переводится в десятичную систему и выводится на экран. 7 | 8 | Какое число нужно ввести в автомат, чтобы в результате получилось 2018? 9 | ''' 10 | for n in range(1, 10000): 11 | s = bin(n)[2:-1] 12 | if n % 2: 13 | s += '10' 14 | else: 15 | s += '01' 16 | if int(s, 2) == 2018: 17 | print(n) 18 | 19 | -------------------------------------------------------------------------------- /zadanie_16/16-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 3 4 | при n > 3: 5 | F(n) = 2*n + F(n–1), при чётном n; 6 | F(n) = n*n + F(n-2), при нечётном n; 7 | Определите количество натуральных значений n на отрезке [1; 100], при которых F(n) кратно 3. 8 | ''' 9 | def f(n): 10 | if n <= 3: 11 | return n 12 | else: 13 | if n % 2 == 0: 14 | return 2 * n + f(n - 1) 15 | else: 16 | return n * n + f(n - 2) 17 | 18 | k = 0 19 | for n in range(1, 101): 20 | if f(n) % 3 == 0: 21 | k += 1 22 | print(k) -------------------------------------------------------------------------------- /zadanie_17/17-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-7.txt содержится последовательность целых чисел. Элементы последовательности могут принимать значения от 0 до 200 включительно. 3 | Рассматривается множество элементов последовательности, которые удовлетворяют следующему условию: 4 | число в шестнадцатеричной записи оканчивается на 9, но не оканчивается на A9. Найдите количество таких чисел и максимальное из них. 5 | ''' 6 | with open('../files/17/17-7.txt') as f: 7 | s = [int(x) for x in f] 8 | numbers = [] 9 | for c in s: 10 | if c % 16 == 9 and (c // 16) % 16 != 10: 11 | numbers.append(int(c)) 12 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_16/16-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 3 4 | при n > 3: 5 | F(n) = 2*n*n + F(n–1), при чётном n; 6 | F(n) = n*n*n + n + F(n–1), при нечётном n; 7 | Определите количество натуральных значений n, при которых F(n) меньше, чем 10**7. 8 | ''' 9 | s = [0] * 10 ** 5 10 | for i in range(len(s)): 11 | if i <= 3: 12 | s[i] = i 13 | else: 14 | if i % 2: 15 | s[i] = i * i * i + i + s[i - 1] 16 | else: 17 | s[i] = 2 * i * i + s[i - 1] 18 | count = len([n for n in s if 1 <= n < 10 ** 7]) 19 | print(count) -------------------------------------------------------------------------------- /zadanie_8/8-28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Сергей составляет 6-буквенные коды из букв С, О, Л, О, В, Е, Й. Буква Й может использоваться в коде не более одного раза, 3 | при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Е. Все остальные буквы могут встречаться 4 | произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Сергей? 5 | ''' 6 | from itertools import product 7 | words = product('соловей', repeat=6) 8 | k = 0 9 | for w in words: 10 | word = ''.join(w) 11 | if word.count('й') <= 1 and word[0] != 'й' and word[-1] != 'й' and 'йе' not in word and 'ей' not in word: 12 | k += 1 13 | print(k) -------------------------------------------------------------------------------- /zadanie_16/16-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 3 4 | при n > 3: 5 | F(n) = n + 3 + F(n–1), при чётном n; 6 | F(n) = n*n + F(n-2), при нечётном n; 7 | Определите количество натуральных значений n на отрезке [1; 1000], при которых F(n) кратно 7. 8 | ''' 9 | def f(n): 10 | if n <= 3: 11 | return n 12 | else: 13 | if n % 2 == 0: 14 | return n + 3 + f(n - 1) 15 | else: 16 | return n * n + f(n - 2) 17 | 18 | k = 0 19 | for n in range(1, 1001): 20 | if f(n) % 7 == 0: 21 | k += 1 22 | print(k) 23 | -------------------------------------------------------------------------------- /zadanie_23/23-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (демо- 2022). Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя – 6 | это последовательность команд. Сколько существует программ, для которых при исходном числе 1 результатом является число 20, и при этом траектория вычислений содержит 7 | число 10? 8 | ''' 9 | def f(a, b): 10 | if a > b: 11 | return 0 12 | elif a == b: 13 | return 1 14 | else: 15 | return f(a + 1, b) + f(a * 2, b) 16 | print(f(1, 10) * f(10, 20)) -------------------------------------------------------------------------------- /zadanie_24/24-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-1.txt состоит не более чем из 106 символов - заглавных латинских букв и цифр. Определите максимальное 3 | нечётное число, записанное в этом файле. Под числом подразумевается последовательность цифр, ограниченная другими символами (не цифрами). 4 | ''' 5 | with open('../files/24/24-1.txt') as f: 6 | s = f.readline() 7 | s1 = '' # строка из нечетных цифр 8 | numbers = [] 9 | for c in s: 10 | if c.isdigit(): 11 | s1 += c 12 | numbers.append(s1) 13 | else: 14 | s1 = '' 15 | print(numbers) 16 | print(max([int(i) for i in numbers if int(i) % 2])) 17 | -------------------------------------------------------------------------------- /zadanie_8/8-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Игорь составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. 3 | В качестве кодовых слов Игорь использует 4-буквенные слова, в которых есть только буквы A, B, C, D, X, причём буква X появляется ровно 1 раз. 4 | Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. 5 | Сколько различных кодовых слов может использовать Игорь? 6 | ''' 7 | from itertools import product 8 | words = product('abcdx', repeat=4) 9 | k = 0 10 | for w in words: 11 | word = ''.join(w) 12 | if word.count('x') == 1: 13 | k += 1 14 | print(k) -------------------------------------------------------------------------------- /zadanie_12/12-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | ПОКА нашлось (555) ИЛИ нашлось (888) 4 | заменить (555, 8) 5 | заменить (888, 55) 6 | КОНЕЦ ПОКА 7 | Известно, что начальная строка состоит более чем из 200 цифр 5 и не содержит других символов. 8 | В ходе работы алгоритма получилась строка, содержащая больше цифр 8, чем цифр 5. Укажите минимальную возможную длину входной строки. 9 | ''' 10 | for i in range(201, 1000): 11 | s = i * '5' 12 | while '555' in s or '888' in s: 13 | s = s.replace('555', '8', 1) 14 | s = s.replace('888', '55', 1) 15 | if s.count('8') > s.count('5'): 16 | print(i) 17 | break -------------------------------------------------------------------------------- /zadanie_12/12-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | НАЧАЛО 4 | ПОКА нашлось (12) ИЛИ нашлось (1) 5 | ЕСЛИ нашлось (12) 6 | ТО заменить (12, 2221) 7 | ИНАЧЕ заменить (1,222222) 8 | КОНЕЦ ЕСЛИ 9 | КОНЕЦ ПОКА 10 | КОНЕЦ 11 | Какая строка получится в результате применения приведённой ниже программы к строке, состоящей одной единицы 12 | и 51 стоящих справа от неё цифр 2? В ответ, запишите, сколько цифр 2 будет в конечной строке. 13 | ''' 14 | s = '1' + 51 * '2' 15 | while '12' in s or '1' in s: 16 | if '12' in s: 17 | s = s.replace('12', '2221', 1) 18 | else: 19 | s = s.replace('1', '222222', 1) 20 | print(s.count('2')) -------------------------------------------------------------------------------- /zadanie_16/16-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 3 4 | при n > 3: 5 | F(n) = F(n–1) + 2*F(n/2), при чётном n; 6 | F(n) = F(n–1) + F(n-3), при нечётном n; 7 | Определите количество натуральных значений n, при которых F(n) меньше, чем 10**8. 8 | ''' 9 | s = [0] * 10 ** 5 10 | for i in range(len(s)): 11 | if i <= 3: 12 | s[i] = i 13 | else: 14 | if i % 2: 15 | s[i] = s[i - 1] + s[i - 3] 16 | else: 17 | s[i] = s[i - 1] + 2 * s[i // 2] 18 | count = len([n for n in s if 1 <= n < 10 ** 8]) 19 | print(count) 20 | 21 | -------------------------------------------------------------------------------- /zadanie_24/24-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-191.txt содержит строку из заглавных латинских букв, всего не более чем из 106 символов. 3 | Определите количество подстрок длиной не менее 20 символов, которые начинаются буквой A, содержат ровно две буквы F, 4 | заканчиваются буквой B и не содержат других букв A и B, кроме первой и последней. 5 | ''' 6 | with open('../files/24/24-191.txt') as f: 7 | s = f.readline() 8 | k = 0 9 | s = s.replace('A', '*A') 10 | s = s.replace('B', 'B*') 11 | pods = s.split('*') 12 | for c in pods: 13 | if c.count('F') == 2 and c[0] == 'A' and c[-1] == 'B' and len(c) > 19: 14 | k += 1 15 | print(k) -------------------------------------------------------------------------------- /zadanie_12/12-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | ПОКА нашлось (555) ИЛИ нашлось (888) 4 | заменить (555, 8) 5 | заменить (888, 55) 6 | КОНЕЦ ПОКА 7 | Известно, что начальная строка состоит более чем из 300 цифр 5 и не содержит других символов. 8 | В ходе работы алгоритма получилась строка, содержащая больше цифр 5, чем цифр 8. 9 | Укажите минимальную возможную длину входной строки. 10 | ''' 11 | for i in range(301, 500): 12 | s = i * '5' 13 | while '555' in s or '888' in s: 14 | s = s.replace('555', '8', 1) 15 | s = s.replace('888', '55', 1) 16 | if s.count('5') > s.count('8'): 17 | print(i) 18 | break -------------------------------------------------------------------------------- /zadanie_24/24-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Крылов) Текстовый файл состоит из символов арабских цифр. Определите максиммальное количество идущих подряд символов в 3 | прилагаемом файле, среди которых нет символов 1 и 2, а также 1 и 3, стоящих рядом. 4 | ''' 5 | with open('../files/24/24 варианты 1-4.txt') as f: 6 | s = f.readline() 7 | k, kmax = 1, 0 8 | for i in range(1, len(s)): 9 | if (s[i] == '1' and s[i - 1] == '2') or (s[i] == '1' and s[i - 1] == '3') or (s[i] == '2' and s[i - 1] == '1') or (s[i] == '3' and s[i - 1] == '1'): 10 | k = 1 11 | else: 12 | k += 1 13 | kmax = max(k, kmax) 14 | print(kmax) 15 | 16 | -------------------------------------------------------------------------------- /zadanie_24/24-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл содержит строки различной длины. Общий объём файла не превышает 1 Мбайт. Строки содержат только заглавные 3 | буквы латинского алфавита (ABC…Z). 4 | В строках, содержащих менее 25 букв A, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке. 5 | ''' 6 | with open('../files/24/inf_26_04_21_24.txt') as f: 7 | maximum = 0 8 | for a in f: 9 | if a.count('A') < 25: 10 | for i in a: 11 | difference = abs(a.find(i) - a.rfind(i)) #find находит минимальный индекс, rfind — максимальный 12 | maximum = max(maximum, difference) 13 | print(maximum) -------------------------------------------------------------------------------- /zadanie_5/5-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом: 3 | 1. Строится двоичная запись числа N. 4 | 2. В конец записи (справа) дописывается вторая справа цифра двоичной записи. 5 | 3. В конец записи (справа) дописывается вторая слева цифра двоичной записи. 6 | 4. Результат переводится в десятичную систему. 7 | При каком наименьшем числе N в результате работы алгоритма получится R > 150? В ответе запишите это число в десятичной системе счисления. 8 | ''' 9 | for n in range(2, 1000): 10 | s = bin(n)[2:] 11 | s += s[-2] 12 | s += s[1] 13 | if int(s, 2) > 150: 14 | print(n) 15 | break -------------------------------------------------------------------------------- /zadanie_8/8-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Куканова) Лиля составляет 5-буквенные слова из букв С, О, Т, К, А, П, Л, З. Слово не должно заканчиваться на гласную 3 | и содержать сочетания ЗЛО. Буквы в слове не повторяются. Сколько слов может составить Лиля? 4 | ''' 5 | from itertools import product 6 | words = product('соткаплз', repeat=5) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if 'зло' not in word and word[-1] not in 'оа' and word.count('с') <= 1 and word.count('о') <= 1 and word.count('т') <= 1 and \ 11 | word.count('к') <= 1 and word.count('а') <= 1 and word.count('п') <= 1 and word.count('л') <= 1 and word.count('з') <= 1: 12 | k += 1 13 | print(k) -------------------------------------------------------------------------------- /zadanie_8/8-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А.М. Кабанов) Алексей составляет 5-буквенные слова из букв М, А, Г, И, С, Т, Р. Каждую букву можно использовать не более 3 | одного раза, при этом в слове нельзя использовать более одной гласной. Сколько различных кодов может составить Алексей? 4 | ''' 5 | from itertools import product 6 | words = product('магистр', repeat=5) 7 | k = 0 8 | for w in words: 9 | word = ''.join(w) 10 | if (word.count('а') + word.count('и')) <= 1 and word.count('м') <= 1 and word.count('а') <= 1 \ 11 | and word.count('г') <= 1 and word.count('и') <= 1 and word.count('с') <= 1 and word.count('т') <= 1 and word.count('р') <= 1: 12 | k += 1 13 | print(k) -------------------------------------------------------------------------------- /zadanie_23/23-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Вычесть 1 4 | 2. Убрать последнюю цифру справа 5 | Первая команда уменьшает число на 1. Вторая команда убирает последнюю справа цифру, например, для числа 110 результатом работы данной команды будет являться число 11. 6 | Сколько существует программ, которые исходное двоичное число 110111 преобразуют в двоичное число 110? 7 | ''' 8 | def f(x, y): 9 | if x < y: 10 | return 0 11 | if x == y: 12 | return 1 13 | return f(x - 1, y) + f(x // 2, y) 14 | 15 | print(f(int('110111', 2), int('110', 2))) -------------------------------------------------------------------------------- /zadanie_17/17-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. 3 | Рассматривается множество элементов последовательности, которые удовлетворяют следующим условиям: 4 | − остаток от деления на 13 равен 4; 5 | − остаток от деления на 8 равен 1. 6 | Найдите наибольшее из таких чисел и их сумму. Гарантируется, что искомая сумма не превосходит 10**7. 7 | ''' 8 | with open('../files/17/17-4.txt') as f: 9 | s = [int(x) for x in f] 10 | n = [] 11 | for c in s: 12 | if c % 13 == 4 and c % 8 == 1: 13 | n.append(c) 14 | print(max(n), sum(n)) 15 | -------------------------------------------------------------------------------- /zadanie_23/23-30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | У исполнителя Калькулятор две команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. увеличь каждый разряд числа на 1 5 | Например, число 23 с помощью команды 2 превратится в 34 а 29 в 39 (так как младший разряд нельзя увеличить). 6 | Программа для Калькулятора – это последовательность команд. Сколько существует программ, которые число 26 преобразуют в число 49? 7 | ''' 8 | def f(x, y): 9 | if x > y: 10 | return 0 11 | elif x == y: 12 | return 1 13 | else: 14 | if str(x)[-1] == '9': 15 | return f(x + 1, y) + f(x + 10, y) 16 | else: 17 | return f(x + 1, y) + f(x + 11, y) 18 | 19 | print(f(26, 49)) -------------------------------------------------------------------------------- /zadanie_24/24-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). 3 | Текст разбит на строки различной длины. В строках, содержащих менее 15 букв G, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке. 4 | ''' 5 | with open('../files/24/24-164.txt') as f: 6 | maximum = 0 7 | for s in f: 8 | if s.count('G') < 15: 9 | slovar = {} 10 | for c in s: 11 | slovar[c] = slovar.get(c, 0) + 1 12 | for i in slovar.keys(): 13 | maximum = max(maximum, s.rindex(i)-s.index(i)) 14 | print(maximum) 15 | -------------------------------------------------------------------------------- /zadanie_15/15-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А.М. Кабанов) Для какого наибольшего целого неотрицательного числа А выражение 3 | (x**2 – 11x + 28 > 0) ∨ (y**2 – 9y + 14 > 0) ∨ (x**2 + y**2 > A) 4 | тождественно истинно, т.е. принимает значение 1 при любых целых положительных x и y? 5 | ''' 6 | def f(x, y, a): 7 | return (x ** 2 - 11 * x + 28 > 0) or (y ** 2 - 9 * y + 14 > 0) or (x ** 2 + y ** 2 > a) 8 | 9 | for a in range(0, 1000): 10 | flag = True 11 | for x in range(0, 1000): 12 | for y in range(0, 1000): 13 | if not(f(x, y, a)): 14 | flag = False 15 | break 16 | if not(flag): 17 | break 18 | if flag: 19 | print(a) 20 | -------------------------------------------------------------------------------- /zadanie_16/16-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 1, 4 | F(n) = n + F(n / 3), когда n > 1 и делится на 3, 5 | F(n) = n + F(n + 3) , когда n > 1 и не делится на 3. 6 | Назовите минимальное значение n, для которого F(n) > 100. 7 | ''' 8 | def f(n): 9 | if n <= 1: 10 | return n 11 | else: 12 | if n % 3 == 0: 13 | return n + f(n / 3) 14 | else: 15 | return n + f(n + 3) 16 | 17 | for n in range(1, 1000): 18 | try: 19 | if f(n) > 100: 20 | print(n) 21 | break 22 | except RecursionError: 23 | pass 24 | 25 | -------------------------------------------------------------------------------- /zadanie_17/17-7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, которые оканчиваются 4 | на 5 или 7 и при этом не делятся ни на 9, ни на 11. Найдите количество таких чисел и сумму минимального и 5 | максимального из них. 6 | ''' 7 | with open('../files/17/17-4.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in s: 11 | if (i % 10 == 5 or i % 10 == 7) and i % 9 != 0 and i % 11 != 0: 12 | numbers.append(i) 13 | print(len(numbers), min(numbers) + max(numbers)) 14 | -------------------------------------------------------------------------------- /zadanie_23/23-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Добавить слева 1 5 | Первая команда увеличивает число на 1. Вторая команда приписывает к двоичному числу слева 1, например, для числа 10 результатом работы данной команды будет являться число 110. 6 | Сколько существует программ, которые исходное двоичное число 1 преобразуют в двоичное число 11111? 7 | ''' 8 | 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(int('1' + bin(x)[2:], 2), y) 15 | 16 | print((f(1, 32))) 17 | 18 | -------------------------------------------------------------------------------- /zadanie_5/5-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N по следующему алгоритму. 3 | 1. Строится двоичная запись числа N. 4 | 2. Если N четное, то в конец полученной записи (справа) дописывается 0, в начало— 1; если N— нечётное в конец и начало дописывается по две единицы. 5 | 3. Результат переводится в десятичную систему и выводится на экран. 6 | Укажите наименьшее число, большее 52, которое может является результатом работы автомата. 7 | ''' 8 | s = [] 9 | for n in range(1, 100): 10 | x = bin(n)[2:] 11 | if n % 2 == 0: 12 | x = '1' + x + '0' 13 | else: 14 | x = '11' + x + '11' 15 | if int(x, 2) > 52: 16 | s.append(int(x, 2)) 17 | print(min(s)) 18 | -------------------------------------------------------------------------------- /zadanie_16/16-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 1, 4 | F(n) = n + F(n / 3), когда n > 1 и делится на 3, 5 | F(n) = n + F(n + 3) , когда n > 1 и не делится на 3. 6 | Назовите минимальное значение n, для которого F(n) определено и больше 100. 7 | ''' 8 | def f(n): 9 | if n <= 1: 10 | return n 11 | else: 12 | if n % 3 == 0: 13 | return n + f(n / 3) 14 | else: 15 | return n + f(n + 3) 16 | 17 | for n in range(1, 1000): 18 | try: 19 | if f(n) > 100: 20 | print(n) 21 | break 22 | except BaseException: 23 | pass 24 | -------------------------------------------------------------------------------- /zadanie_15/15-1.py: -------------------------------------------------------------------------------- 1 | """ 2 | (В.Н. Шубинкин) Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». 3 | Для какого наибольшего натурального числа A формула 4 | ((ДЕЛ(x, 36) ∧ ДЕЛ(x, 42)) → ДЕЛ(x, A)) ∧ ( A·(A – 25) < 25·(A + 200)) 5 | тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)? 6 | """ 7 | def f(x, a): 8 | return (((x % 36 == 0) and (x % 42 == 0)) <= (x % a == 0)) and (a *(a - 25) < 25 * (a + 200)) 9 | 10 | for a in range(1, 1000): 11 | answer = True 12 | for x in range(1, 1000): 13 | if not(f(x, a)): 14 | answer = False 15 | break 16 | if answer: 17 | print(a) -------------------------------------------------------------------------------- /zadanie_15/15-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Сколько существует натуральных значений A на отрезке [1;1000], при которых формула 3 | ДЕЛ(A, 12) ∧ (ДЕЛ(530, x) → (¬ДЕЛ(A, x) → ¬ДЕЛ(170, x))) 4 | тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)? 5 | ''' 6 | def f(x, a): 7 | return (a % 12 == 0) and ((530 % x == 0) <= ((a % x != 0) <= (170 % x != 0))) 8 | 9 | k = 0 10 | for a in range(1, 1001): 11 | flag = True 12 | for x in range(1, 1001): 13 | if not(f(x, a)): 14 | flag = False 15 | break 16 | if flag: 17 | k += 1 18 | print(k) -------------------------------------------------------------------------------- /zadanie_16/16-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 1, 4 | F(n) = n + F(n/3 – 1), когда n > 1 и делится на 3, 5 | F(n) = n + F(n + 3) , когда n > 1 и не делится на 3. 6 | Назовите минимальное значение n, для которого F(n) определено и больше 1000. 7 | ''' 8 | def f(n): 9 | if n <= 1: 10 | return n 11 | else: 12 | if n % 3 == 0: 13 | return n + f(n / 3 - 1) 14 | else: 15 | return n + f(n + 3) 16 | 17 | for n in range(1, 10000): 18 | try: 19 | if f(n) > 1000: 20 | print(n) 21 | break 22 | except BaseException: 23 | pass -------------------------------------------------------------------------------- /zadanie_17/17-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, которые 4 | удовлетворяют следующим условиям: 5 | − кратны 3, но не кратны 9; 6 | − последняя цифра не менее 4. 7 | Найдите количество таких чисел и целую часть их среднего арифметического. 8 | ''' 9 | with open('../files/17/17-4.txt') as f: 10 | s = [int(x) for x in f] 11 | numbers = [] 12 | for i in s: 13 | if i % 3 == 0 and i % 9 != 0 and i % 10 >= 4: 14 | numbers.append(i) 15 | print(len(numbers), sum(numbers) // len(numbers)) 16 | -------------------------------------------------------------------------------- /zadanie_25/25-3.py: -------------------------------------------------------------------------------- 1 | """ 2 | (Л. Шастин) Среди чисел, больших 520000, найти такие, сумма всех делителей которых, не считая единицы и 3 | самого числа, образует число-палиндром (например, число 1221: если его «перевернуть», получается то же 4 | самое число). Вывести первые пять чисел, удовлетворяющих вышеописанному условию, справа от каждого числа 5 | вывести его максимальный делитель. 6 | """ 7 | for i in range(520000, 600000): 8 | divs = set() 9 | for d in range(2, round(i**0.5)+1): 10 | if i % d == 0: 11 | divs.add(d) 12 | divs.add(i // d) 13 | if len(divs) > 0: 14 | if str(sum(divs)) == str(sum(divs))[::-1]: 15 | print(i, max(divs)) 16 | 17 | 18 | -------------------------------------------------------------------------------- /zadanie_16/16-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями: 3 | F(n) = n, при n ≤ 5, 4 | F(n) = n + F(n/5 + 1), когда n > 5 и делится на 5, 5 | F(n) = n + F(n + 6) , когда n > 5 и не делится на 5. 6 | Назовите минимальное значение n, для которого F(n) определено и больше 1000. 7 | ''' 8 | def f(n): 9 | if n <= 5: 10 | return n 11 | else: 12 | if n % 5 == 0: 13 | return n + f(n/5 + 1) 14 | else: 15 | return n + f(n + 6) 16 | 17 | for n in range(1, 1000): 18 | try: 19 | if f(n) > 1000: 20 | print(n) 21 | break 22 | except BaseException: 23 | pass 24 | 25 | -------------------------------------------------------------------------------- /zadanie_12/12-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | НАЧАЛО 4 | ПОКА нашлось (111) 5 | заменить (111, 22) 6 | заменить (222, 11) 7 | КОНЕЦ ПОКА 8 | КОНЕЦ 9 | Известно, что исходная строка содержала более 70 единиц и не содержала других цифр. 10 | Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая максимально возможное количество единиц. 11 | ''' 12 | max = 0 13 | for i in range(71, 100): 14 | s = i * '1' 15 | while '111' in s: 16 | s = s.replace('111', '22', 1) 17 | s = s.replace('222', '11', 1) 18 | if s.count('1') > max: 19 | max = s.count('1') 20 | min_i = i 21 | print(min_i) 22 | -------------------------------------------------------------------------------- /zadanie_16/16-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n*n + 2*n + 1, при n > 25 4 | F(n) = 2*F(n+1) + F(n+3), при чётных n ≤ 25 5 | F(n) = F(n+2) + 3*F(n+5), при нечётных n ≤ 25 6 | Определите количество натуральных значений n из отрезка [1; 1000], для которых значение F(n) не содержит цифру 0. 7 | ''' 8 | def f(n): 9 | if n > 25: 10 | return n * n + 2 * n + 1 11 | else: 12 | if n % 2 == 0: 13 | return 2 * f(n + 1) + f(n + 3) 14 | else: 15 | return f(n + 2) + 3 * f(n + 5) 16 | 17 | k = 0 18 | for n in range(1, 1001): 19 | if '0' not in str(f(n)): 20 | k += 1 21 | print(k) -------------------------------------------------------------------------------- /zadanie_5/5-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Джобс) Автомат обрабатывает натуральное число N по следующему алгоритму. 3 | 1. Строится двоичная запись числа N. 4 | 2. Если N четное, то в конец полученной записи (справа) дописывается 0, в начало— 1; если N— нечётное в конец и начало дописывается по две единицы. 5 | 3. Результат переводится в десятичную систему и выводится на экран. 6 | 7 | Укажите наименьшее число, большее 52, которое может является результатом работы автомата. 8 | ''' 9 | numbers = [] 10 | for n in range(1, 1000): 11 | if n % 2 == 0: 12 | s = '1' + bin(n)[2:] + '0' 13 | else: 14 | s = '11' + bin(n)[2:] + '11' 15 | if int(s, 2) > 52: 16 | numbers.append(int(s, 2)) 17 | print(min(numbers)) -------------------------------------------------------------------------------- /zadanie_22/22-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Е. Джобс) Получив на вход натуральное число x, этот алгоритм печатает два числа: a и b. 3 | Сколько существует натуральных чисел, цифры в которых расположены в порядке невозрастания, при вводе которых алгоритм печатает сначала 9, а потом 5. 4 | ''' 5 | k = 0 6 | for i in range(1, 10000): 7 | x = i 8 | x = (x - x % 8) * 10 9 | a = 1 10 | b = 0 11 | while x > 0: 12 | if x % 2 != 0: 13 | a = a * (x % 4) 14 | else: 15 | b = b + (x % 4) 16 | x = x // 8 17 | if a == 9 and b == 5: 18 | x = str(i) 19 | for c in range(1, len(x)): 20 | if ord(x[c]) <= ord(x[c - 1]): 21 | k += 1 22 | print(k) 23 | -------------------------------------------------------------------------------- /zadanie_5/5-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 3 | 1) Строится восьмибитная двоичная запись числа N. 4 | 2) Инвертируются все разряды исходного числа (0 заменяется на 1, 1 на 0). 5 | 3) Полученное число переводится в десятичную систему счисления. 6 | 4) Из нового числа вычитается исходное, полученная разность выводится на экран. 7 | Для какого значения N результат работы алгоритма равен 45? 8 | ''' 9 | for n in range(1, 256): 10 | s = bin(n)[2:] 11 | s = (8 - len(s)) * '0' + s 12 | s1 = '' 13 | for x in s: 14 | if x == '1': 15 | s1 += '0' 16 | else: 17 | s1 += '1' 18 | if int(s1, 2) - n == 45: 19 | print(n) 20 | -------------------------------------------------------------------------------- /zadanie_15/15-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На числовой прямой даны два отрезка: P=[20,50] и Q=[10,60]. Определите наибольшую возможную длину отрезка A, 3 | при котором формула 4 | ((x ∈ P) → (x ∈ А)) ∧ ((x ∈ A) → (x ∈ Q)) 5 | тождественно истинна, то есть принимает значение 1 при любом значении переменной х. 6 | ''' 7 | def f(a1, a2, x): 8 | return ((20 <= x <= 50) <= (a1 <= x <= a2)) and ((a1 <= x <= a2) <= (10 <= x <= 60)) 9 | 10 | s = [] 11 | for a1 in range(-100, 100): 12 | for a2 in range(-100, 100): 13 | flag = True 14 | for x in range(-100, 100): 15 | if not(f(a1, a2, x)): 16 | flag = False 17 | break 18 | if flag: 19 | s.append(a2-a1) 20 | print(max(s)) -------------------------------------------------------------------------------- /zadanie_16/16-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n*n + 5*n + 4, при n > 30 4 | F(n) = F(n+1) + 3*F(n+4), при чётных n ≤ 30 5 | F(n) = 2*F(n+2) + F(n+5), при нечётных n ≤ 30 6 | Определите количество натуральных значений n из отрезка [1; 1000], для которых сумма цифр значения F(n) равна 27. 7 | ''' 8 | def f(n): 9 | if n > 30: 10 | return n * n + 5 * n + 4 11 | else: 12 | if n % 2 == 0: 13 | return f(n + 1) + 3 * f(n + 4) 14 | else: 15 | return 2 * f(n + 2) + f(n + 5) 16 | 17 | k = 0 18 | for n in range(1, 1001): 19 | if sum(map(int, str(f(n)))) == 27: 20 | k += 1 21 | print(k) -------------------------------------------------------------------------------- /zadanie_23/23-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя три команды, которым присвоены номера: 3 | 1. прибавь 1 4 | 2. прибавь 2 5 | 3. прибавь следующее 6 | Первая из них увеличивает число на экране на 1, вторая увеличивает это число на 2, а третья прибавляет к числу на экране 7 | число, большее на 1 (к числу 3 прибавляется 4, к числу 9 прибавляется 10 и т. д.). Программа для исполнителя 8 | Калькулятор– это последовательность команд. Сколько есть программ, которые число 2 преобразуют в число 10? 9 | ''' 10 | def f(x, y): 11 | if x > y: 12 | return 0 13 | elif x == y: 14 | return 1 15 | return f(x + 1, y) + f(x + 2, y) + f(x * 2 + 1, y) 16 | print(f(2, 10)) -------------------------------------------------------------------------------- /zadanie_17/17-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. 3 | Рассматривается множество элементов последовательности, больших 100, которые удовлетворяют следующим условиям: 4 | − цифра в разряде десятков не превышает 4; 5 | − цифра в разряде сотен принадлежит отрезку [3; 7]. 6 | Найдите количество таких чисел и минимальное из них. 7 | ''' 8 | with open('../files/17/17-4.txt') as f: 9 | s = [int(x) for x in f] 10 | numbers = [] 11 | for i in s: 12 | if i > 100 and str(i)[-2] in '01234' and str(i)[-3] in '34567': 13 | numbers.append(i) 14 | print(len(numbers), min(numbers)) 15 | -------------------------------------------------------------------------------- /zadanie_25/25-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все 3 | натуральные числа, принадлежащие отрезку [1523467; 4157812] и имеющие ровно три нетривиальных делителя. Для каждого 4 | найденного числа запишите в ответе два числа: само число и его наибольший нетривиальный делитель. Найденные числа 5 | расположите в порядке возрастания. 6 | ''' 7 | def prost(n): 8 | for i in range(2, n): 9 | if n % i == 0: 10 | return False 11 | return True 12 | 13 | for q4 in range(round((1523467**0.25)), round((4157812**0.25)) + 1): 14 | x = q4 ** 4 15 | if 1523467 <= x <= 4157812 and prost(q4): 16 | print(x, max([q4, q4**2, q4**3])) -------------------------------------------------------------------------------- /zadanie_17/17-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, которые 4 | удовлетворяют следующим условиям: 5 | − запись в троичной и пятеричной системах счисления заканчивается одинаковой цифрой; 6 | − кратны 31, 47 или 53. 7 | Найдите количество таких чисел и минимальное из них. 8 | ''' 9 | with open('../files/17/17-4.txt') as f: 10 | s = [int(x) for x in f] 11 | numbers = [] 12 | for i in s: 13 | if i % 5 == i % 3 and (i % 31 == 0 or i % 47 == 0 or i % 53 == 0): 14 | numbers.append(i) 15 | print(len(numbers), min(numbers)) -------------------------------------------------------------------------------- /zadanie_24/24-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл содержит только заглавные буквы латинского алфавита (ABC...Z). Определите максимальное количество идущих подряд символов, 3 | среди которых нет ни одной буквы E и при этом не менее трёх букв A. 4 | Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма. 5 | ''' 6 | with open('../files/24/24_40999.txt') as f: 7 | s = f.readline() 8 | k, kmax, kA = 0, 0, 0 9 | for c in s: 10 | if c == 'E': 11 | if kA >= 3: 12 | kmax = max(k, kmax) 13 | k, kA = 0, 0 14 | else: 15 | if c == 'A': 16 | kA += 1 17 | k += 1 18 | print(kmax) -------------------------------------------------------------------------------- /zadanie_15/15-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Введём выражение M & K, обозначающее поразрядную конъюнкцию M и K (логическое «И» между соответствующими битами двоичной записи). Определите наименьшее натуральное число A, такое что выражение 3 | (( (X & 13 ≠ 0) ∨ (X & A = 0)) → (X & 13 ≠ 0)) ∨ (X & A ≠ 0) ∨ (X & 39 = 0) 4 | тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)? 5 | ''' 6 | def f(x, a): 7 | return (((x & 13 != 0) or (x & a == 0)) <= (x & 13 != 0)) or (x & a != 0) or (x & 39 == 0) 8 | 9 | for a in range(1, 1000): 10 | flag = True 11 | for x in range(1, 1000): 12 | if not(f(x, a)): 13 | flag = False 14 | break 15 | if flag: 16 | print(a) 17 | break 18 | -------------------------------------------------------------------------------- /zadanie_17/17-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, для которых произведение элементов не кратно 34, 4 | затем максимальную из сумм элементов таких пар. 5 | В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/171717.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if (s[i] * s[j]) % 34 != 0: 13 | numbers.append(s[i] + s[j]) 14 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_17/17-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, у которых разность элементов кратна 60, 4 | затем максимальную из разностей элементов таких пар. 5 | В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/17_37371.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if (s[i] - s[j]) % 60 == 0: 13 | numbers.append(s[i] - s[j]) 14 | print(len(numbers), max(numbers)) 15 | -------------------------------------------------------------------------------- /zadanie_8/8-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алексей составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. 3 | В качестве кодовых слов Алексей использует 5-буквенные слова, в которых есть только буквы A, B, C, X, причём буква X 4 | может появиться на последнем месте или не появиться вовсе. Сколько различных кодовых слов может использовать Алексей? 5 | ''' 6 | letters = 'abcx' 7 | k = 0 8 | for a in letters: 9 | for b in letters: 10 | for c in letters: 11 | for d in letters: 12 | for e in letters: 13 | word = a + b + c + d + e 14 | if (word[-1] == 'x' and word.count('x') == 1) or word.count('x') == 0: 15 | k += 1 16 | print(k) -------------------------------------------------------------------------------- /zadanie_25/25-5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие 3 | ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти 4 | два делителя в таблицу на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в 5 | строке таблицы также должны следовать в порядке возрастания. 6 | ''' 7 | for i in range(174457, 174506): 8 | divs = set() 9 | for d in range(2, round(i ** 0.5)+1): 10 | if i % d == 0: 11 | divs.add(d) 12 | divs.add(i // d) 13 | if len(divs) > 2: 14 | break 15 | if len(divs) == 2: 16 | print(sorted(list(divs))) -------------------------------------------------------------------------------- /zadanie_16/16-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = 2*n*n + 4*n + 3, при n ≤ 15 4 | F(n) = F(n-1) + n*n + 3, при n > 15, кратных 3 5 | F(n) = F(n-2) + n - 6, при n > 15, не кратных 3 6 | Определите количество натуральных значений n из отрезка [1; 1000], для которых все цифры значения F(n) нечётные. 7 | ''' 8 | def f(n): 9 | if n <= 15: 10 | return 2 * n * n + 4 * n + 3 11 | else: 12 | if n % 3 == 0: 13 | return f(n - 1) + n * n + 3 14 | else: 15 | return f(n - 2) + n - 6 16 | 17 | k = 0 18 | for n in range(1, 1001): 19 | x = str(f(n)) 20 | if len(x) == len([i for i in x if int(i) % 2]): 21 | k += 1 22 | print(k) -------------------------------------------------------------------------------- /zadanie_25/25-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Пусть M(N) - пятый по величине делитель натурального числа N без учёта самого числа и единицы. 3 | Если у числа N меньше 5 различных делителей, не считая единицы и самого числа, считаем, что M(N) = 0. 4 | Найдите 5 наименьших натуральных чисел, превышающих 300 000 000, для которых M(N) > 0. 5 | В ответе запишите найденные значение M(N) в порядке возрастания соответствующих им чисел N. 6 | ''' 7 | i = 300000001 8 | k = 0 9 | while k != 5: 10 | divs = [] 11 | for d in range(2, round(i ** 0.5)): 12 | if i % d == 0: 13 | divs.append(d) 14 | if d != i // d: 15 | divs.append(i // d) 16 | divs.sort() 17 | if len(divs) >= 5: 18 | k += 1 19 | print(divs[-5]) 20 | i += 1 -------------------------------------------------------------------------------- /zadanie_23/23-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует число, записанное на экране в четверичной системе счисления. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 2 4 | 2. Прибавить 3 5 | 3. Добавить справа 0 6 | 7 | Сколько существует программ, которые число 1, записанное в четверичной системе счисления, преобразуют в четверичную запись 100? 8 | ''' 9 | def perevod(n): 10 | s = '' 11 | while n > 0: 12 | s += str(n % 4) 13 | n //= 4 14 | return s[::-1] 15 | 16 | def f(x, y): 17 | if x > y: 18 | return 0 19 | elif x == y: 20 | return 1 21 | 22 | return f(x + 2, y) + f(x + 3, y) + f(int(perevod(x) + '0', 4), y) 23 | 24 | a = int('1', 4) 25 | b = int('100', 4) 26 | print((f(a, b))) -------------------------------------------------------------------------------- /zadanie_5/5-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам. 3 | 1. Перемножаются первая и вторая, а также вторая и третья цифры. 4 | 2. Полученные два числа записываются друг за другом в порядке неубывания без разделителей. 5 | Пример. Исходное число: 631. Произведение: 6*3 = 18; 3*1 = 3. Результат: 318. 6 | Укажите наибольшее число, при обработке которого автомат выдаёт результат 621. 7 | ''' 8 | for x in range(100, 1000): 9 | s = str(x) 10 | summa1 = int(s[0]) * int(s[1]) 11 | summa2 = int(s[1]) * int(s[2]) 12 | if summa1 <= summa2: 13 | final = str(summa1) + str(summa2) 14 | else: 15 | final = str(summa2) + str(summa1) 16 | if final == '621': 17 | print(x) 18 | -------------------------------------------------------------------------------- /zadanie_17/17-10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-3.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от -10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов 4 | последовательности, произведение которых положительно, а сумма кратна 7, затем минимальное из произведений элементов 5 | таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-3.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(1, len(s)): 11 | if (s[i] * s[i - 1]) > 0 and (s[i] + s[i - 1]) % 7 == 0: 12 | numbers.append(s[i] * s[i - 1]) 13 | print(len(numbers), min(numbers)) 14 | -------------------------------------------------------------------------------- /zadanie_23/23-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Остаточек преобразует числа и имеет следующие команды: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | 3. Прибавить остаток от деления на 4 6 | Первая команда увеличивает число на единицу, вторая – увеличивает вдвое, третья команда добавляет к числу значение 7 | остатка от деления этого числа на 4. Определите, сколько существует чисел, из которых Остаточек может получить число 8 | 80 с помощью программы длиной не более 5 команд. 9 | ''' 10 | 11 | def f(x, k): 12 | global d 13 | if k == 5: 14 | d.add(x) 15 | else: 16 | f(x + 1, k + 1) 17 | f(x * 2, k + 1) 18 | f(x + x % 4, k + 1) 19 | kk = 0 20 | for i in range(1, 100): 21 | d = set() 22 | f(i, 0) 23 | if 80 in d: 24 | kk += 1 25 | print(kk) -------------------------------------------------------------------------------- /zadanie_24/24-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В текстовом файле k8.txt находится цепочка из не более чем 106 символов, в которую могут входить заглавные буквы 3 | латинского алфавита A…Z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов. 4 | Выведите сначала символ, из которого строится цепочка, а затем через пробел – длину этой цепочки. Если таких цепочек 5 | (максимальной длины) несколько, выведите информацию о первой встретившейся цепочке. 6 | ''' 7 | with open('../files/24/k8.txt') as f: 8 | s = f.readline() 9 | kmax, k, c = 1, 1, s[0] 10 | for i in range(1, len(s)): 11 | if s[i] == s[i-1]: 12 | k += 1 13 | if k > kmax: 14 | kmax = k 15 | c = s[i] 16 | else: 17 | k = 1 18 | print(c, kmax) 19 | -------------------------------------------------------------------------------- /zadanie_23/23-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавь 1 4 | 2. Прибавь 3 5 | 3. Умножь на 2 6 | Первая команда увеличивает число на экране на 1, вторая увеличивает его на 3, третья – умножает на 2. 7 | Программа для исполнителя – это последовательность команд. Сколько существует программ, которые преобразуют исходное число 3 в число 30 и при этом не содержат двух команд «Прибавить 1» подряд? 8 | ''' 9 | def f(x, y, p): 10 | if x > y: 11 | return 0 12 | if x == y: 13 | return 1 14 | if p == 0: 15 | return f(x + 1, y, 1) + f(x + 3, y, 0) + f(x * 2, y, 0) 16 | else: 17 | return f(x + 3, y, 0) + f(x * 2, y, 0) 18 | 19 | print(f(3, 30, 0)) -------------------------------------------------------------------------------- /zadanie_5/5-24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 3 | 1. Строится двоичная запись числа N без ведущих нулей. 4 | 2. Если в полученной записи единиц больше, чем нулей, то справа приписывается единица. Если нулей больше или нулей и единиц поровну, справа приписывается ноль. 5 | Полученная таким образом запись (в ней на один разряд больше, чем в записи исходного числа N) является двоичной записью искомого числа R. 6 | Какое наибольшее число, меньшее 90, может быть получено в результате работы автомата? 7 | ''' 8 | for n in range(1, 1000): 9 | s = bin(n)[2:] 10 | if s.count('1') > s.count('0'): 11 | s += '1' 12 | else: 13 | s += '0' 14 | if int(s, 2) < 90: 15 | print(int(s, 2)) -------------------------------------------------------------------------------- /zadanie_17/17-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Рассматривается множество целых чисел, принадлежащих числовому отрезку [5555; 7777], которые представляют собой произведение 3 | двух простых множителей, оканчивающихся на цифру 3. Найдите количество таких чисел и максимальное из них. 4 | В ответе запишите через пробел сначала количество чисел, затем максимальное из них. 5 | ''' 6 | def prost(n): 7 | for d in range(2, round(n ** 0.5) + 1): 8 | if n % d == 0: 9 | return False 10 | return True 11 | 12 | k, maximum = 0, 0 13 | for i in range(5555, 7778): 14 | for d in range(2, round(i ** 0.5)): 15 | if d * (i // d) == i and prost(d) and prost(i // d) and d % 10 == 3 and (i // d) % 10 == 3: 16 | maximum = max(maximum, i) 17 | k += 1 18 | print(maximum, k) 19 | -------------------------------------------------------------------------------- /zadanie_12/12-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Какая строка получится в результате применения этой программы к строке, состоящей из цифры 1, за которой следуют 80 идущих подряд цифр 8? В ответе запишите полученную строку. 3 | НАЧАЛО 4 | ПОКА нашлось (18) ИЛИ нашлось (288) ИЛИ нашлось (3888) 5 | ЕСЛИ нашлось (18) 6 | ТО заменить (18, 2) 7 | ИНАЧЕ 8 | ЕСЛИ нашлось (288) 9 | ТО заменить (288, 3) 10 | ИНАЧЕ заменить (3888, 1) 11 | КОНЕЦ ЕСЛИ 12 | КОНЕЦ ЕСЛИ 13 | КОНЕЦ ПОКА 14 | КОНЕЦ 15 | ''' 16 | s = '1' + 80 * '8' 17 | while '18' in s or '288' in s or '3888' in s: 18 | if '18' in s: 19 | s = s.replace('18', '2', 1) 20 | else: 21 | if '288' in s: 22 | s = s.replace('288', '3', 1) 23 | else: 24 | s = s.replace('3888', '1', 1) 25 | print(s) 26 | -------------------------------------------------------------------------------- /zadanie_16/16-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: 3 | F(n) = n + 3, при n ≤ 18 4 | F(n) = (n//3)*F(n//3) + n - 12, при n > 18, кратных 3 5 | F(n) = F(n-1) + n*n + 5, при n > 18, не кратных 3 6 | Здесь // обозначает деление нацело. Определите количество натуральных значений n из отрезка [1; 800], для которых все цифры значения F(n) чётные. 7 | ''' 8 | def f(n): 9 | if n <= 18: 10 | return n + 3 11 | else: 12 | if n % 3 == 0: 13 | return (n // 3) * f(n // 3) + n - 12 14 | else: 15 | return f(n - 1) + n * n + 5 16 | 17 | k = 0 18 | for n in range(1, 801): 19 | x = str(f(n)) 20 | if len(x) == len([i for i in x if int(i) % 2 == 0]): 21 | k += 1 22 | print(k) -------------------------------------------------------------------------------- /zadanie_25/25-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Пусть S - сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа. 3 | Напишите программу, которая перебирает целые числа, большие 550000, в порядке возрастания и щет среди них такие, для 4 | которых значение S оканчивается на цифру 1. Программа долдна найти и вывести первые 5 таких числе с соотвествующие им значения S. 5 | ''' 6 | 7 | def prost(n): 8 | for i in range(2, n): 9 | if n % i == 0: 10 | return False 11 | return True 12 | 13 | 14 | for i in range(550000, 555000): 15 | divs = [] 16 | for d in range(1, i): 17 | if i % d == 0 and prost(d): 18 | divs.append(d) 19 | if len(divs) > 1: 20 | if sum(divs) % 10 == 1: 21 | print(i, sum(divs), divs) -------------------------------------------------------------------------------- /zadanie_5/5-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N по следующему алгоритму: 3 | 1. Строится двоичная запись числа N. 4 | 2. Удаляется первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, 5 | результат этого действия считается равным нулю. 6 | 3. Полученное число переводится в десятичную запись. 7 | 4. Новое число вычитается из исходного, полученная разность выводится на экран. 8 | 9 | Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел от 10 до 1000? 10 | ''' 11 | i = set() 12 | for n in range(10, 1001): 13 | s = bin(n)[3:] 14 | s1 = '' 15 | 16 | for x in range(len(s)): 17 | if s[x] != '0': 18 | s1 += '1' 19 | i.add(s1) 20 | print(len(i)) -------------------------------------------------------------------------------- /zadanie_17/17-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, разность которых четна и хотя бы 4 | одно из чисел делится на 19, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается 5 | два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/17.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if ((s[i] - s[j]) % 2 == 0) and (s[i] % 19 == 0 or s[j] % 19 == 0): 13 | numbers.append(s[i] + s[j]) 14 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_17/17-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-205.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от –10 000 до 10 000 включительно. Определите количество пар, в которых хотя бы один из двух элементов заканчивается на 7, 4 | а их сумма делится на 12. В ответе запишите два числа: сначала количество найденных пар, а затем – максимальную сумму элементов таких пар. 5 | В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-205.txt') as f: 8 | s = [int(x) for x in f] 9 | res = [] 10 | for i in range(1, len(s)): 11 | if (abs(s[i]) % 10 == 7 or abs(s[i-1]) % 10 == 7) and (s[i] + s[i-1]) % 12 == 0: 12 | res.append(s[i] + s[i-1]) 13 | print(len(res), max(res)) -------------------------------------------------------------------------------- /zadanie_23/23-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Нолик преобразует число, записанное на экране в троичной системе счисления. У исполнителя есть две команды, 3 | которым присвоены номера: 4 | 1. Вычесть 2 5 | 2. Обнулить младший разряд 6 | Первая команда уменьшает число на 2. Вторая команда обнуляет ненулевой младший разряд троичной записи числа. 7 | (Например, при выполнении этой команды число 21 преобразуется в число 20. 8 | Если в младшем разряде находится 0, то данная команда не выполняется). 9 | Сколько существует программ, которые троичное число 212, преобразуют в троичное число 10? 10 | ''' 11 | def f(x, y): 12 | if x < y: 13 | return 0 14 | if x == y: 15 | return 1 16 | if x % 3 == 0: 17 | return f(x - 2, y) 18 | return f(x - 2, y) + f(x // 3 * 3, y) 19 | 20 | print(f(23, 3)) -------------------------------------------------------------------------------- /zadanie_25/25-20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Найдите 5 составных (не простых) чисел больших 800000, таких, что сумма их наименьшего и наибольшего нетривиальных 3 | делителей (не считая единицы и самого числа) делится на 138. В качестве ответа приведите 5 наименьших чисел, 4 | соответствующих условию. Формат вывода: для каждого из найденных чисел в отдельной строке запишите само число, 5 | а затем сумму его наименьшего и наибольшего нетривиальных делителей. 6 | ''' 7 | i = 800001 8 | k = 0 9 | while k != 5: 10 | divs = set() 11 | for d in range(2, round(i ** 0.5)+1): 12 | if i % d == 0: 13 | divs.add(d) 14 | divs.add(i // d) 15 | if len(divs) != 0: 16 | if (max(divs) + min(divs)) % 138 == 0: 17 | k += 1 18 | print(i, max(divs) + min(divs)) 19 | i += 1 -------------------------------------------------------------------------------- /zadanie_17/17-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, разность которых четна и хотя бы 4 | одно из чисел делится на 19, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается 5 | два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/17-r3.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if ((s[i] - s[j]) % 2 == 0) and (s[i] % 19 == 0 or s[j] % 19 == 0): 13 | numbers.append(s[i] + s[j]) 14 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_17/17-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, разность которых четна и хотя бы 4 | одно из чисел делится на 31, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается 5 | два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/17-r2.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if ((s[i] - s[j]) % 2 == 0) and (s[i] % 31 == 0 or s[j] % 31 == 0): 13 | numbers.append(s[i] + s[j]) 14 | print(len(numbers), max(numbers)) 15 | -------------------------------------------------------------------------------- /zadanie_17/17-28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-205.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от –10 000 до 10 000 включительно. Определите количество пар, в которых хотя бы один из двух элементов делится на 7, 4 | а их сумма заканчивается на 19. В ответе запишите два числа: сначала количество найденных пар, а затем – максимальную сумму элементов таких пар. 5 | В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-205.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(len(s) - 1): 11 | if abs(s[i] + s[i + 1]) % 100 == 19 and (s[i] % 7 == 0 or s[i + 1] % 7 == 0): 12 | numbers.append(s[i] + s[i + 1]) 13 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_19-21/19-21-5.py: -------------------------------------------------------------------------------- 1 | #20 задача 2 | def f(x, p): 3 | if x >= 48: 4 | return p == 3 5 | if p % 2: 6 | return f(x + 1, p + 1) and f(x + 4, p + 1) and f(x * 2, p + 1) 7 | else: 8 | return f(x + 1, p + 1) or f(x + 4, p + 1) or f(x * 2, p + 1) 9 | 10 | print([i for i in range(1, 40) if f(i, 0)]) 11 | #21 задача 12 | def f(x, p): 13 | if x >= 48 and (p == 4 or p == 2): 14 | return True 15 | else: 16 | if x < 48 and p == 4: 17 | return False 18 | else: 19 | if x >= 48: 20 | return False 21 | if p % 2: 22 | return f(x + 2, p + 1) or f(x + 3, p + 1) or f(x * 2, p + 1) 23 | else: 24 | return f(x + 2, p + 1) and f(x + 3, p + 1) and f(x * 2, p + 1) 25 | 26 | print([i for i in range(1, 30) if f(i, 0)]) -------------------------------------------------------------------------------- /zadanie_23/23-45.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавь 1 4 | 2. Прибавь 3 5 | 3. Умножь на 2 6 | Первая команда увеличивает число на экране на 1, вторая увеличивает его на 3, третья – умножает на 2. 7 | Программа для исполнителя – это последовательность команд. 8 | Сколько существует программ, которые преобразуют исходное число 1 в число 14 и при этом не содержат двух команд умножения подряд? 9 | ''' 10 | def f(x, y, command): 11 | if x > y: 12 | return 0 13 | elif x == y: 14 | return 1 15 | else: 16 | if command == 0: 17 | return f(x + 1, y, 0) + f(x + 3, y, 0) + f(x * 2, y, 1) 18 | else: 19 | return f(x + 1, y, 0) + f(x + 3, y, 0) 20 | print(f(1, 14, 0)) -------------------------------------------------------------------------------- /zadanie_5/5-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат получает на вход пятизначное число. По этому числу строится новое число по следующим правилам. 3 | 1. Складываются отдельно первая, третья и пятая цифры, а также вторая и четвёртая цифры. 4 | 2. Полученные два числа записываются друг за другом в порядке неубывания без разделителей. 5 | Пример. Исходное число: 63 179. Суммы: 6 + 1 + 9 = 16; 3 + 7 = 10. Результат: 1016. Укажите наименьшее число, при обработке которого автомат выдаёт результат 723. 6 | ''' 7 | for x in range(10000, 100000): 8 | s = str(x) 9 | summa1 = int(s[0]) + int(s[2]) + int(s[4]) 10 | summa2 = int(s[1]) + int(s[3]) 11 | if summa1 >= summa2: 12 | final = str(summa2) + str(summa1) 13 | else: 14 | final = str(summa1) + str(summa2) 15 | if final == '723': 16 | print(x) 17 | break -------------------------------------------------------------------------------- /zadanie_17/17-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, у которых сумма элементов кратна 4 | 80 и хотя бы один элемент из пары делится на 50, затем максимальную из сумм элементов таких пар. В данной задаче 5 | под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/37362.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if ((s[i] + s[j]) % 80 == 0) and (s[i] % 50 == 0 or s[j] % 50 == 0): 13 | numbers.append(s[i] + s[j]) 14 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_17/17-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. 3 | Определите и запишите в ответе сначала количество пар элементов последовательности, у которых разность элементов 4 | кратна 45 и хотя бы один из элементов кратен 18, затем максимальную из разностей элементов таких пар. В данной задаче 5 | под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен. 6 | ''' 7 | with open('../files/17/17-r4.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(0, len(s) - 1): 11 | for j in range(i + 1, len(s)): 12 | if ((s[i] - s[j]) % 45 == 0) and (s[i] % 18 == 0 or s[j] % 18 == 0): 13 | numbers.append(s[i] - s[j]) 14 | print(len(numbers), max(numbers)) 15 | -------------------------------------------------------------------------------- /zadanie_17/17-34.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-1.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от –10 000 до 10 000 включительно. Определите количество троек, в которых хотя бы один из трёх элементов больше, 4 | чем среднее арифметическое всех чисел в файле. В ответе запишите два числа: сначала количество найденных троек, 5 | а затем – максимальную сумму элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-1.txt') as f: 8 | s = [int(x) for x in f] 9 | sred = sum(s) / len(s) 10 | res = [] 11 | for i in range(len(s) - 2): 12 | if s[i] > sred or s[i + 1] > sred or s[i + 2] > sred: 13 | res.append(s[i] + s[i+1] + s[i+2]) 14 | print(len(res), max(res)) 15 | -------------------------------------------------------------------------------- /zadanie_23/23-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель РазДва преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Умножить на 2 5 | Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя РазДва— это последовательность команд. 6 | Сколько существует программ, которые преобразуют исходное число 1 в число 20, и при этом траектория вычислений содержит ровно одно из чисел 9 и 10? 7 | ''' 8 | def f(x, y): 9 | if x > y or x == 9: 10 | return 0 11 | if x == y: 12 | return 1 13 | return f(x + 1, y) + f(x * 2, y) 14 | 15 | def e(x, y): 16 | if x > y or x == 10: 17 | return 0 18 | if x == y: 19 | return 1 20 | return e(x + 1, y) + e(x * 2, y) 21 | 22 | print(f(1, 10) * f(10, 20) + e(1, 9) * e(9, 20)) 23 | -------------------------------------------------------------------------------- /zadanie_23/23-44.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавь 1 4 | 2. Прибавь 2 5 | 3. Умножь на 2 6 | Первая команда увеличивает число на экране на 1, вторая увеличивает его на 2, третья – умножает на 2. 7 | Программа для исполнителя – это последовательность команд. Сколько существует программ, которые преобразуют исходное 8 | число 1 в число 12 и при этом не содержат двух команд «Прибавить 2» подряд? 9 | ''' 10 | def f(x, y, command): 11 | if x > y: 12 | return 0 13 | elif x == y: 14 | return 1 15 | else: 16 | if command == 0: 17 | return f(x + 1, y, 0) + f(x + 2, y, 1) + f(x * 2, y, 0) 18 | else: 19 | return f(x + 1, y, 0) + f(x * 2, y, 0) 20 | print(f(1, 12, 0)) 21 | -------------------------------------------------------------------------------- /zadanie_5/5-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат получает на вход пятизначное число. По этому числу строится новое число по следующим правилам. 3 | 1. Складываются отдельно первая, третья и пятая цифры, а также вторая и четвёртая цифры. 4 | 2. Полученные два числа записываются друг за другом в порядке неубывания без разделителей. 5 | 6 | Пример. Исходное число: 63 179. Суммы: 6 + 1 + 9 = 16; 3 + 7 = 10. Результат: 1016. 7 | Укажите наименьшее число, при обработке которого автомат выдаёт результат 621. 8 | ''' 9 | for x in range(10000, 100000): 10 | s = str(x) 11 | summa1 = int(s[0]) + int(s[2]) + int(s[4]) 12 | summa2 = int(s[1]) + int(s[3]) 13 | if summa1 >= summa2: 14 | final = str(summa2) + str(summa1) 15 | else: 16 | final = str(summa1) + str(summa2) 17 | if final == '621': 18 | print(x) 19 | break -------------------------------------------------------------------------------- /zadanie_24/24-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Текстовый файл 24-s2.txt состоит не более чем из 106 заглавных латинских букв. Определите символ, который чаще всего в 3 | стречается в файле сразу после буквы A. В ответе запишите сначала этот символ, а потом сразу (без разделителя) сколько 4 | раз он встретился после буквы А. Если таких символов несколько, нужно вывести тот, который стоит раньше в алфавите. 5 | Например, в тексте ABCAABADDD после буквы A два раза стоит B, по одному разу – A и D. Для этого текста ответом будет B2. 6 | ''' 7 | with open('../files/24/24-s2.txt') as f: 8 | s = f.readline() 9 | d = {} 10 | for i in range(1, len(s)): 11 | if s[i-1] == 'A': 12 | key = s[i] 13 | d[key] = d.get(key, 0) + 1 14 | Max = max(d.values()) 15 | for x in d.items(): 16 | if x[1] == Max: 17 | print(x) 18 | -------------------------------------------------------------------------------- /zadanie_12/12-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. 3 | Чертёжник может выполнять команду Сместиться на (a, b) (где a, b – целые числа), перемещающую Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b). Чертёжнику был дан для исполнения следующий алгоритм: 4 | 5 | Сместиться на (-1, 2) 6 | Повтори N раз 7 | Сместиться на (a, b) 8 | Сместиться на (-1, -2) 9 | конец 10 | Сместиться на (-24, -12) 11 | После выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшее число повторений могло быть указано в конструкции «Повтори … раз»? 12 | ''' 13 | for n in range(1, 100): 14 | for x in range(-100, 100): 15 | for y in range(-100, 100): 16 | if (- 1 + n * (x - 1) - 24) == (2 + n * (y - 2) - 12) == 0: 17 | print(n) -------------------------------------------------------------------------------- /zadanie_17/17-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Файл содержит последовательность неотрицательных целых чисел, не превышающих 10000. 3 | Назовём парой два идущих подряд элемента последовательности. Определите количество пар, в которых хотя бы один из 4 | двух элементов делится на 3 и хотя бы один из двух элементов меньше среднего арифметического всех чётных элементов последовательности. 5 | В ответе запишите два числа: сначала количество найденных пар, а затем— максимальную сумму элементов таких пар. 6 | ''' 7 | with open('../files/17/40733.txt') as f: 8 | s = [int(x) for x in f] 9 | sre = [k for k in s if k % 2 == 0] 10 | sred = sum(sre) // len(sre) 11 | numbers = [] 12 | for i in range(1, len(s)): 13 | if (s[i] % 3 == 0 or s[i-1] % 3 == 0) and (s[i] < sred or s[i-1] < sred): 14 | numbers.append(s[i] + s[i - 1]) 15 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_17/17-29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от 0 до 10 000 включительно. Определите количество пар, в которых хотя бы один из двух элементов больше, чем среднее 4 | арифметическое всех чисел в файле, а их сумма делится на 7. В ответе запишите два числа: сначала количество найденных пар, 5 | а затем – минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-4.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | sred = sum(s) / len(s) 11 | for i in range(len(s) - 1): 12 | if abs(s[i] + s[i + 1]) % 7 == 0 and (s[i] > sred or s[i + 1] > sred): 13 | numbers.append(s[i] + s[i + 1]) 14 | print(len(numbers), min(numbers)) -------------------------------------------------------------------------------- /zadanie_23/23-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавить 1 4 | 2. Добавить справа 0 5 | 3. Добавить справа 1 6 | Первая команда увеличивает число на 1. При выполнении второй команды, исполнитель справа к числу приписывает 0, а при выполнении третьей команды справа к числу приписывает 1. (например, для числа 10 результатом работы данных команд будут являться числа 100 и 101 соответственно). 7 | Сколько существует программ, которые исходное двоичное число 101 преобразуют в двоичное число 101110? 8 | ''' 9 | def f(x, y): 10 | if x > y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | return f(x + 1, y) + f(int(bin(x)[2:] + '0', 2), y) + f(int(bin(x)[2:] + '1', 2), y) 15 | 16 | print((f(int('101', 2), int('101110', 2)))) -------------------------------------------------------------------------------- /zadanie_25/25-33.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Среди целых чисел, принадлежащих числовому отрезку [298435; 363249], найдите числа, которые представляют собой 3 | произведение двух различных простых делителей. Запишите в ответе количество таких чисел и то из них, которое ближе всего к их среднему арифметическому. 4 | ''' 5 | def prost(n): 6 | for d in range(2, round(n ** 0.5) + 1): 7 | if n % d == 0: 8 | return False 9 | return True 10 | 11 | minimum = 1000000000000 12 | done = [] 13 | for i in range(298435, 363250): 14 | for d in range(2, round(i ** 0.5)): 15 | if d * (i // d) == i and prost(d) and prost(i // d): 16 | done.append(i) 17 | sred = sum(done) // len(done) 18 | for i in range(298435, 363250): 19 | if i in done and abs(sred - i) < minimum: 20 | minimum = abs(sred - i) 21 | g = i 22 | print(len(done), g) 23 | -------------------------------------------------------------------------------- /zadanie_25/25-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 168) (А. Кабанов) Обозначим через S сумму всех натуральных делителей целого числа, кроме единицы и самого числа. 3 | Если таких делителей у числа нет, то считаем значение S равным нулю. Напишите программу, которая перебирает целые числа, 4 | большие 150000 в порядке возрастания и ищет среди них такие, для которых значение S при делении на 13 даёт остаток 10. 5 | Программа должна найти и первые 7 таких чисел. Для каждого из них запишите в отдельной строке сначала само число, затем 6 | значение S. Строки выводятся в порядке возрастания найденных чисел. 7 | ''' 8 | for i in range(150000, 155000): 9 | divs = set() 10 | for d in range(2, round(i ** 0.5)+1): 11 | if i % d == 0: 12 | divs.add(d) 13 | divs.add(i // d) 14 | if len(divs) != 0: 15 | if sum(divs) % 13 == 10: 16 | print(i, sum(divs)) -------------------------------------------------------------------------------- /zadanie_25/25-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Рассматриваются целые числа, принадлежащих числовому отрезку [309829; 365874], которые представляют собой произведение 3 | двух различных простых делителей. Найдите такое из этих чисел, у которого два простых делителя меньше всего отличаются 4 | друг от друга. В ответе запишите простые делители этого числа в порядке возрастания. 5 | ''' 6 | def prost(n): 7 | for i in range(2, n): 8 | if n % i == 0: 9 | return False 10 | return True 11 | 12 | maximum = 100000000 13 | for i in range(309829, 365875): 14 | divs = set() 15 | for d in range(2, round(i**0.5)+1): 16 | if d * (i // d) == i and prost(d) and prost(i // d): 17 | print(d, i // d) 18 | if abs(i // d - d) < maximum: 19 | maximum = i // d - d 20 | d1, d2 = d, i // d 21 | print(maximum, d1, d2) 22 | -------------------------------------------------------------------------------- /zadanie_17/17-23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В файле 17-3.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от -10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество троек элементов 4 | последовательности, в которых хотя бы одно число кратно 12, а каждое число делится на 3, затем минимальное из 5 | средних арифметических элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-3.txt') as f: 8 | s = [int(x) for x in f] 9 | res = [] 10 | for i in range(2, len(s)): 11 | if (s[i - 2] % 3 == 0) and (s[i - 1] % 3 == 0) and (s[i] % 3 == 0) and (s[i] % 12 == 0 or s[i-1] % 12 == 0 or s[i - 2] % 12 == 0): 12 | res.append((s[i] + s[i - 1] + s[i - 2]) // 3) 13 | print(len(res), min(res)) -------------------------------------------------------------------------------- /zadanie_23/23-25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Вычесть 1 4 | 2. Обнулить 5 | Первая команда уменьшает число на 1. Вторая команда обнуляет все ненулевые разряды, кроме старшего (например, для исходного числа 11101 результатом работы команды будет число 10000), если таких разрядов нет, то данная команда не выполняется. 6 | Сколько существует программ, которые исходное двоичное число 10001 преобразуют в двоичное число 1? 7 | ''' 8 | 9 | def f(x, y): 10 | if x < y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | else: 15 | if x != 2 ** (len(bin(x)[2:]) - 1): 16 | return f(x - 1, y) + f(2 ** (len(bin(x)[2:]) - 1), y) 17 | else: 18 | return f(x - 1, y) 19 | 20 | print(f(int('10001', 2), 1)) -------------------------------------------------------------------------------- /zadanie_23/23-42.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 3 | 1. Вычесть 1 4 | 2. Обнулить 5 | Первая команда уменьшает число на 1. Вторая команда обнуляет все ненулевые разряды, кроме старшего 6 | (например, для исходного числа 11101 результатом работы команды будет число 10000), если таких разрядов нет, то данная команда не выполняется. 7 | Сколько существует программ, которые исходное двоичное число 1100 преобразуют в двоичное число 100? 8 | ''' 9 | def f(x, y): 10 | if x < y: 11 | return 0 12 | elif x == y: 13 | return 1 14 | else: 15 | if x != 2 ** (len(bin(x)[2:]) - 1): 16 | return f(x - 1, y) + f(2 ** (len(bin(x)[2:]) - 1), y) 17 | else: 18 | return f(x - 1, y) 19 | 20 | print(f(int('1100', 2), 4)) -------------------------------------------------------------------------------- /zadanie_12/12-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. 3 | Чертёжник может выполнять команду Сместиться на (a, b) (где a, b – целые числа), 4 | перемещающую Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b). 5 | Чертёжнику был дан для исполнения следующий алгоритм: 6 | 7 | Сместиться на (16, -21) 8 | Повтори N раз 9 | Сместиться на (a, b) 10 | Сместиться на (-1, -2) 11 | конец 12 | Сместиться на (-60, -12) 13 | После выполнения этого алгоритма Чертёжник возвращается в исходную точку. 14 | Какое наибольшее число повторений могло быть указано в конструкции «Повтори … раз»? 15 | ''' 16 | for n in range(1, 100): 17 | for a in range(-100, 100): 18 | for b in range(-100, 100): 19 | if (16 + n * (a - 1) - 60) == (-21 + n * (b - 2) - 12) == 0: 20 | print(n) -------------------------------------------------------------------------------- /zadanie_25/25-13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Обозначим через F целую часть среднего арифметического всех натуральных делителей целого числа, кроме единицы и самого 3 | числа. Если таких делителей у числа нет, то считаем значение F равным нулю. Напишите программу, которая перебирает целые 4 | числа, большие 550000, в порядке возрастания и ищет среди них такие, для которых значение F при делении на 31 даёт в 5 | остатке 13. Выведите первые 5 найденных чисел в порядке возрастания и справа от каждого числа – соответствующее значение F. 6 | ''' 7 | i = 550001 8 | k = 0 9 | while k != 5: 10 | divs = set() 11 | for d in range(2, round(i ** 0.5)+1): 12 | if i % d == 0: 13 | divs.add(d) 14 | divs.add(i // d) 15 | if len(divs) != 0: 16 | if (sum(divs) // len(divs)) % 31 == 13: 17 | k += 1 18 | print(i, sum(divs) // len(divs)) 19 | i += 1 -------------------------------------------------------------------------------- /zadanie_24/24-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (В.Н. Шубинкин) Текстовый файл 24-1.txt состоит не более чем из 106 символов - заглавных латинских букв и цифр. 3 | Возрастающей подпоследовательностью будем называть последовательность символов, расположенных в порядке увеличения их 4 | номера в кодовой таблице символов ASCII. Найдите наибольшую возрастающую подпоследовательность в этом файле, запишите 5 | в ответе сначала саму последовательность, а затем – её длину. Если таких последовательностей несколько, используйте первую из них. 6 | ''' 7 | with open('../files/24/24-1.txt') as tf: 8 | s = tf.readline() 9 | 10 | k, kmax = 1, 0 11 | w, maxw = s[0], '' 12 | for i in range(1, len(s)): 13 | if s[i] > s[i - 1]: 14 | k += 1 15 | w += s[i] 16 | if k > kmax: 17 | kmax = k 18 | maxw = w 19 | else: 20 | k = 1 21 | w = s[i] 22 | print(maxw, kmax) 23 | -------------------------------------------------------------------------------- /zadanie_25/25-14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Обозначим через P(N) – произведение 5 наименьших различных нетривиальных делителей натурального числа N (не считая 3 | единицы и самого числа). Если у числа N меньше 5 таких делителей, то P(N) считается равным нулю. Найдите 5 наименьших 4 | натуральных чисел, превышающих 400 000 000, для которых P(N) оканчивается на 17 и не превышает N. В ответе для каждого 5 | найденного числа запишите сначала значение P(N), а затем – наибольший делитель, вошедший в произведение P(N). 6 | ''' 7 | i = 400000001 8 | k = 0 9 | while k != 5: 10 | divs = set() 11 | for d in range(2, round(i ** 0.5)+1): 12 | if i % d == 0: 13 | divs.add(d) 14 | divs.add(i // d) 15 | divs = sorted(list(divs)) 16 | if len(divs) >= 5: 17 | p = divs[0]*divs[1]*divs[2]*divs[3]*divs[4] 18 | if p < i and p % 100 == 17: 19 | k += 1 20 | print(p, divs[4]) 21 | i += 1 22 | -------------------------------------------------------------------------------- /zadanie_8/8-3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Лида составляет слова из букв К, Р, Ы, Ш, А. Каждая гласная буква встречается в слове не более двух раз. 3 | Каждая согласная может стоять в слове на первой позиции, либо не встречаться вовсе. Сколько слов длиною более двух 4 | символов может составить Лида? 5 | ''' 6 | from itertools import product 7 | sogl3 = 0 8 | notsogl = 0 9 | for i in range(2, 10): 10 | k = 0 11 | word = product('ЫА', repeat=i) #i -это количество символов в слове 12 | for letter in word: 13 | if letter.count('Ы') <= 2 and letter.count('А') <= 2: 14 | k += 1 ##кол-во слов, где каждая гласная встречается не более двух раз 15 | if i != 2: 16 | # количество слов длиной более двух символов без согласных 17 | notsogl += k 18 | # количество слов длиной более двух символов с 3мя согласными вначале 19 | sogl3 += (3 * k) 20 | print(sogl3 + notsogl) 21 | -------------------------------------------------------------------------------- /zadanie_25/25-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: 3 | — символ «?» означает ровно одну произвольную цифру; 4 | — символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. 5 | Например, маске 123*4?5 соответствуют числа 123405 и 12300425. Среди натуральных чисел, не превышающих 10**9, 6 | найдите все числа, соответствующие маске 123*567? и делящиеся на 169 без остатка. В ответе запишите в первом столбце 7 | таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 169. 8 | ''' 9 | for i in range(100): 10 | for j in range(10): 11 | if int('123' + str(i) + '567' + str(j)) % 169 == 0: 12 | print(int('123' + str(i) + '567' + str(j)), int('123' + str(i) + '567' + str(j)) // 169) -------------------------------------------------------------------------------- /zadanie_24/24-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (П.Е. Финкель) Текстовый файл 24-1.txt состоит не более чем из 10**6 символов - заглавных латинских букв и цифр. 3 | Определите максимальное число, состоящее только из чётных цифр. Под числом подразумевается последовательность цифр, 4 | ограниченная другими символами (не цифрами). 5 | ''' 6 | with open('../files/24/24-1.txt') as f: 7 | s = f.readline() 8 | s1 = '' 9 | numbers = [] 10 | maximum = 0 11 | for c in s: 12 | if c.isdigit(): 13 | s1 += c 14 | else: 15 | if s1 != '': 16 | numbers.append(s1) 17 | s1 = '' 18 | for i in numbers: 19 | k = 0 20 | x = int(i) 21 | while x > 0: 22 | if x % 2 == 0: 23 | k += 1 24 | x //= 10 25 | if k == len(i): 26 | maximum = max(maximum, int(i)) 27 | print(maximum) 28 | 29 | 30 | -------------------------------------------------------------------------------- /zadanie_8/8-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Вася составляет слова из букв слова АВТОРОТА. Код должен состоять из 8 букв, и каждая буква в нём должна встречаться 3 | столько же раз, сколько в заданном слове. Кроме того, в коде не должны стоять рядом две гласные и две согласные буквы. 4 | Сколько различных слов может составить Вася? 5 | ''' 6 | k = set() 7 | for a in 'ао': 8 | for b in 'втр': 9 | for c in 'ао': 10 | for d in 'втр': 11 | for e in 'ао': 12 | for f in 'втр': 13 | for g in 'ао': 14 | for h in 'втр': 15 | word = a + b + c + d + e + f + g + h 16 | if word.count('а') == 2 and word.count('в') == 1 and word.count('т') == 2 and word.count('о') == 2 and word.count('р') == 1: 17 | k.add(word) 18 | print(len(k) * 2) 19 | -------------------------------------------------------------------------------- /zadanie_8/8-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Лида составляет слова из букв С, Е, П, И, Я. Каждая гласная буква встречается в слове не более двух раз. 3 | Каждая согласная может стоять в слове на первой позиции, либо не встречаться вовсе. 4 | Сколько слов длиною более двух символов может составить Лида? 5 | ''' 6 | from itertools import product 7 | sogl, notsogl = 0, 0 8 | for i in range(2, 10): 9 | k = 0 10 | word = product('ЕИЯ', repeat=i) #i -это количество символов в слове 11 | for letter in word: 12 | if letter.count('Е') <= 2 and letter.count('И') <= 2 and letter.count('Я') <= 2: 13 | k += 1 ##кол-во слов, где каждая гласная встречается не более двух раз 14 | if i != 2: 15 | # количество слов длиной более двух символов без согласных 16 | notsogl += k 17 | # количество слов длиной более двух символов с 2мя согласными вначале 18 | sogl += (2 * k) 19 | print(sogl + notsogl) -------------------------------------------------------------------------------- /zadanie_25/25-30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: 3 | — символ «?» означает ровно одну произвольную цифру; 4 | — символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. 5 | Например, маске 123*4?5 соответствуют числа 123405 и 12300425. Среди натуральных чисел, не превышающих 10**9, 6 | найдите все числа, соответствующие маске 1?34567?9 и делящиеся на 17 без остатка. 7 | В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 17. 8 | ''' 9 | for i in range(10): 10 | for j in range(10): 11 | if int('1' + str(i) + '34567' + str(j) + '9') % 17 == 0: 12 | print(int('1' + str(i) + '34567' + str(j) + '9'), int('1' + str(i) + '34567' + str(j) + '9') // 17) -------------------------------------------------------------------------------- /zadanie_17/17-16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Л. Шастин) В файле 17-10.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | значения от 0 до 10000 включительно. Определите сначала количество пар, сумма элементов которых при переводе в систему 4 | счисления с основанием 7 образует число-палиндром, а затем наибольшую сумму-палиндром в семеричной системе счисления. 5 | Под парой чисел подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | def seven(n): 8 | chislo = '' 9 | while n > 0: 10 | chislo += str(n % 7) 11 | n //= 7 12 | return chislo[::-1] 13 | 14 | with open('../files/17/17-10.txt') as f: 15 | s = [int(x) for x in f] 16 | numbers = [] 17 | for i in range(1, len(s)): 18 | summa = seven(s[i] + s[i-1]) 19 | if summa == summa[::-1]: 20 | numbers.append(int(summa)) 21 | print(len(numbers), max(numbers)) 22 | 23 | 24 | -------------------------------------------------------------------------------- /zadanie_17/17-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10000 3 | до 10000 включительно. Определите количество пар последовательности, в которых хотя бы одно число оканчивается на 15, а 4 | сумма элементов пары не более максимального элемента последовательности, оканчивающегося на 15. 5 | В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. 6 | В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 7 | ''' 8 | with open('../files/17/on15.txt') as f: 9 | s = [int(x) for x in f] 10 | numbers = [] 11 | max15 = max([j for j in s if abs(j) % 100 == 15]) 12 | for i in range(1, len(s)): 13 | if (abs(s[i]) % 100 == 15 or abs(s[i-1]) % 100 == 15) and s[i] + s[i-1] <= max15: 14 | numbers.append(s[i] + s[i - 1]) 15 | print(len(numbers), max(numbers)) 16 | -------------------------------------------------------------------------------- /zadanie_17/17-33.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-282.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от 0 до 10 000. Определите количество пар элементов последовательности, в которых хотя бы у одного из чисел сумма цифр 4 | равна сумме цифр минимального элемента последовательности, кратного 37. В ответе запишите количество найденных пар, 5 | затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 6 | ''' 7 | with open('../files/17/17-282.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | min37 = min([t for t in s if t % 37 == 0]) 11 | for i in range(len(s) - 1): 12 | if sum(map(int, str(s[i]))) == sum(map(int, str(min37))) or sum(map(int, str(s[i + 1]))) == sum(map(int, str(min37))): 13 | numbers.append(s[i] + s[i + 1]) 14 | print(len(numbers), min(numbers)) -------------------------------------------------------------------------------- /zadanie_5/5-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 3 | 1) Строится восьмибитная двоичная запись числа N. 4 | 2) Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0). 5 | 3) Полученное число переводится в десятичную систему счисления. 6 | Для какого значения N результат работы алгоритма равен 221? 7 | ''' 8 | for n in range(1, 256): 9 | s = bin(n)[2:] 10 | s = (8 - len(s)) * '0' + s 11 | s1 = '' 12 | i = 0 13 | for x in range(len(s)): 14 | if s[x] == '1': 15 | i += 1 16 | if i == s.count('1'): 17 | i = x 18 | for x in range(0, i): 19 | if s[x] == '1': 20 | s1 += '0' 21 | if s[x] == '0': 22 | s1 += '1' 23 | for x in range(i, len(s)): 24 | s1 += s[x] 25 | if int(s1, 2) == 221: 26 | print(n) 27 | -------------------------------------------------------------------------------- /zadanie_5/5-15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом. 3 | 1. Из цифр, образующих десятичную запись N, строятся наибольшее и наименьшее возможные двузначные числа (числа не могут начинаться с нуля). 4 | 2. На экран выводится разность полученных двузначных чисел. 5 | Пример. Дано число N=238. Алгоритм работает следующим образом: 6 | 1. Наибольшее двузначное число из заданных цифр— 83, наименьшее— 23. 7 | 2. На экран выводится разность 83−23=60. 8 | 9 | Чему равно наименьшее возможное трёхзначное число N, в результате обработки которого на экране автомата появится число 50? 10 | ''' 11 | for n in range(100, 1000): 12 | x = n 13 | numb = [] 14 | while x > 0: 15 | numb.append(x % 10) 16 | x //= 10 17 | numb.sort() 18 | if int(str(numb[-1]) + str(numb[-2])) - int(str(numb[0]) + str(numb[1])) == 63 and numb[0] != 0: 19 | print(n) -------------------------------------------------------------------------------- /zadanie_5/5-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 3 | 1) Вычисляется сумма S1 всех чётных цифр десятичной записи числа N. Если чётных цифр нет, сумма S1 считается равной 0. 4 | 2) Вычисляется сумма S2 всех цифр десятичной записи числа N, стоящих в чётных разрядах. Разряды нумеруются справа налево, начиная с 0. 5 | 3) Вычисляется результат R как модуль разности S1 и S2. 6 | Например, N = 4321. Сумма чётных цифр S1 = 4 + 2 = 6. Сумма цифр в чётных разрядах S2 = 1 + 3 = 4. Результат работы алгоритма R = 6 – 4 = 2. 7 | Укажите наименьшее число, в результате обработки которого по данному алгоритму получится число 26. 8 | ''' 9 | for n in range(1, 10000000): 10 | s = str(n) 11 | s1 = sum([int(i)for i in s if int(i) % 2 == 0]) 12 | s2 = sum([int(s[i]) for i in range(0, len(s), 2)]) 13 | if abs(s2 - s1) == 26: 14 | print(n) 15 | break -------------------------------------------------------------------------------- /zadanie_5/5-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом. 3 | 1. Строится двоичная запись числа N. 4 | 2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы. Например, двоичная запись 1001 числа 9 будет преобразована в 100111. 5 | Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма. 6 | Укажите минимальное число N, для которого результат работы алгоритма будет больше 115. В ответе это число запишите в десятичной системе счисления. 7 | ''' 8 | for n in range(1, 100): 9 | x = bin(n)[2:] 10 | if n % 2 == 0: 11 | x += '00' 12 | else: 13 | x += '11' 14 | if int(x, 2) > 115: 15 | print(n) 16 | break -------------------------------------------------------------------------------- /zadanie_5/5-6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом. 3 | 1. Строится двоичная запись числа N. 4 | 2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы. Например, двоичная запись 1001 числа 9 будет преобразована в 100111. 5 | Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма. 6 | Укажите минимальное число N, для которого результат работы алгоритма будет больше 115. В ответе это число запишите в десятичной системе счисления. 7 | ''' 8 | for n in range(1, 100): 9 | s = bin(n)[2:] 10 | if n % 2 == 0: 11 | s += '00' 12 | else: 13 | s += '11' 14 | if int(s, 2) > 115: 15 | print(n) 16 | break -------------------------------------------------------------------------------- /zadanie_5/5-3.py: -------------------------------------------------------------------------------- 1 | '''Алгоритм получает на вход натуральное число N>1 и строит по нему новое число R следующим образом: 2 | 1. Если исходное число кратно 2, оно делится на 2, в противном случае из него вычитается 1. 3 | 2. Если полученное на предыдущем шаге число кратно 3, оно делится на 3, в противном случае из него вычитается 1. 4 | 3. Если полученное на предыдущем шаге число кратно 7, оно делится на 7, в противном случае из него вычитается 1. 5 | 4. Число, полученное на шаге 3, считается результатом работы алгоритма. 6 | Сколько существует различных натуральных чисел N, при обработке которых получится R=2?''' 7 | k = 0 8 | for n in range(2, 100): 9 | x = n 10 | if x % 2 == 0: 11 | x //= 2 12 | else: 13 | x -= 1 14 | if x % 3 == 0: 15 | x //= 3 16 | else: 17 | x -= 1 18 | if x % 7 == 0: 19 | x //= 7 20 | else: 21 | x -= 1 22 | if x == 2: 23 | k += 1 24 | print(k) 25 | -------------------------------------------------------------------------------- /zadanie_12/12-12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | НАЧАЛО 4 | ПОКА НЕ нашлось(00) 5 | заменить(01, 21022) 6 | заменить(02, 310) 7 | заменить(03, 230112) 8 | КОНЕЦ ПОКА 9 | КОНЕЦ 10 | Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними были только цифры 1, 2 и 3. После выполнения данной программы получилась строка, содержащая 96 единиц, 36 двоек и 80 троек. Сколько цифр было в исходной строке? 11 | ''' 12 | for a in range(1, 50): 13 | for b in range(1, 50): 14 | for c in range(1, 50): 15 | s = '0' + a * '1' + b * '2' + c * '3' + '0' 16 | while '00' not in s: 17 | s = s.replace('01', '21022', 1) 18 | s = s.replace('02', '310', 1) 19 | s = s.replace('03', '230112', 1) 20 | if s.count('1') == 96 and s.count('2') == 36 and s.count('3') == 80: 21 | print(a + b + c + 2) 22 | break -------------------------------------------------------------------------------- /zadanie_17/17-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (П. Финкель) В файле 17-202.txt содержится последовательность целых чисел, которые принимают значения от -10000 до 10000 включительно. 3 | Тройка идущих подряд чисел последовательности называется уникальной, если только второе из них является положительным 4 | трёхзначным числом, заканчивающимся на 12. Определите количество уникальных троек чисел, а затем – максимальную из всех сумм таких троек. 5 | ''' 6 | 7 | with open('../files/17/17-202.txt') as f: 8 | s = [int(x) for x in f] 9 | numbers = [] 10 | for i in range(2, len(s)): 11 | if (s[i - 1] > 0 and len(str(abs(s[i - 1]))) == 3 and abs(s[i - 1]) % 100 == 12) and \ 12 | (s[i] <= 0 or len(str(abs(s[i]))) != 3 or abs(s[i]) % 100 != 12) and \ 13 | (s[i - 2] <= 0 or len(str(abs(s[i - 2]))) != 3 or abs(s[i - 2]) % 100 != 12): 14 | numbers.append(s[i - 2] + s[i - 1] + s[i]) 15 | print(len(numbers), max(numbers)) 16 | 17 | -------------------------------------------------------------------------------- /zadanie_25/25-21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (С. С. Крылов) Напишите программу, которая перебирает целые числа, большие 550000, в порядке возрастания и ищет среди них такие, 3 | для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. 4 | Программа должна найти и вывести первые 6 таких чисел и соответствующие им значения упомянутых делителей. 5 | Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. 6 | Строки выводятся в порядке возрастания найденных чисел. 7 | ''' 8 | i = 550001 9 | k = 0 10 | def neprost(n): 11 | for i in range(2, n): 12 | if n % i == 0: 13 | return True 14 | return False 15 | 16 | while k != 6: 17 | divs = [] 18 | for d in range(1, i): 19 | if i % d == 0 and neprost(d): 20 | divs.append(d) 21 | if len(divs) != 0: 22 | k += 1 23 | print(i, max(divs)) 24 | i += 1 -------------------------------------------------------------------------------- /zadanie_19-21/19-21-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ''' 3 | #20 задача 4 | def f(x, p): 5 | if x >= 65 or p > 3: 6 | if x < 100: 7 | return p == 3 8 | else: 9 | return p == 2 10 | #петя выиграл вторым ходом 11 | if p % 2: 12 | return f(x + 1, p + 1) and f(x * 3, p + 1) 13 | else: 14 | return f(x + 1, p + 1) or f(x * 3, p + 1) 15 | 16 | print([i for i in range(1, 100) if f(i, 0)]) 17 | 18 | 19 | #21 задача 20 | def f(x, p): 21 | if x >= 41 and (p == 4 or p == 2): 22 | return True 23 | else: 24 | if x < 41 and p == 4: 25 | return False 26 | else: 27 | if x >= 41: #перебор камней 28 | return False 29 | if p % 2 == 0: 30 | return f(x + 1, p + 1) and f(x + 5, p + 1) and f(x * 3, p + 1) 31 | else: 32 | return f(x + 1, p + 1) or f(x + 5, p + 1) or f(x * 3, p + 1) 33 | 34 | print(min([i for i in range(1, 100) if f(i, 0)])) -------------------------------------------------------------------------------- /zadanie_5/5-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 3 | 1) Вычисляется сумма S1 всех чётных цифр десятичной записи числа N. Если чётных цифр нет, сумма S1 считается равной 0. 4 | 2) Вычисляется сумма S2 всех цифр десятичной записи числа N, стоящих на позициях с нечётными номерами. Позиции нумеруются слева направо, начиная с 1. 5 | 3) Вычисляется результат R как модуль разности S1 и S2. 6 | Например, N = 1234. Сумма чётных цифр S1 = 2 + 4 = 6. Сумма цифр в позициях с нечётными номерами S2 = 1 + 3 = 4. Результат работы алгоритма R = 6 – 4 = 2. 7 | Укажите наименьшее число, в результате обработки которого по данному алгоритму получится число 27. 8 | ''' 9 | for n in range(1, 10000000): 10 | s = str(n) 11 | s1 = sum([int(i)for i in s if int(i) % 2 == 0]) 12 | s2 = sum([int(s[i]) for i in range(0, len(s), 2)]) 13 | if abs(s2 - s1) == 27: 14 | print(n) 15 | break -------------------------------------------------------------------------------- /zadanie_25/25-19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Обозначим через S сумму простых делителей целого числа, не считая самого числа. Если таких делителей у числа нет, 3 | то считаем значение S равным нулю. Напишите программу, которая перебирает целые числа, большие 250000 в порядке 4 | возрастания и ищет среди них такие, для которых значение S не равно нулю и кратно 17. Программа должна найти первые 5 | 5 таких чисел. Для каждого из них в отдельной строке сначала выводится само число, затем значение S. Строки выводятся 6 | в порядке возрастания найденных чисел. 7 | ''' 8 | 9 | def prost(n): 10 | for i in range(2, n): 11 | if n % i == 0: 12 | return False 13 | return True 14 | 15 | i = 250001 16 | k = 0 17 | while k != 5: 18 | divs = [] 19 | for d in range(2, i+1): 20 | if i % d == 0 and prost(d): 21 | divs.append(d) 22 | if sum(divs) % 17 == 0 and sum(divs) != 0: 23 | k += 1 24 | print(i, sum(divs)) 25 | i += 1 -------------------------------------------------------------------------------- /zadanie_17/17-30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-243.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от 0 до 10 000 включительно. Определите количество пар чисел, в которых хотя бы один из двух элементов больше, 4 | чем наибольшее из всех чисел в файле, делящихся на 171, и хотя бы один элемент из двух содержит стоящие рядом две цифры 1. 5 | В ответе запишите два числа: сначала количество найденных пар, а затем – минимальную сумму элементов таких пар. 6 | В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 7 | ''' 8 | with open('../files/17/17-243.txt') as f: 9 | s = [int(x) for x in f] 10 | numbers = [] 11 | max171 = max([t for t in s if t % 171 == 0]) 12 | for i in range(len(s) - 1): 13 | if (s[i] > max171 or s[i + 1] > max171) and ('11' in str(s[i]) or '11' in str(s[i + 1])): 14 | numbers.append(s[i] + s[i + 1]) 15 | print(len(numbers), min(numbers)) -------------------------------------------------------------------------------- /files/17/17-278.txt: -------------------------------------------------------------------------------- 1 | 648 2 | 804 3 | 805 4 | 786 5 | 23 6 | 894 7 | 939 8 | 906 9 | 689 10 | 168 11 | 900 12 | 986 13 | 965 14 | 584 15 | 83 16 | 591 17 | 473 18 | 0 19 | 236 20 | 844 21 | 214 22 | 969 23 | 432 24 | 73 25 | 587 26 | 411 27 | 665 28 | 40 29 | 155 30 | 294 31 | 934 32 | 263 33 | 729 34 | 454 35 | 1 36 | 686 37 | 382 38 | 358 39 | 223 40 | 844 41 | 757 42 | 555 43 | 648 44 | 474 45 | 432 46 | 954 47 | 523 48 | 746 49 | 392 50 | 645 51 | 347 52 | 903 53 | 420 54 | 949 55 | 641 56 | 884 57 | 521 58 | 317 59 | 660 60 | 596 61 | 920 62 | 689 63 | 55 64 | 80 65 | 706 66 | 142 67 | 299 68 | 175 69 | 832 70 | 644 71 | 926 72 | 902 73 | 262 74 | 379 75 | 327 76 | 670 77 | 190 78 | 978 79 | 838 80 | 639 81 | 461 82 | 425 83 | 686 84 | 564 85 | 350 86 | 65 87 | 528 88 | 172 89 | 653 90 | 835 91 | 226 92 | 792 93 | 313 94 | 649 95 | 89 96 | 710 97 | 784 98 | 317 99 | 236 100 | 774 -------------------------------------------------------------------------------- /zadanie_12/12-18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | 4 | НАЧАЛО 5 | ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>3) 6 | ЕСЛИ нашлось (>1) 7 | ТО заменить (>1, 22>) 8 | КОНЕЦ ЕСЛИ 9 | ЕСЛИ нашлось (>2) 10 | ТО заменить (>2, 2>1) 11 | КОНЕЦ ЕСЛИ 12 | ЕСЛИ нашлось (>3) 13 | ТО заменить (>3, 1>2) 14 | КОНЕЦ ЕСЛИ 15 | КОНЕЦ ПОКА 16 | КОНЕЦ 17 | На вход приведённой ниже программе поступает строка, начинающаяся с символа «>», 18 | а затем содержащая 20 цифр 1, 15 цифр 2 и 40 цифр 3. Определите сумму числовых значений цифр строки, 19 | получившейся в результате выполнения программы 20 | ''' 21 | s = '>' + 20 * '1' + 15 * '2' + 40 * '3' 22 | while '>1' in s or '>2' in s or '>3' in s: 23 | if '>1' in s: 24 | s = s.replace('>1', '22>') 25 | if '>2' in s: 26 | s = s.replace('>2', '2>1') 27 | if '>3' in s: 28 | s = s.replace('>3', '1>2') 29 | 30 | print(sum([int(x) for x in s if x != '>'])) -------------------------------------------------------------------------------- /zadanie_25/25-8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [586132; 586430], 3 | числа, имеющие максимальное количество различных делителей. Найдите минимальное и максимальное из таких чисел. 4 | Для каждого из них в отдельной строчке выведите количество делителей и наибольший делитель, не равный самому числу. 5 | ''' 6 | maximum_divs = 0 7 | for i in range(586132, 586431): 8 | divs = set() 9 | for d in range(1, round(i ** 0.5) + 1): 10 | if i % d == 0: 11 | divs.add(d) 12 | divs.add(i // d) 13 | maximum_divs = max(len(divs), maximum_divs) 14 | print(maximum_divs) 15 | 16 | for i in range(586132, 586431): 17 | divs = set() 18 | for d in range(1, round(i ** 0.5) + 1): 19 | if i % d == 0: 20 | divs.add(d) 21 | divs.add(i // d) 22 | if len(divs) == maximum_divs: 23 | print(sorted(list(divs))[-2],sorted(list(divs))[-3], i) 24 | -------------------------------------------------------------------------------- /zadanie_5/5-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом: 3 | 1. Вычисляется сумма чётных цифр в десятичной записи числа N. Если четных цифр в записи нет, сумма считается равной нулю. 4 | 2. Вычисляется сумма цифр, стоящих на чётных местах в десятичной записи числа N без ведущих нулей. Места отсчитываются 5 | слева направо (от старших разряов к младшим, начиная с единицы). Если число однозначное (цифр на чётных местах нет), 6 | сумма считается равной нулю. 7 | 3. Результатом работы алгоритма становится модуль разности полученных двух сумм. 8 | При каком наименьшем N в результате работы алгоритма получится R = 13? 9 | ''' 10 | for n in range(10, 1000): 11 | number = str(n) 12 | s1, s2 = 0, 0 13 | for x in number: 14 | if int(x) % 2 == 0: 15 | s1 += int(x) 16 | for i in range(1, len(number), 2): 17 | s2 += int(number[i]) 18 | if abs(s2 - s1) == 13: 19 | print(n) -------------------------------------------------------------------------------- /zadanie_8/8-11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Куканова) Маша составляет четырёхбуквенные слова из букв A, B, C, D, E, причём сначала в слове должны быть 3 | расположены гласные в алфавитном порядке, затем согласные в обратном алфавитном порядке. Буквы могут повторяться. 4 | Слово может состоять только из гласных или только из согласных. Пример подходящего слова: AEDC. Сколько различных слов может составить Маша? 5 | ''' 6 | k = 0 7 | letters = 'aedcb' 8 | for a in letters: 9 | for b in letters: 10 | for c in letters: 11 | for d in letters: 12 | word = a + b + c + d 13 | if word.count('ea') == 0 and word.count('de') == 0 and word.count('cd') == 0 and word.count('bc') == 0 and word.count( 14 | 'da') == 0 and word.count('bd') == 0 and word.count('ce') == 0 and word.count('ca') == 0 and word.count( 15 | 'be') == 0 and word.count('ba') == 0: 16 | k += 1 17 | print(k) 18 | 19 | 20 | -------------------------------------------------------------------------------- /zadanie_12/12-9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Дана программа для исполнителя Редактор: 3 | НАЧАЛО 4 | ПОКА нашлось(01) ИЛИ нашлось(02) ИЛИ нашлось(03) 5 | заменить(01, 2302) 6 | заменить(02, 10) 7 | заменить(03, 201) 8 | КОНЕЦ ПОКА 9 | КОНЕЦ 10 | Известно, что исходная строка начиналась с нуля, а далее содержала только единицы, двойки и тройки. 11 | После выполнения данной программы получилась строка, содержащая 60 единиц, 22 двойки и 17 троек. Сколько единиц было в исходной строке? 12 | ''' 13 | for a in range(1, 50): 14 | for b in range(1, 50): 15 | for c in range(1, 50): 16 | s = '0' + a * '1' + b * '2' + c * '3' 17 | while '01' in s or '02' in s or '03' in s: 18 | s = s.replace('01', '2302', 1) 19 | s = s.replace('02', '10', 1) 20 | s = s.replace('03', '201', 1) 21 | if s.count('1') == 60 and s.count('2') == 22 and s.count('3') == 17: 22 | print(a) 23 | break 24 | 25 | -------------------------------------------------------------------------------- /zadanie_23/23-43.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Б. Михлин) Исполнитель К22 преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 3 | 1. Прибавь 1 4 | 2. Прибавь 4 5 | 3. Получи факториал следующего числа 6 | Первая из них увеличивает число на экране на 1, вторая увеличивает число на 4. Факториалом числа N (обозначается как N!) 7 | называют произведение всех натуральных чисел от 1 до N. Третья команда заменяет число N на факториал следующего числа, 8 | т.е. на факториал (N+1). Например, для числа N=3 будет получено 24 = (3+1)! 1·2·3·4). Программа для исполнителя – это последовательность команд. 9 | Сколько существует программ, которые преобразуют исходное число 2 в число 24, и при этом траектория вычислений не содержит число 12? 10 | ''' 11 | import math 12 | def f(x, y): 13 | if x > y or x == 12: 14 | return 0 15 | elif x == y: 16 | return 1 17 | return f(x + 1, y) + f(x + 4, y) + f(math.factorial(x + 1), y) 18 | 19 | print(f(2, 24)) -------------------------------------------------------------------------------- /zadanie_25/25-26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Рассматриваются целые числа, принадлежащих числовому отрезку [631632; 684934], которые представляют собой произведение 3 | двух различных простых делителей. Найдите такое из этих чисел, у которого два простых делителя больше всего отличаются 4 | друг от друга. В ответе запишите простые делители этого числа в порядке возрастания. Если подходящих чисел несколько, 5 | запишите в ответе делители наименьшего из них. 6 | ''' 7 | import time 8 | dd = time.time() 9 | def prost(n): 10 | for i in range(2, n): 11 | if n % i == 0: 12 | return False 13 | return True 14 | 15 | maximum = 0 16 | for i in range(631632, 684935): 17 | for d in range(2, round(i**0.5)+1): 18 | if d * (i // d) == i and prost(d) and prost(i // d) and d != (i // d): 19 | if abs(i // d - d) <= maximum: 20 | maximum = i // d - d 21 | d1, d2 = d, i // d 22 | break 23 | print(maximum, d1, d2, time.time()- dd) 24 | -------------------------------------------------------------------------------- /files/24/k7.txt: -------------------------------------------------------------------------------- 1 | CACCCBCACCCBBACCCCCACCCCBCCCCBCCCBCCCACCCAACBBCCACACCCCBCCCACCBCBCBACCBBACBBBCCABAACCCABBCAACABCCCCCBCCACCCCCACACBBCCCCACACCCCABCCCCACCBCCCCCCBCCCBCACBCCCACCBACAAABABCCACAACCCCACCBACBACCCACACBACCACCCCCCACABBCCBCCACBCCBBAACCACACCCAACBCACBCCBABBBCCABAACCCBCCCCCCCCCCCBCCCCABABCCBCAABACACCCACABCCCCCCCBCCACCBCCCBBCABCBCCCCCCCBCBCCBCACCCCCCBACCACCCCABBCABAACCCCACCCCCCCCCCBAAACACACACCBCBCCBCACABCBBCBCCCBCCBCCBACACCCCCCACBCCCCAACCBCCCAACACBCAACACCCCCBCACBBCCCBCCCBCCCBACAACACAACBBBBCCCACBCCCACCBBCBBCCCBBBCBCCBCABAAACCCACABABCACCCCAACBCAABABBAABCCABCCCBBBABCBACACCCACBCCCCCAABCBCCCCCBCCCACCCCCCCCCCCACCABCBCACACACACCACAACACCCACBCBBACACCCCCCCCABCACACABCCACCCCABCACCCCBCCCCCBBACACCBACCCCCACCBBCBBBBCCCACBBCCBAACBCCCCCAACCCACCACBAABCCCBCCBCCCCCBCACCBCCCCCCACBCCCBCAAACCCABCCCACCBAAACCBCCCCABCABBCCAACCBCABCAACCBCCCBCCCCCCCABBCCCCBCACCABBACCBBBCCAACACBAAABCCCBCCCABCBCCCBCCCBBBABCCCCACCCACCCCCBBBCACCACAAACACABCBCCACBBCCCCCCCBACCCCCCCCBACCCBACBCCCCBBCCACACCBCCCCACBCBAACCBCBAACCAACCCAAACBCACCCCBCBCBCCCCBACAC -------------------------------------------------------------------------------- /zadanie_17/17-31.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-243.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от 0 до 10 000 включительно. Определите количество пар чисел, в которых хотя бы один из двух элементов больше, чем наибольшее 4 | из всех чисел в файле, делящихся на 153, и в двоичной записи хотя бы одного элемента из двух содержится цепочка цифр 1111. 5 | В ответе запишите два числа: сначала количество найденных пар, а затем – минимальную сумму элементов таких пар. 6 | В данной задаче под парой подразумевается два идущих подряд элемента последовательности. 7 | ''' 8 | with open('../files/17/17-243.txt') as f: 9 | s = [int(x) for x in f] 10 | numbers = [] 11 | max153 = max([t for t in s if t % 153 == 0]) 12 | for i in range(len(s) - 1): 13 | if (s[i] > max153 or s[i + 1] > max153) and ('1111' in bin(s[i]) or '1111' in bin(s[i + 1])): 14 | numbers.append(s[i] + s[i + 1]) 15 | print(len(numbers), min(numbers)) -------------------------------------------------------------------------------- /files/24/24-4.txt: -------------------------------------------------------------------------------- 1 | lazXBXHvqyx20WdbkazLmm5NOLiXSUIDHSj17Vnj3RKC7Dx5nRdhuy95bhqsouKPhZ0GpNNLBZdvprvTdklekKqH2GE6Ozvd3WKIi3JBL7kBgnRrFi97j5frmoUgtFvkHeLegHX6cXkiGtcT93tFt5WxeYdK1CAA4lbAjhPwvOQHSF48Optd9AS3t2YIsw68q9VvYK3vYS2hDgN40ed5c1iKbNEkFSxDLXipuNgmE2uZC5T9xYoHRVOzzIiRNJZO01SgZ9YAk6Y48UIX4WBveNLHMwqxmyKorQh3tGJrz7VxUZFBCI92z1W84Ak3fRcOGvGBQQB0lH0xqGmrpZbkv6gW51HRAfYjbbmX66ZW3yfC91DQIhLgtZz34KEktWD2miL2D8auOXPiZ1LVqVQWRBsUpEbzsS3ChaW7DvjxvnlLhmYjMVb4VaXQptaVP4tICmuyvTYULI0XfzmYrtwSwFeJRohtxyWlO0BFD6fop0NTFmnJJbsS3YA5zulC5SllQc8tM44Hs5OnokYdRVsslCHeznHCcqS4njH3ukqTpb94u5d0uOxEA541PmyB0FnxpD7G40SOQRRtQ4CPkH6ppkhd8s9FC0tUD7ciPQD36xA3Q1ACBzVEbRdFEQXc3XQutQrYahOwHVKettOARZ1pAMTCEMUpQ5Eq2CqvSIk0y0godoGZRNOCOA79QqyO3NbC70OMDRmLK50BKgxMmEhxb7hnEX4RPnhoXlS6TNz8P9EutXcIxih4b7cTrgAnArKepLS6q6vGwXhlQyxmUiPrlZgqQE2Dzdnx0YNOxaGHAPTiW9DG1nl4ccF2GXkvTGpIqgeYynfL3rYYiOKvS2yzcu0Eui0FEyAlaoyZJAtWdRmPKzplf2fd33r9h97GgyqdDkJH6PYenFVvhlLsMGcdNV5tQ0uswTYMk78NRuWPmeety56YQIf4Axm3ID4SFy06IdBEZt62EpomW0pSKkdYDJeF1z1iownkzrqjWRC1 2 | -------------------------------------------------------------------------------- /zadanie_25/25-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Пусть M – сумма минимального и максимального натуральных делителей 3 | целого числа, не считая единицы и самого числа. Если таких делителей 4 | у числа нет, то значение M считается равным нулю. 5 | Напишите программу, которая перебирает целые числа, бо́льшие 700 000, 6 | в порядке возрастания и ищет среди них такие, для которых значение M 7 | оканчивается на 8. Выведите первые пять найденных чисел 8 | и соответствующие им значения M. 9 | Формат вывода: для каждого из пяти таких найденных чисел в отдельной 10 | строке сначала выводится само число, затем – значение М. 11 | Строки выводятся в порядке возрастания найденных чисел. 12 | Количество строк в таблице для ответа избыточно. 13 | ''' 14 | for i in range(700001, 700500): 15 | divs = set() 16 | for d in range(2, round(i ** 0.5)+1): 17 | if i % d == 0: 18 | divs.update((d, i//d)) 19 | if len(divs) > 0: 20 | m = max(divs) + min(divs) 21 | if m % 10 == 8: 22 | print(i, m) -------------------------------------------------------------------------------- /zadanie_25/25-29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) Обозначим через M разность максимального и минимального числа среди простых делителей целого числа, 3 | не считая самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю. Напишите программу, 4 | которая перебирает целые числа, большие 450000, в порядке возрастания и ищет среди них такие, для которых значение M 5 | при делении на 29 даёт в остатке 11. Выведите первые 4 найденных числа в порядке возрастания, справа от каждого числа запишите соответствующее значения M. 6 | ''' 7 | def prost(n): 8 | for d in range(2, n): 9 | if n % d == 0: 10 | return False 11 | return True 12 | 13 | i = 450001 14 | k = 0 15 | while k != 4: 16 | divs = [] 17 | for d in range(2, i): 18 | if i % d == 0 and prost(d): 19 | divs.append(d) 20 | if len(divs) > 1: 21 | m = max(divs) - min(divs) 22 | if m % 29 == 11: 23 | k += 1 24 | print(i, m) 25 | i += 1 26 | 27 | 28 | -------------------------------------------------------------------------------- /zadanie_17/17-22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (П. Волгин) В файле 17-278.txt содержится последовательность целых чисел. Элементы последовательности могут принимать 3 | целые значения от 0 до 1000. Определите сначала количество троек чисел, в которых хотя бы один из элементов троек больше, 4 | чем сумма всех цифр «3» в пятеричной записи всех чисел в файле, кратных 32, а затем максимальную из сумм таких троек. 5 | Под тройкой подразумевается три идущих подряд элемента последовательности. 6 | ''' 7 | 8 | def pyaterka(n): 9 | pyat = '' 10 | while n > 0: 11 | pyat += str(n % 5) 12 | n //= 5 13 | return pyat[::-1] 14 | 15 | with open('../files/17/17-278.txt') as f: 16 | s = [int(x) for x in f] 17 | s32 = [pyaterka(c) for c in s if c % 32 == 0] 18 | k = sum([j.count('3') for j in s32]) * 3 19 | numbers = [] 20 | for i in range(len(s) - 2): 21 | if (s[i] > k) or s[i + 1] > k or s[i + 2] > k: 22 | numbers.append(s[i] + s[i + 1] + s[i + 2]) 23 | print(len(numbers), max(numbers)) -------------------------------------------------------------------------------- /zadanie_8/8-1.py: -------------------------------------------------------------------------------- 1 | """ 2 | (А. Богданов) Петя составляет пятибуквенные слова перестановкой букв слова МАРТА. 3 | При этом он избегает слов с двумя подряд одинаковыми буквами. 4 | Сколько всего различных слов может составить Петя? 5 | """ 6 | letters = 'марта' 7 | words = set() 8 | for a in letters: 9 | for b in letters: 10 | for c in letters: 11 | for d in letters: 12 | for e in letters: 13 | word = a + b + c + d + e 14 | if 'аа' not in word and word.count('м') == 1 and word.count('а') == 2 and word.count('р') == 1 \ 15 | and word.count('т') == 1: 16 | words.add(word) 17 | print(len(words)) 18 | 19 | # решение с использованием itertools 20 | 21 | from itertools import permutations 22 | 23 | words = set(permutations("МАРТА", r = 5)) 24 | counter = 0 25 | 26 | for word in words: 27 | word = ''.join(word) 28 | if 'АА' not in word: 29 | counter += 1 30 | 31 | print(counter) 32 | -------------------------------------------------------------------------------- /zadanie_5/5-2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (Е. Джобс) Автомат обрабатывает десятичное натуральное число N по следующему алгоритму: 3 | 1) Строится двоичная запись числа N. 4 | 2) К этой записи справа дописывается 0, если число нечетное, и слева 1 в обратном случае. 5 | 3) Если единиц в двоичном числе получилось четное количество, справа дописывается 1, иначе 0. 6 | Например, двоичная запись 1010 числа 10 будет преобразована в 110100. 7 | Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма. 8 | Укажите минимальное число N, для которого результат работы алгоритма будет больше 228. В ответе это число запишите в десятичной системе счисления. 9 | ''' 10 | for n in range(1, 1000): 11 | s = bin(n)[2:] 12 | if n % 2: 13 | s += '0' 14 | else: 15 | s = '1' + s 16 | if s.count('1') % 2 == 0: 17 | s += '1' 18 | else: 19 | s += '0' 20 | if int(s, 2) > 228: 21 | print(n) 22 | break -------------------------------------------------------------------------------- /zadanie_17/17-35.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-1.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от –10 000 до 10 000 включительно. Определите количество троек, в которых хотя бы два из трёх элементов меньше, 4 | чем среднее арифметическое всех чисел в файле, и десятичная запись хотя бы двух из трёх элементов содержит цифру 5. 5 | В ответе запишите два числа: сначала количество найденных троек, а затем – максимальную сумму элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. 6 | ''' 7 | def nCond(a, fun): 8 | return [fun(k) for k in a].count(True) 9 | 10 | with open('../files/17/17-1.txt') as f: 11 | s = [int(x) for x in f] 12 | sred = sum(s) / len(s) 13 | res = [] 14 | for i in range(len(s) - 2): 15 | triple = s[i:i+3] 16 | if nCond(triple, lambda x: x < sred) >= 2 and nCond(triple, lambda x: '5' in str(x)) >= 2: 17 | res.append(sum(triple)) 18 | print(len(res), max(res)) 19 | -------------------------------------------------------------------------------- /zadanie_5/5-33.py: -------------------------------------------------------------------------------- 1 | ''' 2 | На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 3 | 1) Строится двоичная запись числа N. 4 | 2) К этой записи дописываются ещё несколько разрядов по следующему правилу: 5 | а) если N чётное, то к нему справа приписывается в двоичном виде сумма цифр его двоичной записи; 6 | б) если N нечётное, то к нему справа приписываются два нуля, а слева единица. 7 | Например, двоичная запись числа 1101 будет преобразована в 1110100. 8 | Полученная таким образом запись (в ней как минимум на один разряд больше, чем в записи исходного числа N) является двоичной записью искомого числа R. 9 | Сколько существует различных чисел N, для которых результат работы данного алгоритма принадлежит отрезку [500; 700]? 10 | ''' 11 | k = 0 12 | for n in range(1, 1000): 13 | s = bin(n)[2:] 14 | if n % 2 == 0: 15 | s += bin(sum([int(i) for i in s]))[2:] 16 | else: 17 | s = '1' + s + '00' 18 | if 500 <= int(s, 2) <= 700: 19 | k += 1 20 | print(k) -------------------------------------------------------------------------------- /zadanie_5/5-27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам. 3 | 1. Из цифр, образующих десятичную запись N, строятся наибольшее и наименьшее возможные двузначные числа (числа не могут начинаться с нуля). 4 | 2. На экран выводится разность полученных двузначных чисел. 5 | Пример. Дано число N = 351. Наибольшее двузначное число из заданных цифр – 53, наименьшее – 13. На экран выводится разность 53 – 13 = 40. 6 | Чему равно количество чисел N на отрезке [300; 400], в результате обработки которых на экране автомата появится число 20? 7 | ''' 8 | k = 0 9 | for n in range(300, 401): 10 | s = sorted(str(n)) 11 | if s[0] == '0': 12 | if s[1] == '0': 13 | minimum = maximum = int(s[2] + '0') 14 | else: 15 | minimum = int(s[1] + '0') 16 | maximum = int(s[2] + s[1]) 17 | else: 18 | minimum = int(s[0] + s[1]) 19 | maximum = int(s[2] + s[1]) 20 | if maximum - minimum == 20: 21 | k += 1 22 | print(k) -------------------------------------------------------------------------------- /zadanie_17/17-36.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В файле 17-1.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения 3 | от –10 000 до 10 000 включительно. Определите количество троек, в которых хотя бы два из трёх элементов меньше, 4 | чем среднее арифметическое всех чисел в файле, и десятичная запись всех трёх элементов тройки содержит цифру 1. 5 | В ответе запишите два числа: сначала количество найденных троек, а затем – максимальную сумму элементов таких троек. 6 | В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. 7 | ''' 8 | def nCond(a, fun): 9 | return [fun(k) for k in a].count(True) 10 | 11 | with open('../files/17/17-1.txt') as f: 12 | s = [int(x) for x in f] 13 | sred = sum(s) / len(s) 14 | res = [] 15 | for i in range(len(s) - 2): 16 | triple = s[i:i+3] 17 | if nCond(triple, lambda x: x < sred) >= 2 and nCond(triple, lambda x: '1' in str(x)) == 3: 18 | res.append(sum(triple)) 19 | print(len(res), max(res)) 20 | 21 | -------------------------------------------------------------------------------- /zadanie_5/5-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам. 3 | 1. Из цифр, образующих десятичную запись N, строятся наибольшее и наименьшее возможные двузначные числа (числа не могут начинаться с нуля). 4 | 2. На экран выводится разность полученных двузначных чисел. 5 | Пример. Дано число N = 351. Наибольшее двузначное число из заданных цифр – 53, наименьшее – 13. На экран выводится разность 53 – 13 = 40. 6 | Чему равно наименьшее возможное трёхзначное число N, в результате обработки которого на экране автомата появится число 63? 7 | ''' 8 | for n in range(100, 1000): 9 | s = sorted(str(n)) 10 | if s[0] == '0': 11 | if s[1] == '0': 12 | minimum = maximum = int(s[2] + '0') 13 | else: 14 | minimum = int(s[1] + '0') 15 | maximum = int(s[2] + s[1]) 16 | else: 17 | minimum = int(s[0] + s[1]) 18 | maximum = int(s[2] + s[1]) 19 | if maximum - minimum == 63: 20 | print(n) 21 | break 22 | 23 | 24 | -------------------------------------------------------------------------------- /zadanie_25/25-17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Рассмотрим произвольное натуральное число, представим его всеми возможными способами в виде произведения двух 3 | натуральных чисел и найдём для каждого такого произведения разность сомножителей. Например, для числа 18 получим: 4 | 18 = 18*1 = 9*2 = 6*3, множество разностей содержит числа 17, 7 и 3. Подходящей будем называть пару сомножителей, 5 | разность между которыми не превышает 90. Найдите все натуральные числа, принадлежащие отрезку [500000; 1000000], 6 | у которых есть не менее трёх подходящих пар сомножителей. В ответе перечислите найденные числа в порядке возрастания, 7 | справа от каждого запишите наибольший из всех сомножителей, образующих подходящие пары. 8 | ''' 9 | for n in range(500000, 1000001): 10 | d2Max = 0 11 | d = 1 12 | k = 0 13 | while d*d <=n: 14 | if n % d == 0: 15 | if (n//d) -d <=90: 16 | k = k+1 17 | d2Max = max(n//d, d2Max) 18 | if k ==3: 19 | print(n, d2Max) 20 | break 21 | d+=1 22 | -------------------------------------------------------------------------------- /zadanie_26/26-4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | (А. Кабанов) В текстовом файле записан набор натуральных чисел. Гарантируется, что все числа различны. 3 | Необходимо определить, сколько в наборе таких пар чисел с чётной суммой, что их среднее арифметическое тоже присутствует 4 | в файле, и чему равно наибольшее из средних арифметических таких пар. 5 | Входные данные представлены в файле 26-45.txt следующим образом. 6 | Первая строка содержит целое число N – общее количество чисел в наборе. Каждая из следующих N строк содержит одно число, не превышающее 109. 7 | В ответе запишите два целых числа: сначала количество пар, затем наибольшее среднее арифметическое. 8 | ''' 9 | with open('../files/26/26-45.txt') as f: 10 | n = int(f.readline()) 11 | s = [int(i) for i in f] 12 | slovar = dict(zip(s, [0 for t in range(n)])) 13 | ss = [] 14 | 15 | for i in range(len(s) - 1): 16 | for j in range(i + 1, len(s)): 17 | if (s[i] + s[j]) % 2 == 0 and (s[i] + s[j]) // 2 in slovar: 18 | ss.append((s[i] + s[j]) // 2) 19 | print(len(ss), max(ss)) -------------------------------------------------------------------------------- /zadanie_26/26-1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | В текстовом файле записан набор натуральных чисел. Гарантируется, что все числа различны. Необходимо определить, сколько 3 | в наборе таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле, и чему равно наименьшее из 4 | средних арифметических таких пар.Входные данные представлены в файле 26-53.txt следующим образом. 5 | Первая строка содержит целое число N – общее количество чисел в наборе. Каждая из следующих N строк содержит одно число, 6 | не превышающее 10**9. 7 | В ответе запишите два целых числа: сначала количество пар, затем наименьшее среднее арифметическое. 8 | 9 | ''' 10 | with open('../files/26/26-53.txt') as f: 11 | n = int(f.readline()) 12 | s = [int(i) for i in f] 13 | slovar = dict(zip(s, [0 for t in range(n)])) 14 | ss = [] 15 | for i in range(len(s) - 1): 16 | for j in range(i + 1, len(s)): 17 | if s[i] % 2 == 0 and s[j] % 2 == 0 and (s[i] + s[j]) // 2 in slovar: 18 | ss.append((s[i] + s[j]) // 2) 19 | print(len(ss), min(ss)) 20 | 21 | --------------------------------------------------------------------------------