Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2392b2d

Browse files
committed
Solve 2024 day 24 part 1
1 parent 1580750 commit 2392b2d

File tree

3 files changed

+461
-0
lines changed

3 files changed

+461
-0
lines changed
Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
x00: 1
2+
x01: 1
3+
x02: 0
4+
x03: 0
5+
x04: 0
6+
x05: 1
7+
x06: 0
8+
x07: 1
9+
x08: 1
10+
x09: 0
11+
x10: 1
12+
x11: 0
13+
x12: 0
14+
x13: 0
15+
x14: 1
16+
x15: 1
17+
x16: 1
18+
x17: 0
19+
x18: 0
20+
x19: 0
21+
x20: 1
22+
x21: 0
23+
x22: 1
24+
x23: 0
25+
x24: 0
26+
x25: 0
27+
x26: 0
28+
x27: 1
29+
x28: 0
30+
x29: 1
31+
x30: 0
32+
x31: 0
33+
x32: 1
34+
x33: 1
35+
x34: 1
36+
x35: 0
37+
x36: 0
38+
x37: 0
39+
x38: 1
40+
x39: 1
41+
x40: 1
42+
x41: 1
43+
x42: 0
44+
x43: 0
45+
x44: 1
46+
y00: 1
47+
y01: 0
48+
y02: 1
49+
y03: 1
50+
y04: 0
51+
y05: 0
52+
y06: 1
53+
y07: 1
54+
y08: 0
55+
y09: 1
56+
y10: 1
57+
y11: 1
58+
y12: 1
59+
y13: 0
60+
y14: 1
61+
y15: 0
62+
y16: 0
63+
y17: 1
64+
y18: 0
65+
y19: 1
66+
y20: 0
67+
y21: 1
68+
y22: 1
69+
y23: 1
70+
y24: 0
71+
y25: 1
72+
y26: 1
73+
y27: 0
74+
y28: 1
75+
y29: 1
76+
y30: 0
77+
y31: 1
78+
y32: 0
79+
y33: 0
80+
y34: 0
81+
y35: 1
82+
y36: 1
83+
y37: 1
84+
y38: 1
85+
y39: 1
86+
y40: 0
87+
y41: 1
88+
y42: 0
89+
y43: 1
90+
y44: 1
91+
92+
x23 AND y23 -> mhq
93+
dbf XOR dsb -> z35
94+
x41 AND y41 -> qss
95+
kbv AND ctw -> qhg
96+
djs OR tgk -> ccp
97+
nmw AND bgp -> bcr
98+
jns OR npn -> jbv
99+
y29 AND x29 -> tjt
100+
y17 AND x17 -> nhh
101+
kmm AND ptk -> vnr
102+
hbr AND qfp -> mjr
103+
qfk AND pvj -> ndp
104+
tvb XOR jhd -> z25
105+
y29 XOR x29 -> wft
106+
rqd AND cns -> grb
107+
jbv AND kjg -> vjg
108+
tvm XOR pkw -> z38
109+
vwd AND kvv -> mgw
110+
nmw XOR bgp -> z02
111+
cdc OR stq -> z21
112+
x16 XOR y16 -> mft
113+
x37 XOR y37 -> hbr
114+
x24 XOR y24 -> cns
115+
y40 XOR x40 -> pgc
116+
ccd OR cst -> cbk
117+
fht XOR ddw -> z20
118+
wft AND nnq -> stm
119+
srk AND sjm -> fwg
120+
y06 AND x06 -> cnm
121+
gqg XOR pmv -> z07
122+
ndp OR nfq -> rgv
123+
bsm OR vsc -> fjn
124+
x15 XOR y15 -> srk
125+
bwv XOR vbq -> z42
126+
kbv XOR ctw -> z31
127+
x10 XOR y10 -> htc
128+
x08 XOR y08 -> knh
129+
fgc AND dvm -> nfn
130+
y03 AND x03 -> ssj
131+
x26 XOR y26 -> spf
132+
y02 AND x02 -> psw
133+
x36 XOR y36 -> fcf
134+
ptj OR dtg -> spg
135+
stm OR tjt -> gsj
136+
mmw XOR ncf -> z23
137+
y26 AND x26 -> csh
138+
rrj AND mft -> tnt
139+
x05 XOR y05 -> chs
140+
x16 AND y16 -> khn
141+
nqm AND fmf -> tgq
142+
wft XOR nnq -> z29
143+
y13 AND x13 -> ggg
144+
rcb OR khg -> mfp
145+
y28 AND x28 -> wgd
146+
csf AND bck -> qsg
147+
x31 XOR y31 -> kbv
148+
rrj XOR mft -> z16
149+
hhg AND ccp -> msp
150+
y00 XOR x00 -> z00
151+
x25 XOR y25 -> khg
152+
x42 AND y42 -> djs
153+
ggg OR hvg -> csf
154+
pps XOR wdg -> vdc
155+
y04 XOR x04 -> pvj
156+
qtg AND knh -> ccd
157+
x27 AND y27 -> jns
158+
jdk OR pmr -> spk
159+
nhm XOR jmr -> z18
160+
fpk AND dfh -> ccr
161+
x06 XOR y06 -> bgq
162+
x38 AND y38 -> dcc
163+
x22 XOR y22 -> jkq
164+
vbq AND bwv -> tgk
165+
x14 XOR y14 -> bck
166+
fjn AND htc -> dtg
167+
kfd XOR rtg -> z19
168+
bvk OR khh -> nmw
169+
x34 XOR y34 -> ptk
170+
mmw AND ncf -> rkf
171+
y11 AND x11 -> rvg
172+
wgd OR vjg -> nnq
173+
qss OR wtt -> bwv
174+
dmb OR crv -> ddw
175+
y08 AND x08 -> cst
176+
nhh OR tgq -> jmr
177+
cpt XOR fqc -> z32
178+
tnt OR khn -> fmf
179+
fbk AND tcq -> hvg
180+
spq XOR gpk -> z01
181+
x02 XOR y02 -> bgp
182+
x20 AND y20 -> fct
183+
x36 AND y36 -> jbq
184+
x12 AND y12 -> z12
185+
mfp XOR spf -> z26
186+
spg XOR hhm -> z11
187+
y32 AND x32 -> rjq
188+
y04 AND x04 -> nfq
189+
pkj OR msp -> kvv
190+
tvc OR dcc -> dvm
191+
vnr OR krb -> dbf
192+
fmf XOR nqm -> z17
193+
rtg AND kfd -> dmb
194+
fvh XOR pgc -> z40
195+
fcf XOR spk -> z36
196+
pvc OR gst -> kmm
197+
cbk AND nbm -> vsc
198+
x09 AND y09 -> bsm
199+
x07 XOR y07 -> gqg
200+
ptk XOR kmm -> z34
201+
x28 XOR y28 -> kjg
202+
dbm OR jft -> qtg
203+
jbr AND wcs -> z33
204+
y42 XOR x42 -> vbq
205+
y00 AND x00 -> spq
206+
y19 XOR x19 -> kfd
207+
tbn OR grb -> jhd
208+
kvv XOR vwd -> z44
209+
wcs XOR jbr -> gst
210+
srk XOR sjm -> z15
211+
y39 AND x39 -> cbf
212+
bgq XOR wdh -> z06
213+
bbn AND rsc -> cdc
214+
y18 XOR x18 -> nhm
215+
tvm AND pkw -> tvc
216+
x23 XOR y23 -> ncf
217+
x19 AND y19 -> crv
218+
qhg OR gnc -> fqc
219+
jbv XOR kjg -> z28
220+
y05 AND x05 -> nph
221+
x32 XOR y32 -> cpt
222+
x31 AND y31 -> gnc
223+
ccp XOR hhg -> z43
224+
x15 AND y15 -> gtf
225+
jmr AND nhm -> ptd
226+
x10 AND y10 -> ptj
227+
bgq AND wdh -> dgh
228+
ftw XOR gsj -> z30
229+
x44 AND y44 -> bds
230+
fjn XOR htc -> z10
231+
y43 AND x43 -> pkj
232+
y30 AND x30 -> nmj
233+
tvb AND jhd -> rcb
234+
x40 AND y40 -> gdm
235+
mgw OR bds -> z45
236+
fdv AND dfs -> wtt
237+
rkf OR mhq -> rqd
238+
pvj XOR qfk -> z04
239+
pmv AND gqg -> dbm
240+
x21 XOR y21 -> bbn
241+
x38 XOR y38 -> tvm
242+
mjr OR kpb -> pkw
243+
jbq OR vmj -> qfp
244+
jkq XOR nhn -> z22
245+
qfn OR fct -> rsc
246+
x30 XOR y30 -> ftw
247+
y35 XOR x35 -> dsb
248+
y24 AND x24 -> tbn
249+
fcf AND spk -> vmj
250+
cnm OR dgh -> pmv
251+
x27 XOR y27 -> mcv
252+
chs XOR rgv -> z05
253+
vdc OR kcp -> fbk
254+
y39 XOR x39 -> fgc
255+
x13 XOR y13 -> tcq
256+
ssj OR ccr -> qfk
257+
fwg OR gtf -> rrj
258+
knh XOR qtg -> z08
259+
fqc AND cpt -> nfh
260+
y17 XOR x17 -> nqm
261+
hbr XOR qfp -> z37
262+
y22 AND x22 -> nrq
263+
y01 XOR x01 -> gpk
264+
jhv OR nph -> wdh
265+
dfs XOR fdv -> z41
266+
gqb OR csh -> mbp
267+
dvm XOR fgc -> z39
268+
y03 XOR x03 -> fpk
269+
mfp AND spf -> gqb
270+
x44 XOR y44 -> vwd
271+
gpk AND spq -> bvk
272+
x21 AND y21 -> stq
273+
cbf OR nfn -> fvh
274+
spg AND hhm -> wvv
275+
cns XOR rqd -> z24
276+
rjq OR nfh -> wcs
277+
mcv AND mbp -> npn
278+
wdg AND pps -> kcp
279+
nrq OR vkg -> mmw
280+
x33 AND y33 -> pvc
281+
x20 XOR y20 -> fht
282+
y43 XOR x43 -> hhg
283+
dfh XOR fpk -> z03
284+
fbk XOR tcq -> z13
285+
x09 XOR y09 -> nbm
286+
pwp OR nmj -> ctw
287+
y25 AND x25 -> tvb
288+
y34 AND x34 -> krb
289+
x11 XOR y11 -> hhm
290+
hdq OR gdm -> fdv
291+
mcv XOR mbp -> z27
292+
nbm XOR cbk -> z09
293+
fvh AND pgc -> hdq
294+
jkq AND nhn -> vkg
295+
dwt OR qsg -> sjm
296+
dbf AND dsb -> pmr
297+
rsc XOR bbn -> nhn
298+
y14 AND x14 -> dwt
299+
x35 AND y35 -> jdk
300+
x41 XOR y41 -> dfs
301+
y37 AND x37 -> kpb
302+
bck XOR csf -> z14
303+
y07 AND x07 -> jft
304+
sdp OR ptd -> rtg
305+
y01 AND x01 -> khh
306+
bcr OR psw -> dfh
307+
chs AND rgv -> jhv
308+
y18 AND x18 -> sdp
309+
ddw AND fht -> qfn
310+
x33 XOR y33 -> jbr
311+
gsj AND ftw -> pwp
312+
x12 XOR y12 -> pps
313+
rvg OR wvv -> wdg
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package eu.sim642.adventofcode2024
2+
3+
import scala.collection.mutable
4+
5+
object Day24 {
6+
7+
enum Op {
8+
case And
9+
case Or
10+
case Xor
11+
}
12+
13+
enum Wire {
14+
case Input(value: Boolean)
15+
case Gate(lhs: String, op: Op, rhs: String)
16+
}
17+
18+
type Circuit = Map[String, Wire]
19+
20+
def getZValue(circuit: Circuit): Long = {
21+
22+
val memo = mutable.Map.empty[String, Boolean]
23+
24+
def evalName(name: String): Boolean =
25+
memo.getOrElseUpdate(name, evalWire(circuit(name)))
26+
27+
def evalWire(wire: Wire): Boolean = wire match {
28+
case Wire.Input(value) => value
29+
case Wire.Gate(lhs, op, rhs) =>
30+
val left = evalName(lhs)
31+
val right = evalName(rhs)
32+
op match {
33+
case Op.And => left && right
34+
case Op.Or => left || right
35+
case Op.Xor => left != right
36+
}
37+
}
38+
39+
circuit.keys
40+
.filter(_.startsWith("z"))
41+
.toSeq
42+
.sorted
43+
.foldRight(0L)({ case (zName, acc) =>
44+
acc << 1 | (if (evalName(zName)) 1 else 0)
45+
})
46+
}
47+
48+
def parseInput(s: String): (String, Wire.Input) = s match {
49+
case s"$name: 0" => name -> Wire.Input(false)
50+
case s"$name: 1" => name -> Wire.Input(true)
51+
}
52+
53+
def parseGate(s: String): (String, Wire.Gate) = s match {
54+
case s"$lhs AND $rhs -> $name" => name ->Wire.Gate(lhs, Op.And, rhs)
55+
case s"$lhs OR $rhs -> $name" => name -> Wire.Gate(lhs, Op.Or, rhs)
56+
case s"$lhs XOR $rhs -> $name" => name -> Wire.Gate(lhs, Op.Xor, rhs)
57+
}
58+
59+
def parseCircuit(input: String): Circuit = input match {
60+
case s"$inputs\n\n$gates" =>
61+
val inputMap = inputs.linesIterator.map(parseInput).toMap
62+
val gateMap = gates.linesIterator.map(parseGate).toMap
63+
inputMap ++ gateMap
64+
}
65+
66+
lazy val input: String = scala.io.Source.fromInputStream(getClass.getResourceAsStream("day24.txt")).mkString.trim
67+
68+
def main(args: Array[String]): Unit = {
69+
println(getZValue(parseCircuit(input)))
70+
}
71+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /