Найти в Дзене
Я, Golang-инженер

#26. Подготовка к экзамену в финтех Тинькофф

Оглавление

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.

Хой! Джедаи и Амазонки!

В этом посте я расскажу, как готовлюсь к экзамену на бесплатное обучение Go в Тинькофф. Будет информация по предыдущему контесту и примеры задач. Go!

В предыдущем посте, в котором рассказывал о функции Compare пакета strings, поделился ссылкой на обучение в Тинькофф для всех желающих. Регистрация там была до 1 февраля 2023 года. Я эту регистрацию прошёл, и сейчас открылся доступ к экзамену. Да, чтобы поступить на обучение, нужно пройти экзамен.

И тут я понял, почему ребята из Тинькофф делали ограничение по дате для регистрации. Можно было бы сейчас зайти с одного аккаунта и посмотреть задачи. Подготовиться как следует и далее основным аккаунтом всё решить на 5+.

А сейчас нужно решать всё с первого раза. Ладно, для меня это больше практика. Вот что нам выдаётся: нужно заполнить анкету и пройти экзамен.

Скрин курса "Go. Для всех желающих"
Скрин курса "Go. Для всех желающих"

В анкете нет чего-то примечательного. Ну, просят ссылку на резюме и показать самый сложный проект (на Go). А вот что по экзамену:

Информация об экзамене
Информация об экзамене

Что здесь важного - проходить экзамен нужно за один раз, и длится он 3 часа. Пересдач не будет. Пауз тоже. Но будет возможность задать вопрос в чат в техподдержку. Техподдержка работает только в определённые часы. Всё это нужно знать и применять - тогда шанс пройти выше.

А сейчас я решил посмотреть, какие были задачи на прошлых контестах. Благо, такая возможность есть - нашёл в открытых источниках пример и пояснения к задачам. Пояснения к задачам выдавались после экзамена для самоанализа. Здесь я их добавил сразу.

Кроме задач, я нашёл обратную связь куратора, который проверял работы участников. Полезно будет ознакомиться и с ними.

Контест Тинькофф - Лето 2021

Итоги контеста

  • Экзамены: экзамен по программированию, анкета;
  • заявок на курс: 1432;
  • решений экзаменов: 478;
  • программирование. В среднем у поступивших ребят есть 3 частично решенных задачи. Что значит частично? Решение не учитывает крайние случаи, в некоторых программах встречается переполнение типов, не учтены лимиты по времени и памяти. При нижних порогах баллов (270) большую роль играла анкета;
  • зачислено на обучение: 40 человек.

Мои комментарии по итогам контеста:

33,3% из зарегистрировавшихся на контент, попытались хоть что-то решить;
8% из тех, кто решал экзамен - зачислены на обучение.

Комментарии куратора контеста

Для начала мы отбирали наиболее заинтересованных именно в нашем курсе людей, выбрали тех, у кого первым/вторым приоритетом был Golang.
Брали лучших на основе результатов экзамена по программированию, из них отбирали тех, кто сможет уделять достаточное время курсу и курсовой работе. Внимательно изучали ответы на вопросы анкеты и информацию, которую оставили о себе участники. Особенно отмечали кандидатов, которые указывали, что им хотелось бы продолжать развивать полученные навыки в рамках стажировки/работы в Тинькофф. Также внимательно смотрели на причину по которой кандидаты хотят на курс и выбирали наиболее мотивированных.

Особые условия для всех задач

  • Имя входного файла: стандартный ввод
  • Имя выходного файла: стандартный вывод
  • Ограничение по времени: 1 секунда
  • Ограничение по памяти: 256 мегабайт

Задача А. Пополам

Вам дана строка S длины 4, состоящая из заглавных букв латинского алфавита. Определите, правда ли, что S состоит из двух различных букв, каждая из которых встречается дважды. Вам нужно ответить на T независимых наборов входных данных.

Формат входных данных

Первая строка теста содержит одно целое число T (1 <= T <= 100) — количество наборов входных данных. Затем следуют T наборов входных данных. В первой строке набора входных данных вводится строка S (|S| = 4).

Формат выходных данных

Для каждого набора входных данных выведите ответ на него — «Yes», если S состоит из двух букв, каждая из которых встречается дважды, и «No» иначе.

Пример

Пример ввода-вывода
Пример ввода-вывода

Пояснение к решению

Чтобы проверить данный критерий, можно отсортировать символы в строке и проверить, что первый символ равен второму, третий – четвертому, а второй и третий не равны.

