示例#1
0
文件: day05.py 项目: N8Brooks/aoc_py
    def nice(string):
        if not split_pair(string, 0) and not split_pair(string, 1):
            return False

        seen.clear()

        return any(starmap(twin_pair, successive(successive(string))))
示例#2
0
文件: day11.py 项目: N8Brooks/aoc_py
    def valid(string):
        if 8 in string or 11 in string or 14 in string:
            return False

        if not any(starmap(straight, successive(string, 3))):
            return False

        pairs = unique_everseen(starfilter(eq, successive(string)))

        return 1 < count_items(pairs)
def test_traverse():
    """To test the traverse implementation we call gc.collect() while instances
    of all the C objects are still valid."""
    acc = iteration_utilities.accumulate([])
    app = iteration_utilities.applyfunc(lambda x: x, 1)
    cha = iteration_utilities.chained(int, float)
    cla = iteration_utilities.clamp([], 0, 1)
    com = iteration_utilities.complement(int)
    con = iteration_utilities.constant(1)
    dee = iteration_utilities.deepflatten([])
    dup = iteration_utilities.duplicates([])
    fli = iteration_utilities.flip(int)
    gro = iteration_utilities.grouper([], 2)
    ine = iteration_utilities.intersperse([], 1)
    iik = iteration_utilities.ItemIdxKey(10, 2)
    ite = iteration_utilities.iter_except(int, TypeError)
    mer = iteration_utilities.merge([])
    nth = iteration_utilities.nth(1)
    pac = iteration_utilities.packed(int)
    par = iteration_utilities.partial(int, 10)
    rep = iteration_utilities.replicate([], 3)
    rou = iteration_utilities.roundrobin([])
    see = iteration_utilities.Seen()
    sid = iteration_utilities.sideeffects([], lambda x: x)
    spl = iteration_utilities.split([], lambda x: True)
    sta = iteration_utilities.starfilter(lambda x: True, [])
    suc = iteration_utilities.successive([])
    tab = iteration_utilities.tabulate(int)
    une = iteration_utilities.unique_everseen([])
    unj = iteration_utilities.unique_justseen([])
    gc.collect()
示例#4
0
def part1(text):
    def remove(polymer, reaction):
        return polymer.replace(reaction, "")

    polymer = text.strip()

    while react := REACTIONS & frozenset(map("".join, successive(polymer))):
        polymer = reduce(remove, react, polymer)
示例#5
0
文件: day05.py 项目: N8Brooks/aoc_py
    def nice(string):
        if any(two in string for two in ("ab", "cd", "pq", "xy")):
            return False

        if all(starmap(ne, successive(string))):
            return False

        return 3 <= sum(map(string.count, "aeiou"))
def test_successive_failure_lengthhint1():
    f_it = _hf.FailLengthHint(toT([1, 2, 3]))
    it = successive(f_it)
    with pytest.raises(_hf.FailLengthHint.EXC_TYP,
                       match=_hf.FailLengthHint.EXC_MSG):
        operator.length_hint(it)

    with pytest.raises(_hf.FailLengthHint.EXC_TYP,
                       match=_hf.FailLengthHint.EXC_MSG):
        list(it)
def test_successive_failure_lengthhint2():
    # This only checks for overflow if the length_hint is above PY_SSIZE_T_MAX.
    # In theory that would be possible because with times the length would be
    # shorter but "length_hint" throws the exception so we propagate it.
    of_it = _hf.OverflowLengthHint(toT([1, 2, 3]), sys.maxsize + 1)
    it = successive(of_it)
    with pytest.raises(OverflowError):
        operator.length_hint(it)

    with pytest.raises(OverflowError):
        list(it)
def test_successive_failure3():
    # Test that a failing iterator doesn't raise a SystemError
    with pytest.raises(_hf.FailNext.EXC_TYP, match=_hf.FailNext.EXC_MSG):
        next(successive(_hf.FailNext(), 1))
def test_successive_failure2():
    with pytest.raises(ValueError):  # times must be > 0
        successive([T(1), T(2), T(3)], 0)
def test_successive_failure1():
    with pytest.raises(_hf.FailIter.EXC_TYP, match=_hf.FailIter.EXC_MSG):
        successive(_hf.FailIter())
def test_successive_lengthhint1():
    it = successive([0] * 6, 4)
    _hf.check_lengthhint_iteration(it, 3)
示例#12
0
def part1(text):
    adapters = sorted(map(int, text.split()))
    padded = chain((0, ), adapters, (adapters[-1] + 3, ))
    diffs = tuple(starmap(rsub, successive(padded)))

    return diffs.count(1) * diffs.count(3)
def test_successive_failure_setstate2():
    # length of first argument not equal to times
    suc = successive([T(1), T(2), T(3), T(4)], 2)
    with pytest.raises(ValueError):
        suc.__setstate__(((T(1), ), ))
def test_successive_copy1():
    _hf.iterator_copy(successive(toT([1, 2, 3, 4])))
def test_successive_empty3():
    assert list(successive([], times=10)) == []
def test_successive_empty2():
    assert list(successive([T(1)])) == []
def test_successive_empty1():
    assert list(successive([])) == []
def test_successive_lengthhint2():
    assert operator.length_hint(successive([0] * 6, 11)) == 0
def test_successive_failure4():
    # Too few arguments
    with pytest.raises(TypeError):
        successive()
def test_successive_empty4():
    assert list(successive([T(1), T(2), T(3)], times=10)) == []
def test_successive_failure5():
    # Changing next method
    with pytest.raises(_hf.CacheNext.EXC_TYP, match=_hf.CacheNext.EXC_MSG):
        list(successive(_hf.CacheNext(1), 3))
示例#22
0
def is_sorted(n):
    return all(starmap(le, successive(n)))
def test_successive_failure_setstate1():
    # first argument must be a tuple
    suc = successive([T(1), T(2), T(3), T(4)], 2)
    with pytest.raises(TypeError):
        suc.__setstate__(([T(1), T(2)], ))
def test_successive_failure_setstate5():
    _hf.iterator_setstate_empty_fail(successive([T(1), T(2), T(3), T(4)], 2))
示例#25
0
 def abas(ip):
     return filter(aba, successive(ip, 3))
def test_successive_normal4():
    assert (dict(successive([T(1), T(2), T(3), T(4)])) == {
        T(1): T(2),
        T(2): T(3),
        T(3): T(4)
    })
def test_successive_normal1():
    assert (list(successive([T(1), T(2), T(3), T(4)])) == [(T(1), T(2)),
                                                           (T(2), T(3)),
                                                           (T(3), T(4))])
def test_successive_pickle2(protocol):
    suc = successive([T(1), T(2), T(3), T(4)])
    x = pickle.dumps(suc, protocol=protocol)
    assert list(pickle.loads(x)) == [(T(1), T(2)), (T(2), T(3)), (T(3), T(4))]
示例#29
0
文件: day09.py 项目: N8Brooks/aoc_py
 def distance(path):
     return sum(dist[a][b] for a, b in successive(path))
def test_successive_normal3():
    assert (list(successive([T(1), T(2), T(3), T(4)],
                            times=4)) == [(T(1), T(2), T(3), T(4))])