Google Foobar Вопрос - Python Сбои тестового примера - PullRequest
0 голосов
/ 26 января 2020

Итак, вчера вечером мне посчастливилось получить приглашение на вызов Google foobar. Как ни странно, я не искал ничего особенно продвинутого (только основы понимания списка). В любом случае, теперь я на 3-м уровне и столкнулся с проблемой, когда компилятор моего персонального компьютера выдает результат, соответствующий тестовому сценарию, но система Google его не выполняет. К сожалению, система Google не распечатывает фактический результат, поэтому поиск и устранение неисправностей является небольшой проблемой.

В настоящее время я использую python 3.6 в Spyder. Я понятия не имею, какую версию python использует Google или есть ли различия в том, как они работают, по сравнению с моей.

Вопрос заключается в поиске того, что называется «счастливой тройкой» в списке натуральных чисел. Счастливая тройка - это такая, что для x, y и z y может делиться на z, а x может делиться на y.

Моя проблема в основном такова: один из тестовых случаев - [1, 2, 3, 4, 5, 6], который должен вывести целое число 3 (три триплета: [1, 2, 4], [1, 2, 6] и [1, 3, 6]). Когда я запускаю свою программу, она выводит 3 для этого списка, что и должно быть равным контрольному примеру, но я проваливаю этот тест, когда запускаю его в системе Google.

Пара вещей, которые я заметил / пытался:

  1. Я провал 4 из 5 тестов в системе Google. Тот, который я передаю, является входом [1, 1, 1], который выводит 1. Три из этих пяти тестов скрыты, поэтому я не могу практиковаться с ними. Другой сбой - [1, 2, 3, 4, 5, 6], который должен вывести 3.
  2. Если я вынуждаю код возвращать 3 во всех случаях, то он проходит этот один тест ( и, очевидно, не удается другим). Для меня это означает, что мой код не возвращает 3 в системе Google, хотя он возвращает 3 в моем. Это также означает, что контрольный пример правильно установлен на 3.
  3. Это не первый раз, когда происходит подобное. На самом первом уровне я использовал __ne__, который работал на моей системе, но не на Googles. Я закончил тем, что изменил ситуацию, потому что подозревал, что что-то подобное имело место, и когда я переключил __ne__ с помощью лямбда-функции, все мои тесты прошли.
  4. Я увидел, что у кого-то еще была похожая проблема с проблема с foobar, но их проблема заключалась в том, что они не делали свою переменную переменной stati c, поэтому она менялась при каждом запуске. Это должно быть проблемой, потому что я сбрасываю переменную count_of_numbers в 0 при каждом запуске.

Я бы не стал портить решение, если смогу помочь, вместо того, чтобы предоставлять весь код целиком Я собираюсь предоставить некоторые функции, которые я использовал. Если этого недостаточно для go, пожалуйста, дайте мне знать, и я могу предоставить весь код. Помните, я не спрашиваю, работает ли моя программа - если моя программа не работает во всех случаях, это отдельная проблема. Но я знаю, что это работает в первых двух случаях (по крайней мере, на моей машине). Я спрашиваю, почему моя программа выводит 3 для моей системы, а не 3 для Google.

  1. Я использую %, который, я считаю, работает в обеих системах, потому что я могу принудительно установить «3» с помощью if 2%1 == 0: return 3.
  2. Я создаю свою собственную функцию is_lucky_triple, которая возвращает логическое значение.
  3. Я использую функцию len().
  4. Я использую reversed(range()).
  5. Я использую pop().

В целом, программа действительно проста: всего 16 строк кода и всего несколько функций. Basi c logi c запускается через каждую возможную комбинацию чисел (сохраняя порядок исходного списка) и увеличивает счетчик каждый раз, когда вы найдете счастливую тройку.

Я действительно ценю любую помощь, которую вы можете оказать. Любые советы по устранению неполадок, когда вы не видите вывод или сообщения об ошибках, будут также оценены. Спасибо!

Редактировать: благодаря ответу Тейна ниже, я смог выяснить, что версия 2.7.13, которая использует непростительное деление 3/2 = 1. Исходя из этого, я смог решить проблему, поэтому сейчас я прохожу первые два теста. К сожалению, я все еще терплю неудачу последние три. , , Но я ценю помощь!

1 Ответ

1 голос
/ 26 января 2020

Когда я некоторое время назад выполнил foobar, там был файл constraints.txt, к которому можно было получить доступ, набрав cat constraints.txt в приглашении, который содержал информацию об использованных версиях Java и Python (в то время, 7 и 2.7.6), а также поддерживаемые и ограниченные библиотеки - я бы посоветовал проверить это, чтобы вы могли запускать свой код, используя ту же версию Python. Попробуйте набрать ls в командной строке, чтобы увидеть, какие файлы вам доступны.

...