AdventOfCode/2015/07/7.md

71 lines
2.5 KiB
Markdown

## \-\-- Day 7: Some Assembly Required \-\--
This year, Santa brought little Bobby Tables a set of wires and [bitwise
logic gates](https://en.wikipedia.org/wiki/Bitwise_operation)!
Unfortunately, little Bobby is a little under the recommended age range,
and he needs help [assembling the
circuit]{title="You had one of these as a kid, right?"}.
Each wire has an identifier (some lowercase letters) and can carry a
[16-bit](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Bitwise_operation#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](https://en.wikipedia.org/wiki/Logical_shift) by `2`
and then provided to wire `q`.
- `NOT e -> f` means that the [bitwise
complement](https://en.wikipedia.org/wiki/Bitwise_operation#NOT) of
the value from wire `e` is provided to wire `f`.
Other possible gates include `OR` ([bitwise
OR](https://en.wikipedia.org/wiki/Bitwise_operation#OR)) and `RSHIFT`
([right-shift](https://en.wikipedia.org/wiki/Logical_shift)). If, for
some reason, you\'d like to *emulate* the circuit instead, almost all
programming languages (for example,
[C](https://en.wikipedia.org/wiki/Bitwise_operations_in_C),
[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators),
or [Python](https://wiki.python.org/moin/BitwiseOperators)) 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`*?
To begin, [get your puzzle input](7/input).
Answer: