Перейти к содержимому

Yandex / Яндекс

  • на вход последовательность единиц и нулей, найти возможную максимально длинную последовательность единиц которая может получиться если из массива убрать 1 ноль; go/slices-arrays
  • дерево где в каждом узле буква, нужно вернуть 2 вершины у которых в листьях одинаковый набор уникальных букв; algorithms/data-structures
  • Есть очень большое число в виде строки - «23148728156921356234». Нужно умножить его на int цифру 0-9; go/strings-runes
  • Есть массив чисел [1, 2, 3, 4, 6, 7, 9] нужно свернуть его в интервалы -> [1-4, 6-7, 9]; go/slices-arrays
  • Есть интервалы времен двух пользователей которые играют в онлайн игру. Задача - найти пересечения по времени когда эти пользователи могли бы поиграть вместе: algorithms/general
intervals1=[4-8, 11-13, 15-20]
intervals2=[6-9, 12-17]
answer: [6-8, 12-13, 15-17]
  • Реализовать RPN-калькулятор (обратная польская нотация). Нужно написать функцию которая на вход принимает строку а на выходе отдает результат. Пример выражения - «3 4 + 2 _ 1 +» go/strings-runes
  • Реализовать функцию которая из текста выпиливает смайлики: go/strings-runes
:)
:-)))))
:-((((
:(
  • Написать функцию которая определяет является ли входная строка палиндромом или нет. Скипать все не алфавитные символы, не смотреть на регистр.

3-й этап: 1.

# Написать функцию, где:
# вход - подается список таплов, в тапле (start_date: int, end_date: int)
# выход - вернуть максимальное число гостей в конкретный день
# [(1, 4), (2, 5), (2, 3), (3, 4) (12, 13)] ->3
# Дан массив целых чисел, нужно найти непустой подотрезок
# (непрерывную подпоследовательность)
# с заданной суммой target, либо сказать, что это невозможно.
# findTarget([9, -6, 5, 1, 4, -2], 10) ->(2, 4)

Допустим, нам нужно передать данные из некоторого источника некоторому потребителю. При этом источник отдает данные небольшими пачками, а потребитель оптимальнее работает с крупными батчами (реальный пример - поставка данных из очередей типа Kafka в базу Clickhouse). Также, источник умеет сохранять прогресс чтения и по мере обработки данных потребителем этот прогресс нужно обновлять, чтобы в случае рестарта процесса не перечитывать все с нуля/с произвольной позиции.

Допустим, источник и потребитель описываются интерфейсами Producer и Consumer.

  • читает данные из источника и передает их потребителю. Считаем, что источник условно бесконечный;
  • при чтении формирует буфер, максимальный размер которого задается константой MaxItems и передает данные потребителю только когда буфер близок к заполнению;
  • после обработки данных потребителем, вызывает для них метод Commit, передавая в него cookies в той последовательности, в которой они были получены от источника;
  • в случае возникновения ошибок - функция должна завершиться. Если ошибка возникла на вызове Commit - больше никакие данные не должны быть закоммичены (т.к. в противном случае нарушится очередность коммитов).
type Producer interface {
// Next returns:
// - batch of items to be processed
// - cookie to be commited when processing is done
// - error
Next() (items []any, cookie int, err error)
// Commit is used to mark data batch as processed
Commit(cookie int) error
}
const MaxItems = 9999
type Consumer interface {
Process(items []any) error
}
func Pipe(p Producer, c Consumer) error {}

Представим что есть готовый поисковик, где пользователь вводит длинный запрос и система отдает поисковую выдачу. Компания хочет к этому поиску добавить поисковые советы в виде списка из нескольких вариантов, которые должны появляться по мере ввода текста запроса. Необходимо спроектировать такую систему.