Попытка завершить Google foo.bar уровня 3 (queue_to_do) и продолжать превышать лимит времени
Честно говоря, я не думаю, что мой код настолько плохой... Это пятая версия, которую я придумала, и я думаю, что она пока лучшая.... Но когда я запускаю тест на foo. на панели консоли написано "Превышен лимит времени"
Вы видите способ, которым я могу сделать это быстрее? Я в растерянности пока.....
вот README:
Очередь, чтобы сделать
Вы почти готовы сделать шаг, чтобы уничтожить устройство LAMBCHOP конца света, но контрольные точки безопасности, которые охраняют базовые системы LAMBCHOP, будут проблемой. Вы смогли снять его, не отключив ни одной тревоги, и это здорово! За исключением того, что, будучи помощником коммандера Лямбды, вы узнали, что контрольно-пропускные пункты скоро будут подвергнуты автоматическому анализу, а это значит, что ваш саботаж будет обнаружен и ваше укрытие взорвано - если вы не сможете обмануть автоматизированную систему обзора.
Чтобы обмануть систему, вам нужно написать программу, которая будет возвращать ту же контрольную сумму безопасности, что и у охранников после того, как они проверят всех рабочих. К счастью, стремление коммандера Лямбды к эффективности не позволяет использовать многочасовые очереди, поэтому охранники контрольно-пропускных пунктов нашли способы ускорить пропускную способность. Вместо того, чтобы проверять каждого проходящего работника, охранники вместо этого просматривают всех в очереди, отмечая их идентификаторы безопасности, а затем позволяют линии заполниться. После того, как они это сделали, они снова перешли черту, на этот раз оставив последнего работника. Они продолжают это делать, каждый раз оставляя по очереди еще одного работника, но записывая идентификаторы безопасности тех, кого они проверяют, до тех пор, пока они не пропустят всю строку, после чего они XOR идентифицируют идентификаторы всех работников, которых они отметили, в контрольную сумму и затем сними на обед. К счастью, упорядоченный характер рабочих заставляет их всегда выстраиваться в числовом порядке без каких-либо пробелов.
Например, если первый рабочий в строке имеет идентификатор 0, а строка контрольной точки безопасности содержит трех рабочих, процесс будет выглядеть следующим образом: 0 1 2 / 3 4 / 5 6 / 7 8, где контрольная сумма XOR (^) охранников равна 0^1^2^3^4^6 == 2.
Аналогично, если у первого работника есть ID 17, а на контрольно-пропускном пункте находятся четыре работника, процесс будет выглядеть следующим образом: 17 18 19 20 / 21 22 23 / 24 25 26 / 27 28 29 / 30 31 32, который производит контрольную сумму 17^18^19^20^21^22^23^25^26^29 == 14.
Все идентификаторы работника (включая первого работника) находятся в диапазоне от 0 до 2000000000 включительно, и длина строки контрольной точки всегда будет не менее 1 работника.
Получив эту информацию, напишите ответ функции (начало, длина), который покроет пропущенную контрольную точку безопасности путем вывода той же контрольной суммы, которую охранники обычно отправляют до обеда. У вас достаточно времени, чтобы узнать идентификатор первого проверяемого работника (начало) и длину строки (длина) до автоматического просмотра, поэтому ваша программа должна сгенерировать правильную контрольную сумму только с этими двумя значениями.
Языки
Чтобы предоставить решение Python, отредактируйте solution.py Чтобы предоставить решение Java, отредактируйте solution.java
Контрольные примеры
Входы: (int) start = 0 (int) длина = 3 Выход: (int) 2
Входы: (int) start = 17 (int) length = 4 Выход: (int) 14
Используйте verify [file], чтобы протестировать ваше решение и посмотреть, как оно работает. Когда вы закончите редактирование своего кода, используйте submit [file], чтобы отправить свой ответ. Если ваше решение прошло тестовые случаи, оно будет удалено из вашей домашней папки.
И мое решение:
def answer(start, length):
f = 0
r = 0
while f < length:
for i in range(start, (start+length) - f):
r ^= i
f += 1
start = range(start, start+length)[-1] + 1
return r
1 ответ
Подсказка 1
XOR 5^6^7^8 равен XOR(1^2^3^4^5^6^7^8)^(1^2^3^4).
Другими словами, вы должны сосредоточиться на поиске функции, которая является xor первых n натуральных чисел, и затем вы можете использовать эту функцию, чтобы найти xor любого диапазона целых чисел.
Подсказка 2
Чтобы найти xor первых n натуральных чисел, рассмотрим двоичное представление:
000
001
010
011
100
101
110
111
Сконцентрируйтесь на одной позиции бита и подумайте о шаблоне, который вы получаете, вычисляя xor всех чисел.