Комментарии 22
Режим зануды:
В последнем примере кода если адрес уже есть в списке плохих, то от него остаётся счётчик, который уйдёт в отрицательные числа, и тогда при некоторых условиях число счётчиков превысит 1000.
Зачем так, можно же
В последнем примере кода если адрес уже есть в списке плохих, то от него остаётся счётчик, который уйдёт в отрицательные числа, и тогда при некоторых условиях число счётчиков превысит 1000.
print('\n'.join(current_ip for current_ip in sorted(bad_ips)))
Зачем так, можно же
print('\n'.join(sorted(bad_ips)))
+1
В последнем примере кода если адрес уже есть в списке плохих, то от него остаётся счётчик, который уйдёт в отрицательные числа, и тогда при некоторых условиях число счётчиков превысит 1000.
Не понял момент про отрицательное значение счетчика. Когда адрес добавляется в список плохих, то его счетчик удаляется. Если этот адрес встречается дальше, ты мы его просто пропускаем.
0
Всё верно, после добавления ip в список плохих счётчик удаляется и далее пропускается, счётчик ip не увеличивается.
Однако ip попадает в очередь и позже удаляется из очереди, при этом счётчик ip всегда уменьшается (при уменьшении счётчик для ip тоже создаётся), дополнительной проверки oldest_ip in bad_ips там нету.
Однако ip попадает в очередь и позже удаляется из очереди, при этом счётчик ip всегда уменьшается (при уменьшении счётчик для ip тоже создаётся), дополнительной проверки oldest_ip in bad_ips там нету.
0
Задачи, конечно, элементарные… Высокую нагрузку, и следующую после неё, я решил буквально в одну строку
+1
Какой был проходной балл? или сколько надо было решить для поступления?
И какие временные рамки?
В куче компаний если вы просто решите все это прямо на собеседовании — это будет сразу оффер на джуниор/мидл.
И какие временные рамки?
В куче компаний если вы просто решите все это прямо на собеседовании — это будет сразу оффер на джуниор/мидл.
0
Блоки с решением лучше было бы не спойлерить и спрятать, имхо :) так сложнее знакомиться со статьёй
0
Решение первой задачи проще:
Counter(arr).most_common(1)
0
Это неверное решение. В условии задачи написано, что нужно вернуть наибольшее из чисел, которое чаще других встречается в массиве.
Для массива [1, 1, 2, 2] в вашем решении ответ будет 1. Правильный ответ — 2.
Для массива [1, 1, 2, 2] в вашем решении ответ будет 1. Правильный ответ — 2.
+1
Если arr = [0, 0, 10, 10],
то Counter(arr).most_common(1) вернёт [(0, 2)] — число 0 встречается 2 раза,
а нужно вернуть 10, т.к. оно тоже встречается также 2 раза и больше 0.
то Counter(arr).most_common(1) вернёт [(0, 2)] — число 0 встречается 2 раза,
а нужно вернуть 10, т.к. оно тоже встречается также 2 раза и больше 0.
0
а есть где примеры задач на senior. яп не важен
0
А мне нравятся задачи на аттестации преподавателей, забавные и оригинальные.
Вообще ребята-методисты в яндексе по питону клевые.
Вообще ребята-методисты в яндексе по питону клевые.
0
Спасибо за статью. А в чем состояла автоматизация проверки?
0
Вторая задача, строго говоря, O(1): находим корни характеристического уравнения последовательности, x^3-x^2-1=0 (обозначим x1, x2, x3 — у этого уравнения два из них комплексные) и подбираем коэффициенты A, B, C так, чтобы:
A + B + C = 0
A*x1 + B*x2 + C*x3 = 1
A*x1^2 + B*x2^2 + C*x3^2 = 2
После этого по формуле f(k) = A*x1^k + B*x2^k + C*x3^k можем посчитать любой элемент с заранее выбранной точностью, не используя рекуррентное соотношение.
A + B + C = 0
A*x1 + B*x2 + C*x3 = 1
A*x1^2 + B*x2^2 + C*x3^2 = 2
После этого по формуле f(k) = A*x1^k + B*x2^k + C*x3^k можем посчитать любой элемент с заранее выбранной точностью, не используя рекуррентное соотношение.
0
Для решения любой задачи не требовалось каких-либо специальных знаний в смежных областях.
Путь в целом верный, но тяжёлый. Например,
Далее,
Наконец, возведение чисел x1, x2, x3 в k-ю степень требует O(log(k)) времени.
Путь в целом верный, но тяжёлый. Например,
x1 = 1/3 * (1 + (1/2 * (29 - 3 * sqrt(93)))^(1/3) + (1/2 * (29 + 3 * sqrt(93)))^(1/3)),
x2 = 1/3 - 1/6 * (1 - i * sqrt(3)) * (1/2 * (29 - 3 * sqrt(93)))^(1/3) - 1/6 * (1 + i * sqrt(3)) *(1/2 * (29 + 3 * sqrt(93)))^(1/3),
x3 = 1/3 - 1/6 * (1 + i * sqrt(3)) * (1/2 * (29 - 3 * sqrt(93)))^(1/3) - 1/6 * (1 - i * sqrt(3)) *(1/2 * (29 + 3 * sqrt(93)))^(1/3).
Далее,
A = (2 - x2 - x3)/(x2 - x1)/(x3 - x1),
B = (2 - x1 - x3)/(x1 - x2)/(x3 - x2),
C = (2 - x1 - x2)/(x1 - x3)/(x2 - x3).
Наконец, возведение чисел x1, x2, x3 в k-ю степень требует O(log(k)) времени.
0
Как в решении 1й задачи учтено ограничение на n-размерность массива?
Предлагаемый вариант решения разве можно считать 100% полным?
Предлагаемый вариант решения разве можно считать 100% полным?
0
Вот в первой задаче нам нужно ввести n. Но введя этот код и проверив я не понял на что оно влияет, оно дальше даже не используется.
Так вот, вопрос такой, зачем в первой задаче число n если и без него работает
Так вот, вопрос такой, зачем в первой задаче число n если и без него работает
0
Ну это скорее всего плохие тесты от организаторов, раз приведённый пример кода решает задачу. Можно привести пример с n=1, после чего дать на вход три числа [1, 2, 2] — правильный ответ будет 1, так как дальше первого элемента работать не должно согласно условиям задачи
0
Кодирование длин серий
Были участники, которые решили задачу с помощью регулярных выражений.
И правильно сделали, как мне кажется.
Сильно уж они все упрощают
import re
def decoded_rle_value_len(value):
pairs = re.findall(r'(?P<letter>[A-Z])(?P<count>\d*)', value)
return sum(int(pair[1]) if pair[1] else 1 for pair in pairs)
result = decoded_rle_value_len('A15BA5')
print(result)
С другой стороны, решение в статье более прямолинейное и его, возможно, проще осмыслить.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как проверить навыки программирования на Python? Задачи от Яндекса