瀏覽代碼

🔔

master
Roderic Day 5 年之前
父節點
當前提交
3b3b45c67b
共有 2 個文件被更改,包括 18 次插入18 次删除
  1. +16
    -0
      toolkit.py
  2. +2
    -18
      y2019/p14.py

+ 16
- 0
toolkit.py 查看文件

@@ -10,3 +10,19 @@ def render(grid, brush):
rendered += brush[grid.get(complex(x, y))]
rendered += '\n'
return rendered


def bsearch(fn, goal, lo, hi):
while hi - lo > 1:
mid = lo + (hi - lo) // 2
if goal < fn(mid):
lo, hi = lo, mid
else:
lo, hi = mid, hi

# check
a, b = fn(lo), fn(hi)
assert a <= goal, 'lower bound too high'
assert goal <= b, 'higher bound too low'

return lo

+ 2
- 18
y2019/p14.py 查看文件

@@ -3,6 +3,8 @@ import math
import re
import sys

from toolkit import bsearch


text = sys.stdin.read()
cookbook = {}
@@ -28,22 +30,4 @@ def fuel_to_ore(state):


print(fuel_to_ore({'FUEL': 1})['ORE'])


def bsearch(fn, goal, lo, hi):
while hi - lo > 1:
mid = lo + (hi - lo) // 2
if goal < fn(mid):
lo, hi = lo, mid
else:
lo, hi = mid, hi

# check
a, b = fn(lo), fn(hi)
assert a <= goal, 'lower bound too high'
assert goal <= b, 'higher bound too low'

return lo


print(bsearch(lambda n: fuel_to_ore({'FUEL': n})['ORE'], 1E12, 1, 10_000_000))

Loading…
取消
儲存