Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.
Хой! Джедаи и Амазонки!
В этом посте я расскажу, как готовлюсь к экзамену на бесплатное обучение Go в Тинькофф. Будет информация по предыдущему контесту и примеры задач. Go!
В предыдущем посте, в котором рассказывал о функции Compare пакета strings, поделился ссылкой на обучение в Тинькофф для всех желающих. Регистрация там была до 1 февраля 2023 года. Я эту регистрацию прошёл, и сейчас открылся доступ к экзамену. Да, чтобы поступить на обучение, нужно пройти экзамен.
И тут я понял, почему ребята из Тинькофф делали ограничение по дате для регистрации. Можно было бы сейчас зайти с одного аккаунта и посмотреть задачи. Подготовиться как следует и далее основным аккаунтом всё решить на 5+.
А сейчас нужно решать всё с первого раза. Ладно, для меня это больше практика. Вот что нам выдаётся: нужно заполнить анкету и пройти экзамен.
В анкете нет чего-то примечательного. Ну, просят ссылку на резюме и показать самый сложный проект (на 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, затем посетить деревню 2, а затем деревню 3. Суммарная длина такого путешествия будет равна 10.
- Во втором примере можно начать путешествие в деревне 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 ) — длины бревен.
Формат выходных данных
Выведите одно число - минимальную длину самого длинного бревна после разрезов, округленную вверх.
Пример
Пояснение
Задача D. Круговое путешествие
Формат входных данных
Формат выходных данных
Выведите одно число - ответ на задачу по модулю 998244353.
Пример
Замечание
В первом примере существуют 4 различных путешествия:
- (1, 2, 1, 2, 1)
- (1, 2, 1, 3, 1)
- (1, 3, 1, 2, 1)
- (1, 3, 1, 3, 1)
Пояснение
Задача E. Подсчет последовательностей
Формат входных данных
В первой строке вводятся два числа N и M (1 <= N, M <= 5000).
Формат выходных данных
Выведите одно число — количество таких последовательностей A по модулю 998244353.
Пример
Пояснение
-//-//-
Напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и плюс в карму за помощь каналу.
Итоги
В следующих постах буду решать эти задачи. Крайний срок сдачи - 9 февраля 6:59. Время, скорее всего, по МСК. К этому времени хочу чуть лучше подготовиться и сдать экзамен. А также получить задание и прорешать его уже в спокойной обстановке для подготовки к другим мероприятиям.
Приоритет для меня - курс Go-разработчик от SkillBox. Когда его освою, тогда буду думать о стажировках, контестах и прочем более серьёзно. А сейчас это больше приобщиться к IT-сфере.
Напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и плюс в карму за помощь каналу.
PS Сообщите, если купили курс по моей ссылке. Этим ребятам иногда нужно напоминать, что курс куплен по рефу, иначе что-то может пойти не так и кэшбэк не начисляют.
Бро, ты уже здесь? 👉 Подпишись на канал в «Я, Golang-инженер» в Telegram, будем изучать IT вместе 👨💻👩💻👨💻