import math
FUEL_PER_MILE = 2.125
# Function to check if a number is an odd prime
def is_odd_prime(n):
if n < 2 or n % 2 == 0:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
# Function to simulate the trip
def simulate_trip(initial_fuel, print_output=False):
fuel = initial_fuel
location = 0
while fuel >= 0:
if print_output:
print("LOCATION: {:<2} FUEL: {:<.6f}".format(location, fuel))
fuel -= FUEL_PER_MILE # Consume fuel per mile
if print_output:
print("{:.3f} FUEL BURNED".format(FUEL_PER_MILE))
if is_odd_prime(location):
fuel += location # Add fuel at odd prime mile markers
if print_output:
print("{} FUEL ADDED AT ODD PRIME MILE MARKER".format(location))
if fuel < 0:
return location + (fuel / FUEL_PER_MILE) # Exact stranded location
location += 1
return float('inf') # If never stranded, return infinity
# Minimum fuel needed to never get stranded
min_fuel = 7.0 # Starting with 7.0 units of fuel
# Verify if 7.0 is enough
result = simulate_trip(min_fuel, print_output=True)
if result == float('inf'):
print("Minimum starting fuel: {:.6f}".format(min_fuel))
else:
print("ERROR: 7.0 is not enough fuel!")
# Part 2: Simulate with one drop less fuel
stranded_location = simulate_trip(min_fuel - 0.0001, print_output=True)
print("FINAL STRANDED LOCATION: {:.7f}".format(stranded_location))
aW1wb3J0IG1hdGgKCkZVRUxfUEVSX01JTEUgPSAyLjEyNQoKIyBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG51bWJlciBpcyBhbiBvZGQgcHJpbWUKZGVmIGlzX29kZF9wcmltZShuKToKICAgIGlmIG4gPCAyIG9yIG4gJSAyID09IDA6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBmb3IgaSBpbiByYW5nZSgzLCBpbnQobWF0aC5zcXJ0KG4pKSArIDEsIDIpOgogICAgICAgIGlmIG4gJSBpID09IDA6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiMgRnVuY3Rpb24gdG8gc2ltdWxhdGUgdGhlIHRyaXAKZGVmIHNpbXVsYXRlX3RyaXAoaW5pdGlhbF9mdWVsLCBwcmludF9vdXRwdXQ9RmFsc2UpOgogICAgZnVlbCA9IGluaXRpYWxfZnVlbAogICAgbG9jYXRpb24gPSAwCgogICAgd2hpbGUgZnVlbCA+PSAwOgogICAgICAgIGlmIHByaW50X291dHB1dDoKICAgICAgICAgICAgcHJpbnQoIkxPQ0FUSU9OOiB7OjwyfSAgICBGVUVMOiB7OjwuNmZ9Ii5mb3JtYXQobG9jYXRpb24sIGZ1ZWwpKQoKICAgICAgICBmdWVsIC09IEZVRUxfUEVSX01JTEUgICMgQ29uc3VtZSBmdWVsIHBlciBtaWxlCiAgICAgICAgaWYgcHJpbnRfb3V0cHV0OgogICAgICAgICAgICBwcmludCgiezouM2Z9IEZVRUwgQlVSTkVEIi5mb3JtYXQoRlVFTF9QRVJfTUlMRSkpCgogICAgICAgIGlmIGlzX29kZF9wcmltZShsb2NhdGlvbik6CiAgICAgICAgICAgIGZ1ZWwgKz0gbG9jYXRpb24gICMgQWRkIGZ1ZWwgYXQgb2RkIHByaW1lIG1pbGUgbWFya2VycwogICAgICAgICAgICBpZiBwcmludF9vdXRwdXQ6CiAgICAgICAgICAgICAgICBwcmludCgie30gRlVFTCBBRERFRCBBVCBPREQgUFJJTUUgTUlMRSBNQVJLRVIiLmZvcm1hdChsb2NhdGlvbikpCgogICAgICAgIGlmIGZ1ZWwgPCAwOgogICAgICAgICAgICByZXR1cm4gbG9jYXRpb24gKyAoZnVlbCAvIEZVRUxfUEVSX01JTEUpICAjIEV4YWN0IHN0cmFuZGVkIGxvY2F0aW9uCgogICAgICAgIGxvY2F0aW9uICs9IDEKCiAgICByZXR1cm4gZmxvYXQoJ2luZicpICAjIElmIG5ldmVyIHN0cmFuZGVkLCByZXR1cm4gaW5maW5pdHkKCiMgTWluaW11bSBmdWVsIG5lZWRlZCB0byBuZXZlciBnZXQgc3RyYW5kZWQKbWluX2Z1ZWwgPSA3LjAgICMgU3RhcnRpbmcgd2l0aCA3LjAgdW5pdHMgb2YgZnVlbAoKIyBWZXJpZnkgaWYgNy4wIGlzIGVub3VnaApyZXN1bHQgPSBzaW11bGF0ZV90cmlwKG1pbl9mdWVsLCBwcmludF9vdXRwdXQ9VHJ1ZSkKCmlmIHJlc3VsdCA9PSBmbG9hdCgnaW5mJyk6CiAgICBwcmludCgiTWluaW11bSBzdGFydGluZyBmdWVsOiB7Oi42Zn0iLmZvcm1hdChtaW5fZnVlbCkpCmVsc2U6CiAgICBwcmludCgiRVJST1I6IDcuMCBpcyBub3QgZW5vdWdoIGZ1ZWwhIikKCiMgUGFydCAyOiBTaW11bGF0ZSB3aXRoIG9uZSBkcm9wIGxlc3MgZnVlbApzdHJhbmRlZF9sb2NhdGlvbiA9IHNpbXVsYXRlX3RyaXAobWluX2Z1ZWwgLSAwLjAwMDEsIHByaW50X291dHB1dD1UcnVlKQpwcmludCgiRklOQUwgU1RSQU5ERUQgTE9DQVRJT046IHs6LjdmfSIuZm9ybWF0KHN0cmFuZGVkX2xvY2F0aW9uKSkK