Skip to content
This repository has been archived by the owner on Aug 6, 2023. It is now read-only.
/ advent-of-code-7 Public archive

A lexer, parser and interpreter for day 7 of the Advent of Code

Notifications You must be signed in to change notification settings

yberreby/advent-of-code-7

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

advent-of-code-7

A lexer, parser and interpreter for day 7 of the Advent of Code.

Benchmark

It finds the answer to both parts of the challenge pretty quickly:

running 2 tests
test bench_source_1 ... bench:      95,606 ns/iter (+/- 12,024)
test bench_source_2 ... bench:      96,107 ns/iter (+/- 14,234)

The challenge

The challenge was to compute the signal sent to a wire from a set of instructions:

This year, Santa brought little Bobby Tables a set of wires and
bitwise logic gates! Unfortunately, little Bobby is a little under
the recommended age range, and he needs help assembling the circuit.

Each wire has an identifier (some lowercase letters) and can carry
a 16-bit signal (a number from 0 to 65535). A signal is provided
to each wire by a gate, another wire, or some specific value. Each
wire can only get a signal from one source, but can provide its
signal to multiple destinations. A gate provides no signal until
all of its inputs have a signal.

The included instructions booklet describes how to connect the
parts together: x AND y -> z means to connect wires x and y to
an AND gate, and then connect its output to wire z.

For example:

123 -> x means that the signal 123 is provided to wire x.
x AND y -> z means that the bitwise AND of wire x and wire y is
provided to wire z.
p LSHIFT 2 -> q means that the value from wire p is left-shifted
by 2 and then provided to wire q.
NOT e -> f means that the bitwise complement of the value from wire
e is provided to wire f.
Other possible gates include OR (bitwise OR) and RSHIFT (right-shift).
If, for some reason, you'd like to emulate the circuit instead, almost
all programming languages (for example, C, JavaScript, or Python)
provide operators for these gates.

For example, here is a simple circuit:

123 -> x
456 -> y
x AND y -> d
x OR y -> e
x LSHIFT 2 -> f
y RSHIFT 2 -> g
NOT x -> h
NOT y -> i
After it is run, these are the signals on the wires:

d: 72
e: 507
f: 492
g: 114
h: 65412
i: 65079
x: 123
y: 456
In little Bobby's kit's instructions booklet (provided as your puzzle input),
what signal is ultimately provided to wire a?

About

A lexer, parser and interpreter for day 7 of the Advent of Code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages