@@ -45,6 +45,21 @@ object Day24 {
45
45
})
46
46
}
47
47
48
+ def swap (circuit : Circuit , name1 : String , name2 : String ): Circuit =
49
+ circuit + (name1 -> circuit(name2)) + (name2 -> circuit(name1))
50
+
51
+ def changeInput (circuit : Circuit , prefix : String , value : Long ): Circuit = {
52
+ val (a, b) = circuit.keys
53
+ .filter(_.startsWith(prefix))
54
+ .toSeq
55
+ .sorted
56
+ .foldLeft((circuit, value))({ case ((circuit, value), prefixName) =>
57
+ (circuit + (prefixName -> Wire .Input ((value & 1 ) == 1L )), value >> 1 )
58
+ })
59
+ assert(b == 0 )
60
+ a
61
+ }
62
+
48
63
def parseInput (s : String ): (String , Wire .Input ) = s match {
49
64
case s " $name: 0 " => name -> Wire .Input (false )
50
65
case s " $name: 1 " => name -> Wire .Input (true )
@@ -63,9 +78,35 @@ object Day24 {
63
78
inputMap ++ gateMap
64
79
}
65
80
81
+ def printCircuitDot (circuit : Circuit ): Unit = {
82
+ println(" digraph circuit {" )
83
+ for ((name, wire) <- circuit) {
84
+ wire match {
85
+ case Wire .Input (value) =>
86
+ println(s " $name; " )
87
+ case Wire .Gate (lhs, op, rhs) =>
88
+ println(s " $name [label= \" $name $op\" ]; " )
89
+ println(s " $lhs -> $name; " )
90
+ println(s " $rhs -> $name; " )
91
+ }
92
+ }
93
+ println(" }" )
94
+ }
95
+
66
96
lazy val input : String = scala.io.Source .fromInputStream(getClass.getResourceAsStream(" day24.txt" )).mkString.trim
67
97
68
98
def main (args : Array [String ]): Unit = {
69
- println(getZValue(parseCircuit(input)))
99
+ val circuit = parseCircuit(input)
100
+ println(getZValue(circuit))
101
+ val circuit2 = swap(swap(swap(swap(circuit, " z21" , " nhn" ), " tvb" , " khg" ), " z33" , " gst" ), " z12" , " vdc" )
102
+ printCircuitDot(circuit2)
103
+ println(getZValue(circuit2))
104
+ println(" 51401618891888" )
105
+
106
+ val circuit3 = changeInput(changeInput(circuit2, " x" , 0 ), " asdasd" , 0 )
107
+ println(getZValue(circuit3))
108
+
109
+ println(Seq (" z21" , " nhn" , " tvb" , " khg" , " z33" , " gst" , " z12" , " vdc" ).sorted.mkString(" ," ))
110
+ // part 2: gst,khg,nhn,tvb,vdc,z12,z21,z33 - correct
70
111
}
71
112
}
0 commit comments