Появление кода 2019 День 1: Что не так с моей математикой / логикой? - PullRequest
2 голосов
/ 02 декабря 2019

Ниже приводится подсказка для появления Кодекса 2019, день 1, часть 1:

Санта оказался на краю Солнечной системы, доставляя подарки другим планетам! Чтобы точно рассчитать его положение в космосе, безопасно выровнять его варп-драйв и вовремя вернуться на Землю, чтобы спасти Рождество, ему нужно, чтобы вы принесли ему измерения из пятидесяти звезд.

Собирайте звезды, решая головоломки. Две головоломки будут доступны каждый день в календаре Адвента;вторая головоломка разблокируется, когда вы завершите первую. Каждая головоломка дает одну звезду. Удачи!

Эльфы быстро загружают вас в космический корабль и готовятся к запуску.

Во время первого опроса Go / No Go каждый эльф идет до тех пор, пока не откроется Топливо. Они еще не определили количество необходимого топлива.

Топливо, необходимое для запуска данного модуля, основано на его массе. В частности, чтобы найти топливо, необходимое для модуля, возьмите его массу, разделите на три, округлите и вычтите 2.

Например:

Для массы 12, разделите на 3и округлить до 4, затем вычесть 2, чтобы получить 2. Для массы 14, деления на 3 и округления по-прежнему получается 4, поэтому требуемое топливо также равно 2. Для массы 1969 г. требуемое топливо составляет 654. Для массы 100756 требуемое топливо составляет 33583. Топливный контрпорт должен знать общую потребность в топливе. Чтобы найти его, индивидуально рассчитайте топливо, необходимое для массы каждого модуля (входные данные вашей головоломки), а затем сложите все значения топлива.

Какова сумма потребностей в топливе для всех модулей вашегокосмический корабль?

Вот две версии моей попытки:

'''
Simplification:

total fuel = (m1 / 3 - 2) + (m2 / 3 - 2) + (m3 / 3 - 2) + ... + (mn / 3 - 2)

total fuel = (m1 / 3) + (m2 / 3) + ... + (mn / 3) - 2 - 2 - ... - 2

total fuel = (1 / 3)(m1 + ... + mn) - 2 * n
'''

# Why doesn't this work?
print(sum(masses) // 3 - 2 * len(masses))

# This works, though...
print(sum([m // 3 - 2 for m in masses]))

Первый вывод дает 3384266, а второй дает 3384232, правильный ответ.

Итак ... Что именно не так с первой версией?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2019

разница в округлении, ваше упрощение не учитывает этого.

Рассмотрим следующее (две единицы при весе 2 (да, они будут отрицательными, но игнорируют - 2 длявторой)):

>>> (2 // 3 + 2 // 3)
0
>>> (2 + 2) // 3
1
0 голосов
/ 02 декабря 2019

Оба эти ответа кажутся неправильными.

Вам необходимо сложить каждый элемент, таким образом

// psuedocode
total = 0

loop -> element
    total += floor(element / 3) - 2

Это должно дать вам правильный ответ.

edit:

Как сказал другой человек, ваша проблема может быть округлена. Вам нужно указать значение / 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...