Задача B. Вокруг да около

Вдоль круглого пруда с периметром K расположены N деревень. i-я деревня находится в Ai метрах от самой северной точки пруда по часовой стрелке.

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

Найдите минимальное расстояние, которое вам придется преодолеть, чтобы посетить все N деревень

Формат входных данных

В первой строке вводятся два числа K и N (2 <=K <= 10^6 , 2 <= N <= 2 · 10^5 ) — периметр пруда и количество деревень соответственно.

В следующей строке вводятся N чисел Ai (0 <= Ai < K) — расстояния от самой северной точки пруда до деревень.

Гарантируется, что A1 < A2 < . . . < An.

Формат выходных данных

Выведите одно число - минимальное расстояние, которое необходимо пройти, чтобы посетить все N деревень.

Пример

Пример ввода-вывода
Пример ввода-вывода

Замечание

  1. В первом примере можно начать путешествие в деревне 1, затем посетить деревню 2, а затем деревню 3. Суммарная длина такого путешествия будет равна 10.
  2. Во втором примере можно начать путешествие в деревне 3, затем посетить деревню 1, а затем деревню 2. Суммарная длина такого путешествия будет равна 10.

Пояснение

Рассмотрим N дуг, соединяющие соседние деревни. Можно заметить, что нам точно будет необходимо преодолеть N − 1 дугу, при этом этого достаточно, чтобы посетить все города. Поэтому мы можем выбрать из этих N дуг N − 1 самую короткую и составить маршрут, проходящий только через эти дуги и посещающий все города.

Задача C. Больше бревен!

У вас есть N бревен, длина i-го бревна равна Ai. Вы можете выполнить следующую операцию не более K раз:

• Выбрать одно из N бревен и разрезать его. Когда вы разрезаете бревно длины L на расстоянии t (0 < t < L, t может быть нецелым) от его конца, оно превращается в два бревна длины t и L − t соотвественно.

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

Формат входных данных

В первой строке вводятся два числа — N и K (1 <= N <= 2 · 10^5 , 0 <= K <= 10^9 ) — количество бревен и разрезов соответственно.

Во второй строке вводятся N чисел Ai (1 <= Ai <= 10^9 ) — длины бревен.

Формат выходных данных

Выведите одно число - минимальную длину самого длинного бревна после разрезов, округленную вверх.

Пример

Пример ввода-вывода
Пример ввода-вывода

Пояснение

-6

Задача D. Круговое путешествие

-7

Формат входных данных

-8

Формат выходных данных

Выведите одно число - ответ на задачу по модулю 998244353.

Пример

Пример ввода-вывода
Пример ввода-вывода

Замечание

В первом примере существуют 4 различных путешествия:

  1. (1, 2, 1, 2, 1)
  2. (1, 2, 1, 3, 1)
  3. (1, 3, 1, 2, 1)
  4. (1, 3, 1, 3, 1)

Пояснение

-10

Задача E. Подсчет последовательностей

-11

Формат входных данных

В первой строке вводятся два числа N и M (1 <= N, M <= 5000).

Формат выходных данных

Выведите одно число — количество таких последовательностей A по модулю 998244353.

Пример

-12

Пояснение

-13

-//-//-

Напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и плюс в карму за помощь каналу.

Итоги

В следующих постах буду решать эти задачи. Крайний срок сдачи - 9 февраля 6:59. Время, скорее всего, по МСК. К этому времени хочу чуть лучше подготовиться и сдать экзамен. А также получить задание и прорешать его уже в спокойной обстановке для подготовки к другим мероприятиям.

Приоритет для меня - курс Go-разработчик от SkillBox. Когда его освою, тогда буду думать о стажировках, контестах и прочем более серьёзно. А сейчас это больше приобщиться к IT-сфере.

Напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и плюс в карму за помощь каналу.

PS Сообщите, если купили курс по моей ссылке. Этим ребятам иногда нужно напоминать, что курс куплен по рефу, иначе что-то может пойти не так и кэшбэк не начисляют.

Nick Morrison https://unsplash.com/photos/FHnnjk1Yj7Y
Nick Morrison https://unsplash.com/photos/FHnnjk1Yj7Y

Бро, ты уже здесь? 👉 Подпишись на канал в «Я, Golang-инженер» в Telegram, будем изучать IT вместе 👨‍💻👩‍💻👨‍💻