Итак, вчера вечером мне посчастливилось получить приглашение на вызов 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.
Пара вещей, которые я заметил / пытался:
- Я провал 4 из 5 тестов в системе Google. Тот, который я передаю, является входом [1, 1, 1], который выводит 1. Три из этих пяти тестов скрыты, поэтому я не могу практиковаться с ними. Другой сбой - [1, 2, 3, 4, 5, 6], который должен вывести 3.
- Если я вынуждаю код возвращать 3 во всех случаях, то он проходит этот один тест ( и, очевидно, не удается другим). Для меня это означает, что мой код не возвращает 3 в системе Google, хотя он возвращает 3 в моем. Это также означает, что контрольный пример правильно установлен на 3.
- Это не первый раз, когда происходит подобное. На самом первом уровне я использовал
__ne__
, который работал на моей системе, но не на Googles. Я закончил тем, что изменил ситуацию, потому что подозревал, что что-то подобное имело место, и когда я переключил __ne__
с помощью лямбда-функции, все мои тесты прошли. - Я увидел, что у кого-то еще была похожая проблема с проблема с foobar, но их проблема заключалась в том, что они не делали свою переменную переменной stati c, поэтому она менялась при каждом запуске. Это должно быть проблемой, потому что я сбрасываю переменную
count_of_numbers
в 0 при каждом запуске.
Я бы не стал портить решение, если смогу помочь, вместо того, чтобы предоставлять весь код целиком Я собираюсь предоставить некоторые функции, которые я использовал. Если этого недостаточно для go, пожалуйста, дайте мне знать, и я могу предоставить весь код. Помните, я не спрашиваю, работает ли моя программа - если моя программа не работает во всех случаях, это отдельная проблема. Но я знаю, что это работает в первых двух случаях (по крайней мере, на моей машине). Я спрашиваю, почему моя программа выводит 3 для моей системы, а не 3 для Google.
- Я использую
%
, который, я считаю, работает в обеих системах, потому что я могу принудительно установить «3» с помощью if 2%1 == 0: return 3
. - Я создаю свою собственную функцию
is_lucky_triple
, которая возвращает логическое значение. - Я использую функцию
len()
. - Я использую
reversed(range())
. - Я использую
pop()
.
В целом, программа действительно проста: всего 16 строк кода и всего несколько функций. Basi c logi c запускается через каждую возможную комбинацию чисел (сохраняя порядок исходного списка) и увеличивает счетчик каждый раз, когда вы найдете счастливую тройку.
Я действительно ценю любую помощь, которую вы можете оказать. Любые советы по устранению неполадок, когда вы не видите вывод или сообщения об ошибках, будут также оценены. Спасибо!
Редактировать: благодаря ответу Тейна ниже, я смог выяснить, что версия 2.7.13, которая использует непростительное деление 3/2 = 1. Исходя из этого, я смог решить проблему, поэтому сейчас я прохожу первые два теста. К сожалению, я все еще терплю неудачу последние три. , , Но я ценю помощь!