diff --git a/22/input.txt b/22/input.txt new file mode 100644 index 0000000..4520ff8 --- /dev/null +++ b/22/input.txt @@ -0,0 +1,1479 @@ +4,1,26~4,3,26 +2,4,97~2,4,99 +7,9,212~7,9,214 +6,9,50~9,9,50 +2,0,159~2,3,159 +2,6,189~5,6,189 +8,3,194~8,5,194 +4,7,124~5,7,124 +1,0,189~3,0,189 +0,7,157~1,7,157 +0,7,225~2,7,225 +3,8,197~3,8,199 +7,5,108~7,7,108 +6,3,136~8,3,136 +0,9,179~3,9,179 +2,9,267~4,9,267 +5,0,170~5,1,170 +2,3,265~2,6,265 +6,4,243~6,6,243 +7,7,262~7,8,262 +7,7,187~7,9,187 +2,6,304~4,6,304 +8,1,133~8,2,133 +7,2,186~7,5,186 +0,4,342~0,6,342 +6,4,246~9,4,246 +4,7,215~4,9,215 +2,0,302~2,1,302 +3,6,34~5,6,34 +5,4,112~5,7,112 +8,0,121~9,0,121 +4,1,72~4,2,72 +3,9,56~6,9,56 +1,5,149~5,5,149 +2,3,345~5,3,345 +5,6,342~5,8,342 +4,6,78~5,6,78 +9,5,339~9,7,339 +1,1,230~1,3,230 +4,1,118~6,1,118 +0,6,140~2,6,140 +6,5,151~8,5,151 +0,8,342~2,8,342 +4,0,207~4,1,207 +4,0,197~7,0,197 +6,5,274~6,8,274 +6,8,216~8,8,216 +7,7,327~7,8,327 +5,8,53~6,8,53 +3,3,67~5,3,67 +1,8,11~3,8,11 +0,2,129~0,2,131 +1,2,286~1,4,286 +2,3,155~2,6,155 +6,2,70~8,2,70 +0,0,296~2,0,296 +7,0,251~9,0,251 +0,2,66~2,2,66 +8,9,202~9,9,202 +9,3,269~9,5,269 +9,2,350~9,5,350 +3,1,269~3,2,269 +0,8,148~3,8,148 +0,6,305~3,6,305 +7,4,260~7,7,260 +4,6,318~7,6,318 +7,7,285~8,7,285 +4,2,74~4,4,74 +6,8,13~8,8,13 +2,0,320~3,0,320 +5,1,119~8,1,119 +8,1,166~8,4,166 +5,2,19~7,2,19 +5,1,231~7,1,231 +1,0,314~4,0,314 +3,3,109~7,3,109 +1,5,333~1,7,333 +4,6,82~8,6,82 +4,3,350~4,3,351 +7,7,315~7,9,315 +7,7,189~7,9,189 +2,2,276~2,5,276 +2,0,160~2,0,160 +7,0,275~7,1,275 +2,2,271~2,2,271 +7,3,328~7,5,328 +3,6,83~5,6,83 +3,6,63~3,7,63 +0,4,5~1,4,5 +7,3,190~7,5,190 +2,0,85~2,0,87 +3,3,276~3,3,279 +3,3,78~4,3,78 +7,0,5~7,2,5 +0,0,7~0,2,7 +5,4,179~5,6,179 +2,2,130~4,2,130 +3,0,180~5,0,180 +0,0,61~2,0,61 +3,4,153~5,4,153 +7,0,237~9,0,237 +2,2,218~4,2,218 +4,7,73~8,7,73 +4,3,201~4,5,201 +0,1,5~0,3,5 +2,0,82~2,2,82 +5,2,159~8,2,159 +7,6,187~9,6,187 +6,7,1~6,9,1 +1,2,114~3,2,114 +0,6,271~2,6,271 +0,6,164~2,6,164 +7,1,230~7,2,230 +8,7,55~8,7,56 +2,8,340~5,8,340 +5,0,295~5,0,297 +5,5,275~8,5,275 +4,6,317~4,7,317 +8,7,289~8,8,289 +3,2,220~3,4,220 +0,6,145~0,8,145 +9,8,3~9,9,3 +3,4,297~3,6,297 +7,3,124~9,3,124 +4,6,106~4,9,106 +3,4,222~5,4,222 +2,0,311~2,2,311 +1,4,4~3,4,4 +9,0,253~9,0,255 +0,1,188~3,1,188 +1,3,34~3,3,34 +9,0,76~9,2,76 +2,2,9~2,5,9 +9,0,119~9,2,119 +4,0,234~4,3,234 +6,1,80~6,1,81 +6,8,276~6,8,279 +5,4,148~5,7,148 +0,1,245~0,4,245 +7,5,203~7,6,203 +0,6,32~0,8,32 +3,1,91~5,1,91 +4,1,140~4,1,142 +4,6,105~7,6,105 +3,2,8~3,5,8 +1,6,12~1,8,12 +8,1,357~8,2,357 +4,4,188~6,4,188 +1,4,332~4,4,332 +0,8,290~0,9,290 +9,7,8~9,8,8 +1,7,15~1,9,15 +1,0,284~2,0,284 +0,6,141~0,6,143 +7,6,84~9,6,84 +8,1,144~8,1,146 +2,6,350~2,9,350 +8,6,318~9,6,318 +5,1,89~6,1,89 +5,7,185~7,7,185 +4,4,142~7,4,142 +3,2,50~3,4,50 +6,5,217~6,5,219 +2,1,76~4,1,76 +1,7,107~4,7,107 +5,2,104~5,4,104 +3,5,224~3,6,224 +5,6,257~5,7,257 +4,3,213~4,4,213 +3,3,246~3,5,246 +6,0,170~6,3,170 +7,5,202~7,6,202 +6,4,250~7,4,250 +0,1,193~0,4,193 +9,6,320~9,9,320 +6,0,132~9,0,132 +1,2,118~3,2,118 +6,2,113~8,2,113 +7,9,165~9,9,165 +6,4,80~6,8,80 +5,3,150~5,4,150 +3,5,244~3,8,244 +6,0,110~6,0,112 +0,0,1~0,0,1 +4,7,318~6,7,318 +3,8,179~6,8,179 +0,7,273~2,7,273 +3,6,109~4,6,109 +3,5,57~3,8,57 +7,1,132~7,2,132 +7,8,264~8,8,264 +4,2,245~4,2,248 +3,0,206~3,2,206 +1,8,255~3,8,255 +6,5,173~9,5,173 +5,1,163~5,2,163 +3,5,64~3,8,64 +5,0,183~8,0,183 +7,1,112~7,3,112 +5,7,255~7,7,255 +2,2,341~2,4,341 +9,4,153~9,4,154 +8,7,325~8,9,325 +6,4,51~8,4,51 +7,8,295~8,8,295 +0,4,307~1,4,307 +7,1,161~7,3,161 +8,6,292~8,9,292 +4,9,64~6,9,64 +5,7,225~5,7,226 +0,7,279~1,7,279 +4,6,42~4,6,44 +0,4,199~3,4,199 +4,1,217~6,1,217 +2,9,112~5,9,112 +6,7,10~6,7,12 +3,0,208~3,0,210 +0,7,155~2,7,155 +2,6,267~2,6,267 +5,8,168~7,8,168 +2,0,3~2,0,5 +1,0,344~1,2,344 +7,9,207~7,9,209 +5,5,43~5,8,43 +4,5,282~4,8,282 +1,7,245~4,7,245 +9,4,79~9,7,79 +6,7,168~8,7,168 +3,2,124~4,2,124 +8,2,98~8,2,100 +1,4,75~1,4,77 +7,3,137~7,3,139 +0,2,61~3,2,61 +2,3,176~2,5,176 +3,6,41~5,6,41 +5,5,346~7,5,346 +1,3,75~2,3,75 +5,3,348~7,3,348 +0,4,38~0,4,42 +3,4,139~6,4,139 +1,4,265~1,7,265 +1,2,68~1,2,68 +5,4,34~7,4,34 +5,5,29~6,5,29 +2,0,177~4,0,177 +9,7,338~9,8,338 +7,0,236~9,0,236 +4,1,73~4,3,73 +5,1,213~5,3,213 +3,3,128~3,6,128 +6,0,172~7,0,172 +6,2,133~6,3,133 +2,5,41~5,5,41 +0,1,307~1,1,307 +0,4,316~0,6,316 +7,1,118~9,1,118 +1,2,117~4,2,117 +9,2,75~9,3,75 +5,6,178~8,6,178 +3,4,268~5,4,268 +0,7,252~2,7,252 +0,0,172~0,2,172 +2,7,50~4,7,50 +7,7,136~9,7,136 +4,3,168~4,6,168 +8,0,178~9,0,178 +2,5,281~2,7,281 +3,1,229~3,4,229 +2,4,54~2,5,54 +8,3,322~8,6,322 +8,1,77~8,1,77 +8,2,123~8,4,123 +4,6,73~5,6,73 +3,4,48~6,4,48 +3,3,108~3,5,108 +6,5,329~6,7,329 +3,0,203~5,0,203 +2,4,134~2,8,134 +8,0,229~8,0,233 +6,4,95~6,4,97 +5,5,19~5,8,19 +1,9,9~1,9,11 +1,5,195~1,7,195 +6,5,322~6,8,322 +3,6,114~5,6,114 +8,1,164~8,3,164 +6,3,145~9,3,145 +2,4,302~2,5,302 +7,3,178~9,3,178 +1,4,230~3,4,230 +8,1,102~8,4,102 +8,6,218~8,8,218 +3,5,189~5,5,189 +1,0,12~1,1,12 +2,9,284~4,9,284 +5,1,137~5,3,137 +0,9,2~0,9,4 +6,4,63~6,4,65 +0,2,236~0,4,236 +2,2,173~2,4,173 +4,4,186~4,5,186 +4,7,178~4,9,178 +5,4,304~6,4,304 +6,4,41~7,4,41 +9,5,331~9,7,331 +0,2,174~1,2,174 +7,5,180~7,7,180 +7,2,162~7,3,162 +5,7,54~5,9,54 +8,7,267~8,7,267 +7,1,168~7,3,168 +6,4,39~8,4,39 +9,7,96~9,9,96 +2,0,126~2,2,126 +7,3,231~7,3,233 +7,3,354~7,3,357 +7,5,6~7,8,6 +7,3,258~7,3,259 +1,0,290~1,3,290 +0,8,351~2,8,351 +9,5,100~9,8,100 +1,2,16~1,6,16 +4,4,223~4,4,224 +7,2,79~7,2,82 +1,6,266~4,6,266 +1,2,226~3,2,226 +4,3,158~6,3,158 +5,1,167~7,1,167 +2,0,277~2,2,277 +2,3,172~2,5,172 +3,5,55~3,6,55 +8,7,170~8,7,171 +1,3,295~1,5,295 +1,1,270~1,3,270 +8,5,96~8,5,98 +0,9,128~2,9,128 +1,5,160~3,5,160 +5,7,46~8,7,46 +2,2,301~2,2,304 +1,7,1~1,9,1 +1,1,75~4,1,75 +8,6,12~8,8,12 +7,1,30~7,1,32 +1,4,34~1,7,34 +2,4,279~6,4,279 +0,2,72~0,4,72 +1,0,54~3,0,54 +1,0,241~4,0,241 +3,0,130~3,0,132 +0,5,173~0,8,173 +5,5,295~7,5,295 +7,7,195~7,7,197 +7,4,349~7,6,349 +2,1,240~2,3,240 +7,5,123~7,7,123 +8,1,38~8,1,39 +0,6,17~0,8,17 +9,4,249~9,7,249 +3,4,280~3,5,280 +1,6,85~3,6,85 +2,6,347~3,6,347 +5,4,192~5,6,192 +0,8,273~0,8,276 +2,5,156~4,5,156 +7,2,352~7,4,352 +1,0,132~1,0,134 +4,3,193~6,3,193 +3,7,342~3,9,342 +5,8,280~7,8,280 +2,8,290~2,9,290 +8,0,1~8,1,1 +3,9,62~5,9,62 +0,9,88~3,9,88 +7,8,95~9,8,95 +8,9,321~9,9,321 +2,5,345~3,5,345 +7,0,200~7,2,200 +8,1,14~8,3,14 +2,1,285~2,4,285 +9,3,7~9,6,7 +3,2,80~3,4,80 +1,1,346~1,4,346 +2,7,74~4,7,74 +2,7,139~2,9,139 +6,6,186~8,6,186 +0,9,262~3,9,262 +9,2,239~9,3,239 +6,9,348~8,9,348 +4,1,155~4,3,155 +3,7,290~5,7,290 +6,6,280~8,6,280 +4,2,306~4,2,309 +4,1,244~6,1,244 +6,7,283~8,7,283 +3,2,207~3,4,207 +0,7,258~2,7,258 +7,5,348~9,5,348 +0,2,33~0,3,33 +2,1,152~4,1,152 +0,3,89~0,3,91 +0,3,27~0,7,27 +1,9,20~4,9,20 +7,8,2~9,8,2 +4,2,346~4,6,346 +0,5,168~0,5,170 +3,3,338~3,4,338 +6,5,330~6,5,330 +1,8,17~3,8,17 +7,1,59~7,3,59 +7,3,146~7,5,146 +4,6,122~4,8,122 +5,2,300~7,2,300 +3,6,65~5,6,65 +6,0,49~6,3,49 +8,2,169~9,2,169 +2,6,111~4,6,111 +7,6,76~7,7,76 +3,4,351~3,5,351 +7,1,193~7,3,193 +8,7,86~8,9,86 +1,3,154~3,3,154 +0,2,279~2,2,279 +5,1,73~7,1,73 +6,5,312~6,7,312 +7,7,207~8,7,207 +7,1,259~9,1,259 +3,0,213~6,0,213 +8,7,24~8,9,24 +1,4,13~1,8,13 +7,2,236~7,2,239 +6,4,193~9,4,193 +4,2,304~7,2,304 +7,7,87~9,7,87 +7,3,225~9,3,225 +1,7,74~1,8,74 +3,7,352~5,7,352 +4,8,213~7,8,213 +7,8,324~8,8,324 +7,6,254~7,7,254 +4,2,348~4,3,348 +1,5,170~1,8,170 +2,6,74~5,6,74 +0,2,75~0,4,75 +9,2,15~9,4,15 +1,2,79~1,4,79 +3,0,128~5,0,128 +6,9,116~6,9,119 +8,0,33~9,0,33 +9,3,270~9,6,270 +1,1,190~1,4,190 +2,1,348~2,4,348 +1,0,319~3,0,319 +5,5,51~5,9,51 +0,3,234~0,5,234 +2,5,131~5,5,131 +8,3,197~8,5,197 +2,9,131~3,9,131 +7,2,22~7,2,23 +9,0,193~9,1,193 +1,6,199~4,6,199 +8,2,282~9,2,282 +3,9,282~4,9,282 +5,1,247~5,3,247 +1,0,245~3,0,245 +8,5,316~8,7,316 +1,2,156~5,2,156 +3,8,258~5,8,258 +1,4,267~1,8,267 +4,3,52~7,3,52 +0,6,341~1,6,341 +5,4,164~8,4,164 +3,0,238~6,0,238 +4,1,219~4,2,219 +5,0,9~6,0,9 +6,7,313~8,7,313 +3,8,184~5,8,184 +3,9,175~5,9,175 +5,3,144~5,4,144 +0,5,84~0,8,84 +1,0,126~1,2,126 +5,4,223~5,5,223 +3,1,106~4,1,106 +3,0,56~3,0,56 +6,3,12~9,3,12 +8,0,193~8,3,193 +2,1,291~2,4,291 +8,7,161~9,7,161 +3,7,191~4,7,191 +4,8,173~6,8,173 +5,7,41~5,9,41 +6,7,173~6,7,175 +7,7,325~7,9,325 +3,4,103~3,5,103 +6,5,321~8,5,321 +7,3,60~8,3,60 +5,0,6~5,2,6 +3,7,140~5,7,140 +7,0,223~7,2,223 +8,8,228~8,9,228 +5,1,23~5,3,23 +4,2,125~7,2,125 +5,2,45~7,2,45 +2,8,277~3,8,277 +6,0,127~6,0,129 +1,5,183~1,6,183 +8,6,137~9,6,137 +4,7,292~4,9,292 +1,1,56~4,1,56 +7,1,241~7,2,241 +6,2,44~6,4,44 +1,8,75~3,8,75 +0,1,33~0,1,35 +5,0,175~8,0,175 +6,3,99~6,5,99 +0,6,150~0,8,150 +7,2,233~9,2,233 +0,5,30~0,5,31 +3,1,127~3,4,127 +8,2,72~9,2,72 +6,2,116~7,2,116 +8,4,154~8,6,154 +1,2,115~2,2,115 +2,6,23~2,6,27 +8,9,49~9,9,49 +7,2,351~9,2,351 +6,8,210~9,8,210 +6,9,267~7,9,267 +5,4,37~5,5,37 +0,5,85~0,7,85 +5,4,19~7,4,19 +7,4,96~7,5,96 +2,3,347~2,5,347 +2,9,177~4,9,177 +8,0,223~8,1,223 +1,8,242~3,8,242 +6,8,146~9,8,146 +4,7,103~6,7,103 +4,4,1~4,5,1 +6,5,134~8,5,134 +2,0,181~2,3,181 +0,1,290~0,3,290 +2,5,150~2,5,151 +8,7,328~8,8,328 +5,0,123~8,0,123 +1,1,86~1,1,86 +3,1,306~5,1,306 +4,7,10~5,7,10 +7,0,202~7,2,202 +4,1,9~7,1,9 +5,9,287~7,9,287 +6,6,46~9,6,46 +3,8,156~5,8,156 +3,7,67~5,7,67 +0,3,65~2,3,65 +5,5,93~8,5,93 +3,4,1~3,4,3 +2,8,137~2,9,137 +6,1,79~9,1,79 +7,3,249~7,5,249 +6,5,81~6,7,81 +7,6,86~7,8,86 +2,9,194~5,9,194 +8,0,31~8,0,32 +7,5,342~7,6,342 +3,5,221~6,5,221 +3,5,275~3,7,275 +6,0,64~6,3,64 +3,8,151~6,8,151 +2,2,1~5,2,1 +9,3,77~9,5,77 +2,1,150~2,4,150 +2,8,66~3,8,66 +9,3,51~9,5,51 +8,3,65~8,5,65 +5,4,155~5,6,155 +7,2,73~7,2,75 +0,0,344~0,3,344 +0,4,169~2,4,169 +1,1,83~2,1,83 +7,9,56~7,9,58 +3,7,153~3,7,154 +8,5,8~8,8,8 +6,5,143~6,7,143 +1,1,69~3,1,69 +1,6,168~1,8,168 +5,4,31~5,6,31 +7,7,144~7,8,144 +6,5,6~6,8,6 +5,0,250~6,0,250 +9,7,59~9,9,59 +2,0,288~4,0,288 +3,2,57~3,3,57 +4,7,76~4,9,76 +6,0,6~6,3,6 +7,5,163~9,5,163 +0,5,159~2,5,159 +3,1,90~5,1,90 +2,9,109~4,9,109 +7,0,188~7,3,188 +0,6,151~0,7,151 +4,5,169~4,7,169 +2,3,206~4,3,206 +2,0,293~2,3,293 +2,6,230~2,6,230 +3,0,33~6,0,33 +3,5,53~3,7,53 +4,5,309~6,5,309 +5,3,50~5,4,50 +6,1,116~7,1,116 +0,9,91~3,9,91 +8,3,105~8,4,105 +1,4,131~3,4,131 +4,3,224~7,3,224 +2,3,326~5,3,326 +2,6,236~4,6,236 +7,4,125~9,4,125 +8,4,156~8,7,156 +7,6,162~9,6,162 +8,6,227~8,9,227 +4,3,337~4,6,337 +6,2,237~6,4,237 +4,0,237~4,3,237 +1,5,137~3,5,137 +2,9,117~4,9,117 +1,9,130~1,9,131 +7,2,194~7,2,197 +3,1,64~3,3,64 +1,6,294~1,8,294 +4,7,340~5,7,340 +4,5,238~4,7,238 +2,1,89~2,3,89 +3,4,36~3,6,36 +5,6,22~5,8,22 +2,8,70~3,8,70 +1,1,191~1,3,191 +2,4,162~2,7,162 +3,2,302~5,2,302 +1,1,67~3,1,67 +3,9,203~4,9,203 +1,2,210~3,2,210 +6,2,51~8,2,51 +0,0,231~0,3,231 +3,7,75~4,7,75 +2,1,300~2,2,300 +7,4,132~9,4,132 +9,7,133~9,7,135 +3,6,307~3,6,309 +4,5,283~6,5,283 +0,2,338~3,2,338 +3,3,233~4,3,233 +8,6,19~8,8,19 +3,0,80~4,0,80 +2,0,204~5,0,204 +0,3,116~0,3,118 +7,0,27~7,2,27 +0,6,210~1,6,210 +3,2,27~5,2,27 +5,1,113~7,1,113 +0,8,153~0,8,157 +2,7,286~5,7,286 +2,4,95~2,6,95 +1,1,272~1,3,272 +5,2,71~7,2,71 +5,6,250~7,6,250 +6,8,223~6,8,226 +6,0,247~6,2,247 +6,0,8~8,0,8 +0,5,96~2,5,96 +6,4,343~6,4,345 +3,3,22~6,3,22 +0,1,29~3,1,29 +2,3,320~2,6,320 +2,4,185~3,4,185 +5,6,86~5,9,86 +4,7,135~4,9,135 +4,6,16~6,6,16 +6,1,221~9,1,221 +7,4,177~7,7,177 +1,3,15~3,3,15 +0,9,272~0,9,274 +3,0,58~3,0,62 +1,7,246~2,7,246 +7,2,26~7,5,26 +0,4,177~2,4,177 +2,6,307~2,8,307 +2,2,266~2,4,266 +6,8,207~8,8,207 +0,5,114~0,7,114 +4,8,48~4,8,51 +6,6,119~9,6,119 +2,6,354~2,9,354 +5,5,276~5,6,276 +8,1,11~8,2,11 +5,0,52~7,0,52 +6,2,196~6,3,196 +0,8,269~2,8,269 +4,8,109~6,8,109 +1,4,29~1,7,29 +1,2,310~2,2,310 +0,7,242~2,7,242 +7,0,249~9,0,249 +3,0,194~3,0,195 +8,6,219~8,6,221 +2,2,183~4,2,183 +5,2,18~5,5,18 +2,3,222~2,6,222 +6,1,76~8,1,76 +4,8,110~5,8,110 +0,6,227~0,8,227 +2,2,163~2,3,163 +9,0,55~9,2,55 +2,0,59~2,2,59 +0,8,59~2,8,59 +5,1,142~7,1,142 +1,9,263~3,9,263 +2,6,115~2,9,115 +6,1,86~6,3,86 +7,4,248~7,6,248 +1,3,302~1,3,304 +0,9,287~2,9,287 +7,4,268~9,4,268 +8,5,89~8,8,89 +8,2,139~8,5,139 +9,0,1~9,1,1 +5,6,203~6,6,203 +1,7,200~1,9,200 +6,6,92~8,6,92 +3,1,101~6,1,101 +8,3,161~8,5,161 +9,5,177~9,7,177 +3,5,39~3,7,39 +7,2,254~7,3,254 +2,0,12~5,0,12 +8,8,4~8,9,4 +6,7,149~6,8,149 +1,3,274~3,3,274 +1,3,329~3,3,329 +0,5,174~0,7,174 +7,0,248~7,2,248 +1,2,72~1,5,72 +6,0,94~6,3,94 +5,7,137~5,9,137 +6,2,130~8,2,130 +0,6,75~2,6,75 +0,0,8~2,0,8 +0,8,293~0,8,296 +6,4,66~7,4,66 +2,5,3~2,9,3 +8,7,47~8,9,47 +1,5,7~3,5,7 +4,1,138~6,1,138 +7,1,165~7,3,165 +9,5,311~9,7,311 +2,0,281~2,3,281 +1,6,332~4,6,332 +2,8,9~6,8,9 +6,8,349~9,8,349 +8,2,269~8,4,269 +0,2,202~0,4,202 +3,1,161~3,3,161 +3,0,322~4,0,322 +5,8,93~7,8,93 +3,5,109~6,5,109 +6,6,167~6,6,169 +6,0,200~6,1,200 +6,5,300~6,5,302 +8,3,147~8,4,147 +7,8,193~7,9,193 +1,1,294~3,1,294 +8,4,53~8,7,53 +9,6,188~9,9,188 +2,4,241~2,6,241 +7,8,234~7,8,235 +4,2,92~4,4,92 +7,9,88~8,9,88 +3,2,75~5,2,75 +5,3,263~6,3,263 +9,3,82~9,3,84 +4,6,353~4,8,353 +3,4,349~3,7,349 +4,1,246~6,1,246 +7,7,130~9,7,130 +8,5,279~9,5,279 +8,8,15~8,8,18 +5,3,53~5,3,56 +9,4,37~9,5,37 +4,9,136~4,9,139 +9,6,259~9,8,259 +4,0,305~4,3,305 +6,4,165~6,4,168 +1,6,209~2,6,209 +8,7,11~8,7,11 +2,0,171~2,2,171 +3,3,112~5,3,112 +4,5,223~4,5,223 +9,6,52~9,6,55 +3,7,315~6,7,315 +6,0,99~6,2,99 +4,9,165~5,9,165 +0,0,306~1,0,306 +2,0,205~2,1,205 +6,0,226~8,0,226 +2,3,187~2,7,187 +8,5,2~8,5,5 +2,3,221~4,3,221 +5,0,200~5,0,201 +2,5,43~2,5,45 +2,4,53~4,4,53 +0,5,255~0,7,255 +2,4,249~2,6,249 +3,1,223~3,4,223 +5,6,195~5,8,195 +3,7,280~3,9,280 +6,3,45~6,6,45 +7,7,160~7,9,160 +6,1,61~6,4,61 +5,5,217~5,7,217 +4,8,10~5,8,10 +1,2,309~1,3,309 +6,7,22~9,7,22 +1,0,62~1,0,65 +3,5,282~3,5,284 +0,2,341~1,2,341 +1,4,95~1,6,95 +6,1,82~6,1,85 +1,3,308~3,3,308 +6,5,102~6,7,102 +6,3,178~6,5,178 +6,7,270~6,9,270 +0,4,33~1,4,33 +0,3,239~0,3,243 +4,4,216~7,4,216 +0,2,228~3,2,228 +7,3,126~8,3,126 +5,5,57~5,6,57 +1,6,98~4,6,98 +4,6,338~4,9,338 +0,3,3~0,6,3 +0,7,271~0,9,271 +9,1,333~9,4,333 +5,5,40~5,7,40 +0,6,177~0,6,177 +1,0,38~4,0,38 +5,0,102~8,0,102 +8,2,283~8,4,283 +5,1,48~5,2,48 +2,6,157~4,6,157 +6,5,202~6,5,204 +5,1,161~5,3,161 +9,5,192~9,7,192 +5,6,174~7,6,174 +7,4,251~8,4,251 +9,4,195~9,4,197 +0,7,268~2,7,268 +3,0,78~3,2,78 +6,5,303~6,7,303 +8,0,354~8,2,354 +4,4,340~6,4,340 +5,1,218~8,1,218 +1,4,338~1,7,338 +8,6,224~8,6,226 +1,5,249~1,8,249 +2,5,291~4,5,291 +6,2,89~6,5,89 +5,2,147~7,2,147 +4,8,113~6,8,113 +5,0,253~5,2,253 +2,1,160~2,3,160 +6,7,159~8,7,159 +6,3,15~6,3,15 +5,3,164~6,3,164 +1,2,111~1,4,111 +0,6,270~2,6,270 +1,6,94~3,6,94 +7,3,266~7,5,266 +3,5,183~6,5,183 +2,2,19~2,3,19 +5,4,108~5,4,111 +9,7,181~9,9,181 +5,6,4~5,8,4 +9,3,177~9,4,177 +7,3,318~7,5,318 +5,6,336~8,6,336 +3,7,150~6,7,150 +6,0,68~6,2,68 +5,3,190~5,4,190 +0,7,183~2,7,183 +3,2,197~3,4,197 +6,3,7~6,4,7 +0,2,124~2,2,124 +2,2,336~2,4,336 +6,2,229~8,2,229 +5,5,70~5,7,70 +1,8,58~3,8,58 +1,7,125~1,9,125 +4,2,252~4,4,252 +6,7,192~6,7,194 +6,4,280~7,4,280 +6,5,121~8,5,121 +2,1,30~3,1,30 +1,2,170~2,2,170 +6,5,144~6,7,144 +4,3,211~6,3,211 +1,7,201~1,8,201 +3,5,226~3,5,228 +3,6,77~6,6,77 +3,4,298~3,6,298 +3,4,267~3,6,267 +6,4,14~6,4,15 +1,4,55~2,4,55 +6,3,278~7,3,278 +5,3,147~5,5,147 +0,3,248~0,4,248 +4,2,35~4,3,35 +9,6,257~9,7,257 +0,0,38~0,1,38 +3,0,257~5,0,257 +6,3,319~8,3,319 +2,5,201~2,7,201 +1,3,285~1,6,285 +1,1,184~3,1,184 +7,7,288~7,9,288 +3,4,281~3,4,283 +8,5,158~8,5,158 +4,0,107~7,0,107 +1,4,153~1,7,153 +6,5,317~8,5,317 +9,3,276~9,4,276 +5,3,268~7,3,268 +5,8,62~8,8,62 +0,0,233~0,0,233 +8,1,22~8,4,22 +3,3,32~6,3,32 +5,0,104~8,0,104 +3,1,255~6,1,255 +9,6,6~9,8,6 +1,6,197~1,8,197 +4,7,114~4,9,114 +4,5,252~4,5,254 +7,0,293~7,0,296 +5,9,201~5,9,203 +6,4,349~6,5,349 +4,3,209~4,4,209 +3,9,285~5,9,285 +2,6,169~2,9,169 +0,6,185~0,8,185 +2,4,318~2,7,318 +5,0,70~8,0,70 +8,9,168~9,9,168 +0,1,318~1,1,318 +7,8,222~7,9,222 +4,2,90~6,2,90 +1,5,248~1,7,248 +9,4,83~9,4,83 +7,7,265~9,7,265 +7,7,192~7,7,193 +0,5,319~0,8,319 +9,3,273~9,4,273 +0,0,304~0,1,304 +9,4,139~9,7,139 +3,6,158~3,7,158 +8,0,125~8,0,126 +9,6,256~9,9,256 +3,0,192~3,2,192 +0,8,203~1,8,203 +2,6,91~5,6,91 +6,2,58~9,2,58 +5,8,92~7,8,92 +5,4,146~6,4,146 +6,5,264~8,5,264 +7,6,282~8,6,282 +2,1,64~2,3,64 +3,3,69~4,3,69 +3,4,105~5,4,105 +4,6,108~6,6,108 +2,5,296~4,5,296 +7,5,308~9,5,308 +0,5,327~2,5,327 +5,6,293~5,7,293 +5,1,257~7,1,257 +2,8,166~6,8,166 +2,2,55~3,2,55 +4,8,271~6,8,271 +7,0,176~9,0,176 +3,4,166~5,4,166 +9,5,57~9,7,57 +8,4,277~8,7,277 +8,4,131~8,5,131 +3,5,343~4,5,343 +2,4,288~2,7,288 +1,0,216~3,0,216 +1,5,307~1,7,307 +5,7,84~8,7,84 +0,7,291~2,7,291 +7,1,245~7,1,247 +7,0,191~9,0,191 +1,2,211~1,2,212 +7,2,144~7,4,144 +7,1,274~7,2,274 +1,5,181~1,8,181 +7,7,149~7,8,149 +6,3,92~6,5,92 +2,6,228~2,7,228 +1,6,207~2,6,207 +1,6,166~1,8,166 +4,5,127~6,5,127 +4,4,17~7,4,17 +1,2,306~1,4,306 +4,2,129~7,2,129 +1,1,58~1,1,60 +6,2,162~6,6,162 +3,3,217~4,3,217 +0,5,263~3,5,263 +3,4,219~6,4,219 +6,5,196~6,7,196 +8,4,254~8,5,254 +9,2,53~9,4,53 +2,9,258~2,9,260 +7,4,184~7,7,184 +7,7,190~7,9,190 +2,3,313~3,3,313 +2,6,248~4,6,248 +5,5,134~5,8,134 +5,5,211~7,5,211 +2,3,324~4,3,324 +0,3,192~3,3,192 +8,5,178~9,5,178 +8,3,160~8,6,160 +8,0,80~8,2,80 +9,2,242~9,3,242 +7,0,124~7,0,126 +5,0,126~6,0,126 +1,4,150~1,7,150 +1,4,191~1,4,193 +2,3,16~2,6,16 +3,4,182~3,6,182 +7,1,331~7,3,331 +1,0,196~4,0,196 +5,0,292~7,0,292 +7,3,255~7,5,255 +3,7,248~3,9,248 +7,7,141~7,8,141 +2,6,80~4,6,80 +6,5,128~8,5,128 +7,9,215~9,9,215 +1,6,4~2,6,4 +5,8,231~8,8,231 +6,4,36~9,4,36 +6,3,266~6,5,266 +3,2,316~3,5,316 +2,6,63~2,8,63 +1,0,186~1,2,186 +3,1,158~4,1,158 +4,5,331~7,5,331 +3,3,203~5,3,203 +8,6,128~8,9,128 +6,5,212~6,8,212 +7,1,171~7,3,171 +5,0,166~5,3,166 +4,5,306~7,5,306 +2,3,148~5,3,148 +0,1,86~0,1,86 +2,7,120~2,9,120 +4,5,294~7,5,294 +5,7,7~7,7,7 +0,4,335~3,4,335 +3,7,16~3,9,16 +0,6,5~0,8,5 +7,1,2~7,4,2 +0,6,193~2,6,193 +9,4,82~9,5,82 +5,9,199~8,9,199 +4,0,291~8,0,291 +0,7,353~0,9,353 +7,4,78~7,7,78 +6,6,94~9,6,94 +1,5,173~4,5,173 +3,4,145~3,7,145 +6,3,235~6,5,235 +1,0,2~3,0,2 +1,3,266~1,5,266 +8,1,239~8,2,239 +6,2,146~8,2,146 +1,7,113~3,7,113 +0,6,4~0,8,4 +4,5,180~4,5,180 +3,3,194~6,3,194 +6,5,146~6,5,148 +0,5,179~4,5,179 +6,3,274~8,3,274 +2,0,175~2,2,175 +4,5,328~6,5,328 +4,7,141~6,7,141 +1,5,84~1,7,84 +2,2,12~2,4,12 +2,9,59~3,9,59 +5,2,251~7,2,251 +4,5,136~4,7,136 +5,3,136~5,5,136 +2,6,192~2,9,192 +6,2,232~6,4,232 +9,6,194~9,6,195 +9,0,78~9,1,78 +4,7,44~6,7,44 +2,2,139~5,2,139 +2,7,42~4,7,42 +1,9,181~2,9,181 +5,5,226~5,5,229 +2,5,279~4,5,279 +7,1,244~7,2,244 +5,3,26~5,5,26 +1,0,121~1,2,121 +0,7,16~1,7,16 +3,0,53~3,2,53 +7,1,195~7,1,196 +2,3,239~5,3,239 +0,1,275~1,1,275 +5,7,220~5,7,222 +1,2,167~1,4,167 +5,8,91~7,8,91 +4,5,132~4,7,132 +0,4,26~2,4,26 +9,6,179~9,8,179 +3,9,14~5,9,14 +5,9,114~7,9,114 +5,8,57~8,8,57 +2,5,224~2,9,224 +3,2,120~3,2,121 +0,0,288~0,2,288 +8,7,220~8,9,220 +3,8,275~6,8,275 +3,9,15~6,9,15 +5,5,299~8,5,299 +0,6,97~2,6,97 +1,9,203~1,9,205 +8,6,346~8,9,346 +3,7,91~5,7,91 +2,2,299~5,2,299 +3,6,345~5,6,345 +6,0,130~9,0,130 +5,2,10~7,2,10 +2,9,14~2,9,14 +6,9,136~7,9,136 +8,9,52~8,9,54 +8,0,23~8,3,23 +5,5,344~7,5,344 +7,1,80~7,1,83 +0,4,232~1,4,232 +0,2,125~1,2,125 +3,0,211~4,0,211 +4,3,329~4,3,331 +4,0,243~4,2,243 +2,7,283~2,9,283 +1,1,122~1,3,122 +6,1,78~6,3,78 +3,5,206~3,7,206 +3,2,236~3,3,236 +8,2,121~9,2,121 +2,8,172~3,8,172 +2,6,239~2,8,239 +1,3,194~1,6,194 +6,7,208~7,7,208 +4,3,196~4,3,198 +1,1,103~3,1,103 +2,5,97~4,5,97 +2,9,12~6,9,12 +1,0,36~1,2,36 +6,5,171~6,8,171 +7,3,209~7,6,209 +0,3,24~2,3,24 +4,8,220~6,8,220 +1,4,109~1,8,109 +4,8,139~7,8,139 +2,1,7~2,4,7 +4,6,14~7,6,14 +6,0,277~8,0,277 +0,1,301~3,1,301 +1,1,297~3,1,297 +7,5,251~7,6,251 +1,4,114~1,6,114 +8,7,317~8,9,317 +6,5,201~6,7,201 +1,0,316~1,1,316 +1,9,6~5,9,6 +4,1,3~6,1,3 +6,6,165~6,8,165 +3,5,73~5,5,73 +1,5,6~4,5,6 +1,1,10~3,1,10 +2,3,171~4,3,171 +6,3,18~6,3,21 +8,5,142~8,7,142 +1,3,97~1,5,97 +3,9,265~6,9,265 +1,9,22~2,9,22 +0,1,230~0,3,230 +1,9,255~5,9,255 +4,9,55~7,9,55 +4,7,189~6,7,189 +1,5,260~1,7,260 +6,7,218~6,9,218 +5,6,18~5,8,18 +0,1,232~0,3,232 +0,7,292~0,7,293 +7,6,253~9,6,253 +9,2,275~9,4,275 +1,7,60~3,7,60 +5,7,121~6,7,121 +6,2,261~6,6,261 +9,1,147~9,3,147 +7,3,228~7,3,229 +0,7,243~0,8,243 +5,3,232~5,3,233 +5,0,32~7,0,32 +3,0,289~5,0,289 +5,2,127~5,4,127 +4,9,196~6,9,196 +2,4,290~3,4,290 +0,2,34~2,2,34 +4,8,77~4,9,77 +1,9,94~1,9,95 +6,4,20~8,4,20 +4,1,70~7,1,70 +9,1,127~9,3,127 +7,9,5~9,9,5 +6,2,234~6,2,236 +6,2,80~6,2,81 +9,2,155~9,4,155 +9,7,333~9,7,336 +1,3,203~1,3,203 +3,9,286~3,9,288 +8,9,131~8,9,131 +8,4,343~8,6,343 +6,0,186~6,0,187 +2,1,137~2,4,137 +1,5,154~1,7,154 +7,3,79~9,3,79 +6,2,8~8,2,8 +5,1,17~8,1,17 +5,5,2~5,8,2 +0,2,282~2,2,282 +5,0,263~5,2,263 +7,1,303~7,3,303 +9,3,60~9,5,60 +4,2,215~4,4,215 +7,2,203~7,2,205 +0,8,183~2,8,183 +5,5,49~5,7,49 +4,2,298~4,3,298 +3,3,227~6,3,227 +4,5,340~8,5,340 +0,1,204~0,3,204 +2,2,26~2,2,28 +0,7,30~0,8,30 +5,4,258~8,4,258 +6,0,71~8,0,71 +3,6,287~3,8,287 +8,3,165~8,4,165 +6,0,278~8,0,278 +6,7,83~6,8,83 +9,6,193~9,6,193 +5,7,125~8,7,125 +6,4,240~6,4,240 +6,9,133~8,9,133 +0,8,320~3,8,320 +4,6,121~6,6,121 +1,8,288~1,9,288 +1,3,26~1,3,27 +3,5,253~3,7,253 +2,6,233~2,6,235 +8,5,310~8,6,310 +8,6,167~8,6,169 +4,0,315~4,0,315 +2,8,72~3,8,72 +4,3,18~4,5,18 +7,5,206~7,8,206 +6,7,232~6,9,232 +4,3,23~4,4,23 +5,5,164~6,5,164 +8,4,100~8,6,100 +4,3,231~6,3,231 +8,2,324~8,4,324 +4,2,295~4,5,295 +5,7,75~6,7,75 +0,6,81~2,6,81 +2,2,79~2,5,79 +6,1,171~6,3,171 +0,1,84~1,1,84 +0,3,113~2,3,113 +1,8,78~3,8,78 +4,5,160~4,6,160 +4,6,9~5,6,9 +1,5,74~1,5,76 +2,6,185~4,6,185 +1,3,301~2,3,301 +2,5,324~2,7,324 +6,6,183~8,6,183 +3,3,142~3,4,142 +0,2,127~1,2,127 +2,1,23~2,4,23 +1,4,292~3,4,292 +7,4,327~9,4,327 +0,6,263~1,6,263 +5,1,141~8,1,141 +6,6,3~8,6,3 +0,2,168~0,2,170 +7,7,280~8,7,280 +1,9,180~2,9,180 +1,1,177~1,3,177 +1,3,76~4,3,76 +7,4,68~7,6,68 +4,5,247~4,7,247 +9,2,285~9,2,288 +5,5,176~7,5,176 +9,3,49~9,6,49 +1,0,244~4,0,244 +6,6,20~8,6,20 +5,1,280~5,4,280 +7,3,276~7,3,277 +0,4,35~0,4,36 +5,1,67~7,1,67 +2,7,68~2,9,68 +3,9,198~3,9,200 +7,1,133~7,2,133 +0,6,99~3,6,99 +2,3,323~2,5,323 +6,5,325~8,5,325 +3,5,115~6,5,115 +2,1,142~2,3,142 +3,9,17~5,9,17 +1,4,73~1,7,73 +3,7,55~3,9,55 +8,2,330~8,4,330 +2,8,114~2,9,114 +8,6,287~8,7,287 +2,8,154~4,8,154 +5,0,169~5,3,169 +2,4,299~2,6,299 +2,3,21~2,6,21 +4,6,8~6,6,8 +5,0,185~5,0,188 +9,2,330~9,5,330 +2,1,314~2,1,316 +7,1,68~9,1,68 +3,4,101~6,4,101 +8,8,298~9,8,298 +8,2,280~8,4,280 +7,1,35~7,3,35 +0,8,123~2,8,123 +5,5,214~7,5,214 +0,6,117~3,6,117 +4,4,330~4,6,330 +6,5,348~6,6,348 +3,5,157~5,5,157 +5,0,114~5,3,114 +1,5,117~2,5,117 +6,4,12~6,6,12 +4,6,273~4,8,273 +1,0,214~1,2,214 +0,1,88~0,3,88 +7,3,63~9,3,63 +2,6,345~2,9,345 +9,5,314~9,8,314 +6,1,228~6,3,228 +0,3,71~3,3,71 +3,7,251~3,8,251 +9,6,341~9,6,342 +4,6,335~6,6,335 +0,3,203~0,6,203 +0,0,287~2,0,287 +1,0,129~1,1,129 +8,2,236~8,2,238 +1,2,178~1,4,178 +2,3,343~5,3,343 +2,9,293~3,9,293 +7,1,77~7,4,77 +1,7,87~1,7,89 +9,5,132~9,7,132 +0,2,167~0,5,167 +8,3,175~8,5,175 +6,2,30~6,5,30 +6,2,97~8,2,97 +1,3,284~2,3,284 +2,6,135~2,6,137 +5,1,215~5,2,215 +3,7,159~3,7,160 +6,3,124~6,6,124 +0,3,182~0,5,182 +0,6,34~0,7,34 +2,3,312~2,5,312 +6,2,303~6,4,303 +8,4,259~9,4,259 +6,1,36~9,1,36 +9,1,128~9,3,128 +6,9,205~9,9,205 +0,6,112~0,8,112 +8,4,103~8,7,103 +0,5,315~2,5,315 +1,2,268~3,2,268 +8,6,165~9,6,165 +0,7,276~3,7,276 +2,4,280~2,5,280 +4,6,287~4,9,287 +9,2,150~9,4,150 +3,6,270~3,6,273 +5,3,282~5,4,282 +0,7,87~0,9,87 +7,0,30~9,0,30 +2,5,76~6,5,76 +1,9,172~4,9,172 +0,1,30~0,4,30 +9,0,239~9,0,241 +2,1,129~5,1,129 +1,4,205~1,6,205 +6,6,314~7,6,314 +6,4,297~6,6,297 +3,7,76~3,9,76 +9,3,175~9,5,175 +2,8,181~4,8,181 +6,5,118~6,7,118 +0,7,110~2,7,110 +2,3,86~3,3,86 +5,1,262~7,1,262 +6,3,10~6,6,10 +0,4,117~0,5,117 +0,2,166~3,2,166 +2,7,253~2,9,253 +4,3,301~4,6,301 +3,7,119~3,9,119 +5,3,47~8,3,47 +3,5,56~5,5,56 +3,5,191~5,5,191 +1,5,126~1,8,126 +2,7,249~2,7,251 +9,7,189~9,7,191 +5,5,186~5,7,186 +9,5,134~9,6,134 +9,9,53~9,9,54 +8,1,261~8,1,261 +8,8,321~9,8,321 +6,6,214~6,6,217 +9,2,236~9,3,236 +4,5,47~4,8,47 +4,3,216~6,3,216 +4,0,256~5,0,256 +9,7,98~9,9,98 +0,4,336~0,5,336 +5,6,88~5,8,88 +1,0,243~3,0,243 +1,1,202~1,4,202 +1,0,198~1,2,198 +1,9,183~4,9,183 +2,1,153~2,4,153 +2,0,84~2,3,84 +6,8,221~7,8,221 +4,2,128~4,4,128 +3,8,246~3,9,246 +4,4,85~4,6,85 +0,6,322~0,9,322 +8,6,188~8,8,188 +5,1,222~8,1,222 +7,2,271~7,4,271 +9,1,148~9,1,149 +1,1,26~3,1,26 +4,0,216~4,0,217 +6,6,199~7,6,199 +5,9,162~8,9,162 +1,7,208~1,9,208 +0,5,288~1,5,288 +2,3,298~2,5,298 +0,5,310~2,5,310 +3,9,9~5,9,9 +5,8,59~8,8,59 +0,2,18~1,2,18 +2,1,119~2,3,119 +3,7,195~3,9,195 +3,5,203~5,5,203 +4,4,249~4,6,249 +1,1,179~4,1,179 diff --git a/22/part1.pl b/22/part1.pl new file mode 100644 index 0000000..e106e73 --- /dev/null +++ b/22/part1.pl @@ -0,0 +1,100 @@ +:- use_module(library(pio)). +:- use_module(library(dcg/basics)). +:- op(700, xfx, [supports, is_way_above]). +:- initialization(main, main). + +main([FileName|_]) :- + input(FileName, Bricks), + stack(Bricks, Stacked), + support_listing(Stacked, LookDown, LookUp), + max_member(MaxN-_-_-_, Bricks), + findall(N, (between(0, MaxN, N), can_remove(N, LookDown, LookUp)), Ns), + length(Ns, Answer), + write(Answer), nl. + +can_remove(N, LookDown, LookUp) :- + BeingSupporteds = LookUp.N, + write(N), write("("), write(LookDown.N), write(") supporting "), + write(BeingSupporteds), nl, + maplist(supported_by_more_than_one(LookDown), BeingSupporteds). + +supported_by_more_than_one(LookDown, N) :- LookDown.N > 1. + +% StackedBricks is sorted by decreasing top edge +support_listing(StackedBricks, SupportedCount, SupportingMap) :- + findall( + N=SupportedListLen, + ( append(_, [Brick1|Belows], StackedBricks), + supported_by(Brick1, Belows, SupportedList), + length(SupportedList, SupportedListLen), + Brick1 = N-_-_-_), + SupportedLists), + SupportedCount = brick{}.put(SupportedLists), + sort(2, @=<, StackedBricks, StackSortedByBottoms), + findall( + M=SupportingList, + ( append(_, [Brick2|Aboves], StackSortedByBottoms), + supporting(Brick2, Aboves, SupportingList), + Brick2 = M-_-_-_), + SupportingLists), + SupportingMap = brick{}.put(SupportingLists). + +% Aboves need to be sorted by increasing bot edge +supporting(_Brick, [], []). +supporting(Brick, [Above|_], []) :- Above is_way_above Brick, !. +supporting(Brick, [Above|Aboves], Supportings) :- + supporting(Brick, Aboves, NextSupportings), + ( Brick supports Above + -> Above = N-_-_-_, Supportings = [N|NextSupportings] + ; Supportings = NextSupportings). + +% Belows need to be sorted decreasing by top edge +supported_by(_Brick, [], []). +supported_by(Brick, [Below|_], []) :- Brick is_way_above Below, !. +supported_by(Brick, [Below|Belows], SupportedBy) :- + supported_by(Brick, Belows, NextSupportedBy), + ( Below supports Brick + -> Below = N-_-_-_, SupportedBy = [N|NextSupportedBy] + ; SupportedBy = NextSupportedBy). + +is_way_above(_-_-_-(Z2bot-_), _-_-_-(_-Z1top)) :- Z2bot > Z1top + 1. +supports(Brick1, Brick2) :- + overlap(Brick1, Brick2), + Brick1 = _-_-_-(_-Z1top), Brick2 = _-_-_-(Z2bot-_), Z2bot =:= Z1top + 1. + +stack(Bricks, StackedBricks) :- + empty_heap(H0), foldl(stack1, Bricks, H0, Heap), + heap_to_list(Heap, HeapList), + maplist([_-Brick, Brick]>>(true), HeapList, StackedBricks). + +stack1(Brick, Heap, NewHeap) :- + ( max_of_heap(Heap, OldZtop, OldTop), overlap(Brick, OldTop) + ; empty_heap(Heap), OldZtop is 0), + Brick = N-X-Y-(Zbot-Ztop), + NewZbot is OldZtop + 1, NewZtop is NewZbot + (Ztop - Zbot), + add_to_maxheap(Heap, NewZtop, N-X-Y-(NewZbot-NewZtop), NewHeap), + !. +stack1(Brick, Heap, NewHeap) :- + get_from_maxheap(Heap, LastZtop, LastTopBrick, HeapWithoutTop), + stack1(Brick, HeapWithoutTop, NewHeapWithoutTop), + add_to_maxheap(NewHeapWithoutTop, LastZtop, LastTopBrick, NewHeap). + +overlap(_-(Xa1-Xa2)-(Ya1-Ya2)-_, _-(Xb1-Xb2)-(Yb1-Yb2)-_) :- + Xa1 =< Xb2, Xa2 >= Xb1, Ya1 =< Yb2, Ya2 >= Yb1. + +% input parsing stuff below. Brick indexing is for debugging. +input(FileName, SortedBricks) :- + phrase_from_file(bricks(0, Bricks), FileName), + sort(2, @=<, Bricks, SortedBricks). +bricks(_, []) --> eos, !. +bricks(N, [Line|Lines]) --> {Next is N+1}, brick(N, Line), bricks(Next, Lines). +brick(N, N-(X1-X2)-(Y1-Y2)-(Z1-Z2)) --> + number(X1), ",", number(Y1), ",", number(Z1), "~", + number(X2), ",", number(Y2), ",", number(Z2), "\n". + +% maxheap wrapper. PriX = -Pri, which is the Ztop +max_of_heap(H, Pri, Key) :- min_of_heap(H, PriX, Key), Pri is -PriX. +add_to_maxheap(H0, Pri, Key, H) :- PriX is -Pri, add_to_heap(H0, PriX, Key, H). +get_from_maxheap(H0, Pri, Key, H) :- get_from_heap(H0, PriX, Key, H), Pri is -PriX. + +% Can probably do 2 maps, one by top edges and one by bottom edges and lookup diff --git a/22/test.txt b/22/test.txt new file mode 100644 index 0000000..43a7fc5 --- /dev/null +++ b/22/test.txt @@ -0,0 +1,7 @@ +1,0,1~1,2,1 +0,0,2~2,0,2 +0,2,3~2,2,3 +0,0,4~0,2,4 +2,0,5~2,2,5 +0,1,6~2,1,6 +1,1,8~1,1,9