Ошибка Python - Google Foobar - PullRequest
0 голосов
/ 27 июня 2018

Кто-нибудь, кто раньше принимал участие в конкурсе Google Foobar, сталкивался ли вы с такой ошибкой?

Verifying solution...
{
"bytes" : "CAAaIgogQ291bGQgbm90IGZpbmQgJ2Fuc3dlcicgZnVuY3Rpb24"
}

Я протестировал свое решение в Visual Studio, и оно отлично работает и дает точный вывод. У меня осталось всего 36 часов, чтобы представить свое решение, и это последнее испытание, поэтому я бы очень хотел получить кредит за его выполнение. Вот код, который я пытаюсь проверить:

from fractions import *
from math import factorial as fac

def cycle_index(n):
    return [(coeff(term), term) for term in foo(n, n)]

def foo(n, lim):
    soln_set = []
    if n > 0:
        for x in range(lim, 0, -1):
            if x == 1:
                soln_set.append([(1, n)])
            else:
                for y in range(int(n / x), 0, -1):
                    recurse = foo(n - x * y, x - 1)
                    if len(recurse) == 0:
                        soln_set.append([(x, y)])
                    for soln in recurse:
                        soln_set.append([(x, y)] + soln)
    return soln_set

def coeff(term):
    val = 1
    for x, y in term:
        val *= fac(y) * x ** y
    return Fraction(1, val)

def cross(cycle_a, cycle_b):
    term = []
    for len_a, freq_a in cycle_a:
        for len_b, freq_b in cycle_b:
            lcm = len_a * len_b / gcd(len_a, len_b)
            term.append((lcm, int(len_a * freq_a * len_b * freq_b / lcm)))
    return term

def answer(w, h, s):
    total = 0
    cycidx_cols = cycle_index(w)
    cycidx_rows = cycle_index(h)
    for col_coeff, col_cycle in cycidx_cols:
        for row_coeff, row_cycle in cycidx_rows:
            coeff = col_coeff * row_coeff
            cycle = cross(col_cycle, row_cycle)
            value = 1
            for _, power in cycle:
                value *= s ** power
            total += coeff * value
    return total

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

Из любопытства я просто повторил попытку проверки решения другого человека, и теперь я получаю ту же ошибку с немного отличным выводом, хотя она работала просто отлично, когда я пытался на прошлой неделе:

Verifying solution...
{
"bytes" : "CAEQARABEAEQARABEAEQARABEAEQAQ"
}

Я не уверен, куда еще идти. Я был так взволнован, что нашел собственное решение проблемы, но теперь я паникую, потому что это не имеет значения. Есть предложения?

ОБНОВЛЕНИЕ - 29 июня 2018 года, 18:00 CST
Срок истек для меня прошлой ночью, и я не смог вовремя представить свой код. Я убедился, что использовал команду recruitme до того, как время истекло, на случай, если меня загрузят. Тем не менее, я все еще могу просмотреть свой текущий статус, и это позволило мне запросить еще один уровень 5. Поэтому я буду периодически проверять, не начнут ли тестовые случаи появляться снова, и я обязательно обновлю их, когда они появятся. Я настоятельно рекомендую всем на более низких уровнях подождать, пока я не подтвердлю, что эта проблема исправлена, прежде чем пытаться запросить еще одну проблему.

ОБНОВЛЕНИЕ - 30 июня 2018 года, 5:00 утра CST
Согласно шаблону, найденному @RobertAnsel, я выполнил задание. Я подтвердил этот шаблон путем жесткого кодирования функции answer для вывода решений тестовых случаев, приведенных в инструкциях. Полученные ошибки точно совпадают с прогнозируемым результатом. Я также нашел интересную ветку на форуме поддержки Google ( ссылка здесь ), где нечто подобное произошло с группой претендентов на Foobar. Похоже, что их ошибка была исправлена ​​Google примерно через три дня, но, к сожалению, похоже, что многим людям, у которых истекло время ожидания, не было другого шанса. Тем не менее, это, вероятно, разрешится в течение следующего дня или двух. Я буду продолжать пытаться проверить и отправить свое решение, пока я не добьюсь успеха.

ОБНОВЛЕНИЕ - 4 июля 2018 года, 12:00 CST Эта проблема, кажется, была более или менее решена. Обратитесь к выбранному ответу для более подробной информации. Огромное спасибо @RobertAnsel за помощь! Некоторая дополнительная информация: мне удалось проверить мою текущую проблему, но после представления мне сказали, что мое время для проблемы истекло. После повторного входа я смог запросить новый запрос. Я заметил, что смог снова использовать команду recruitme. Я не уверен, означает ли это, что они не получили первый запрос или вам разрешено использовать эту команду несколько раз. Несмотря на это, я рад, что смог продолжить работу с Foobar. Желаем удачи всем остальным!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Возможно, это не тот ответ, который вы ищете, но эта первая «байтовая» строка представляет собой кодировку base64 следующего сообщения об ошибке:

"Не удалось найти функцию ответа".

Я сам выполнил вызов Foobar, и это должно происходить только в том случае, если вы пытаетесь проверить файл, в котором отсутствует определенная функция «answer», чего, очевидно, нет. Вы уверены, что спецификация, которую они предоставляют, имеет 3 аргумента против массива с 3 элементами?

Второе сообщение (CAEQARABEAEQARABEAEQARABEAEQAQ), хотя и является действительным base64, не отображается в ASCII или UTF-8. После более тщательного анализа некоторых других строк, которые опубликовали другие, я пришел к выводу, что это версия теста в кодировке base64. Это не очень хорошо читается человеком, но я считаю, что это 11 2-байтовых блоков, первый из которых бесполезен, но следующие 10 являются результатом теста для каждого из соответствующих тестовых случаев. В случае этого сообщения оно преобразуется в двоичный файл как:

0000100000000001 <- unknown pre-pended info
0001000000000001 <- passing test 1
0001000000000001 <- passing test 2
0001000000000001 <- passing test 3
0001000000000001 <- passing test 4
0001000000000001 <- passing test 5
0001000000000001 <- passing test 6
0001000000000001 <- passing test 7
0001000000000001 <- passing test 8
0001000000000001 <- passing test 9
0001000000000001 <- passing test 10

«1» в конце каждой из этих строк означает, что все 10 тестов пройдены.

Неудачный тестовый пример представлен следующей строкой:

0001000000000000 <- failing test case

Это должно помочь вам (и другим) продолжить тестирование, чтобы полностью пройти тестирование (вы можете выполнить свой собственный анализ с помощью таких инструментов, как этот: https://cryptii.com/base64-to-binary),, но, к сожалению, это не поможет вам продвинуться вперед с окончательным представлением. пока Google не исправит проблему с их стороны.

ОБНОВЛЕНИЕ: 2 июля, 8 вечера PDT Обратившись к нескольким специалистам по подбору персонала Google по поводу проблемы, они смогли подтвердить, что проблема была выявлена ​​и считается, что она решена сегодня. Если вы повторно сохраните свой код после внесения в него изменений (пробел должен быть в порядке), вы сможете правильно протестировать и отправить. Кроме того, теперь вы можете в любом случае запросить новый вызов.

0 голосов
/ 27 июня 2018

Вам нечем будет решать эту проблему, это проблема на сайте Google, так как API Google Foobar отвечает этим сообщением, как я выяснил.

Тем не менее лучше всего будет использовать команду feedback, оставить отзыв в Google Foobar и пометить его как ошибку. Это с большей вероятностью привлечет их внимание и поможет им решить эту проблему!

...