Сопоставь буквы графа с номерами в таблице. Используй permutations для автоматического подбора.
from itertools import *
# Тут пишем связи из таблицы (построчно)
a = '478 38 256 15 34 37 168 127'.split()
# Тут пишем связи из графа (в любом порядке)
s = 'DE DG GC GA BC FB FE FH BH AH'.split()
print('1 2 3 4 5 6 7 8'
...
Два способа: через itertools.product или вложенные циклы. Подбираем пропуски в таблице.
# Способ 1 — itertools
from itertools import *
def f(x, y, z, w):
# тут пишем логическое условие из задачи
return ((y and (x == (not z))) <= w) and (z <= y)
for x1, x2, x3, x4, x5 in product([0, 1], repeat=5):
...
Решается в Excel через фильтры и связи между таблицами. Самый практичный способ.
Условие Фано: ни одно слово не начало другого. Строим дерево и находим код.
Перевод между системами, операции с цифрами. Функция перевода в любую СС до 36.
# Функция перевода в любую СС (вместо X — основание)
def tro(n):
s = ''
while n > 0:
s = str(n%X) + s
n = n // X
return s
# Питоновские функции перевода
x = bin(n)[2:] # в 2-ю
x = oct(n)[2
...
Рисуем алгоритм, считаем точки и площадь. Помним про объединение и пересечение.
from turtle import *
tracer(0) # отключаем анимацию
m = 15 # масштаб
screensize(2000, 2000)
# Переписываем алгоритм из задачи
for i in range(4):
fd(3 * m)
lt(270)
fd(5 * m)
rt(90)
#
...
Формулы: I = d × k × t × i. Часто округление в меньшую сторону для изображений.
# ===== ЗВУК =====
# I = d * k * t * i
# d = частота дискретизации, В ГЕРЦАХ
# i = разрешение (бит)
# k = каналы (2-стерео, 1-моно, 4-квадро)
# t = время в СЕКУНДАХ
I = 967 * 1024 * 1024 * 8 # объём в битах
t = I / (4
...
Product — с повторениями, permutations — без. Проверки на условия.
from itertools import *
# С повторениями
for i in product('123', repeat=3):
x = ''.join(i)
# БЕЗ повторений
for i in permutations('123', r=3):
x = ''.join(i)
# Проверки
if x[0] != '0': # не начинается
...
Открываем файл, парсим строки. Ищем повторяющиеся и уникальные элементы.
f = open('9.txt')
for s in f:
a = [int(x) for x in s.split()] # или split(';') если файл csv
povt = [x for x in a if a.count(x) == 2] # ровно 2 раза
razl = [x for x in a if a.count(x) == 1] # уникальные
...
Поиск в текстовых файлах, подсчёт вхождений слов.
import os
k = 0
for f in os.listdir('.'):
if f.endswith('.txt'):
with open(f) as fh:
for line in fh:
k += line.lower().count('слово')
print(k)
I = i × k, N = 2^i. Округление в большую или меньшую сторону.
from math import *
for n in range(1, 2158 + 1):
i = ceil(log2(n))
ves = ceil((i * 377) / 8)
if 23155 * ves > 5536 * 1024:
print(n)
break
Команды замены в строке. Последовательное применение правил.
Адрес сети = IP & Маска. Библиотека ipaddress. 5 типов задач.
from ipaddress import *
# Создание сети
net = ip_network('1.2.3.4/255.255.255.192', 0)
net = ip_network('1.2.3.4/26', 0) # или с префиксом
print(net) # сеть / кол-во единиц
print(net[0]) # адр
...
Перевод в любую СС, уравнения с неизвестными цифрами.
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
def my_convert(number, system):
result = ''
while number > 0:
result += alphabet[number % system]
number //= system
return result[::-1
...
Проверка условий для всех x. Поразрядная конъюнкция. Отрезки.
# Базовый
for a in range(1, 1500):
if all(((x > 56) or (y >= x) or (3*x - y < a))
for x in range(10000) for y in range(10000)):
print(a)
break
# Поразрядная конъюнкция
for a in range(1, 10
...
Работает на всё. @lru_cache(None) меняем на 100 или 500 если не работает.
import sys
sys.setrecursionlimit(1000000)
from functools import *
@lru_cache(None) # None меняем на 100 или 500 если не работает
def f(n):
if n < 5:
return n
return 2 * n * f(n - 4)
for i in range(140
...
Обработка файла, пары и тройки чисел. Поиск минимумов и максимумов.
f = open('17.txt')
a = [int(x) for x in f]
# пары (a[i], a[i+1])
for i in range(len(a) - 1):
pass
# тройки (a[i], a[i+1], a[i+2])
for i in range(len(a) - 2):
pass
# число из 5 цифр:
if len(str(abs(a[i]))) == 5
...
DP-таблица: dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]
1 куча, 2 кучи. any() для текущего, all() для противника. all→any только если вопрос про «неудачный ход».
# 1 куча: +3 +6 *3
def f(s,m):
if s >= 132: return m % 2 == 0
if m == 0: return 0
h = [f(s+3,m-1), f(s+6,m-1), f(s*3,m-1)]
return any(h) if m % 2 != 0 else all(h)
# для 19 номера all может меняться на
...
Решается в Excel. Время = время + МАКС(время зависимых).
Рекурсивный подсчёт путей. Промежуточные, ограничения, последняя команда.
# Базовый
def f(x, y):
if x > y: return 0
if x == y: return 1
return f(x+1, y) + f(x*2, y)
# Промежуточные числа — перемножаем
print(f(4,8) * f(8,10) * f(10,15))
# С ограничением (запрет числа)
def f(x, y):
...
Двойной цикл Кабанова — рабочий на всё. l+m оптимизация.
s = open('24_28765.txt').readline()
m = 5 # максимум
for l in range(len(s)):
for r in range(l + m, len(s)):
c = s[l:r+1]
if c.count('BC') > 180: # меняем условие под задачу
break
...
Простые, делители, простые делители. Маски fnmatch.
# Простое число
def prost(n):
return n > 1 and all(n%d != 0 for d in range(2, int(n**0.5)+1))
# Все делители
def delit(n):
a = set()
for i in range(1, int(n**0.5)+1):
if n % i == 0:
a.add
...
Чтение файла, группировка, фильтрация. Типичная задача на обработку.
Разбиение на кластеры, поиск центра тяжести. Евклидово расстояние.
from math import dist
cl1 = []; cl2 = []
for i in open('27'):
x, y = [float(x) for x in i.split()]
if y < 5: cl1.append([x,y])
if y > 5: cl2.append([x,y])
def center(cl):
mn = []
for p1 in cl:
...