Может ли это решение для Google Foobar "Re-ID" быть более эффективным?
Я ищу руководство по лучшему способу решения проблемы Google Re-ID. Вместо того, чтобы вводить здесь описание "Re-ID", я просто перечислю соответствующие части:
- Есть 10000 "миньонов", каждому из которых присваивается целое число случайным образом от 0 до 10000 включительно.
Миньон будет искать свое целое число как индекс в строке простых чисел - т.е.
2357111317192329...
Его новый "ID" генерируется путем нахождения значения индекса в строке в соответствии с целочисленным присваиванием Миньона и конкатенации следующих четырех чисел с ним - т.е. если целочисленное присваивание Миньона
3
его новый идентификатор будет71113
(7
значение в индексе 3 строки, затем мы добавляем следующие 4 цифры / символа)
Чтобы решить это я:
- Использовал (спасибо еще раз, SO) функцию, чтобы определить, является ли число простым или нет:
is_prime()
- Генерирует строку всех простых чисел, соединенных вместе, что облегчает Миньон с присваиванием "10000" плюс следующие 4 символа.
- Создана функция для генерации нового идентификатора на основе назначения Миньона и строки объединенных значений:
answer()
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
primes = ''
for i in range(2,21000,1):
if len(primes) < 10005:
if is_prime(i):
primes = primes + str(i)
else:
break
def answer(n):
re_id = primes[n:n+5:1]
return(re_id)
Области возможного улучшения
21000
по моему цикл for совершенно произвольный. Методом проб и ошибок я обнаружил, что 21000 облегчает целочисленное назначение Minion 10000 плюс 5 дополнительных цифр / символов.- Нужно ли создавать эту длинную строку простых чисел заранее? Разве это не может быть сделано динамически на основе идентификатора миньона?
Спасибо за ваши идеи. Счастливая пятница
0 ответов
Я использовал этот код, чтобы выполнить задание..
def answer(b):
bag = ""
for num in range(0,20500):
if num > 1:
for j in range(2,num):
if (num % j) == 0:
break
else:
if len(bag) >= 10006:
break
else:
bag += str(num)
return bag[b:b+5]