Day 23 (bash) part 2 (~7mn run)
This commit is contained in:
@@ -485,3 +485,15 @@ ex1.bash: res=31314
|
|||||||
ex2.bash: res=32760
|
ex2.bash: res=32760
|
||||||
time: 1:21.92 real, 81.89 user, 0.01 sys
|
time: 1:21.92 real, 81.89 user, 0.01 sys
|
||||||
context-switch: 462+1, page-faults: 0+5135
|
context-switch: 462+1, page-faults: 0+5135
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
================= day23 =================
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
ex1.bash: res=75893264
|
||||||
|
time: 0:00.01 real, 0.01 user, 0.00 sys
|
||||||
|
context-switch: 0+1, page-faults: 0+166
|
||||||
|
|
||||||
|
ex2.bash: res=38162588308
|
||||||
|
time: 6:52.50 real, 412.30 user, 0.14 sys
|
||||||
|
context-switch: 2219+1, page-faults: 0+30233
|
||||||
|
@@ -1,8 +0,0 @@
|
|||||||
ex1.bash: res=2211
|
|
||||||
time: 0:01.72 real, 1.71 user, 0.00 sys
|
|
||||||
context-switch: 9+1, page-faults: 0+1090
|
|
||||||
|
|
||||||
ex2.bash: res=vv,nlxsmb,rnbhjk,bvnkk,ttxvphb,qmkz,trmzkcfg,jpvz
|
|
||||||
time: 0:01.75 real, 1.74 user, 0.00 sys
|
|
||||||
context-switch: 36+4, page-faults: 0+1388
|
|
||||||
|
|
@@ -75,8 +75,6 @@ After the crab is done, what order will the cups be in? Starting after the cup l
|
|||||||
Using your labeling, simulate 100 moves. What are the labels on the cups after cup 1?
|
Using your labeling, simulate 100 moves. What are the labels on the cups after cup 1?
|
||||||
|
|
||||||
Your puzzle answer was 75893264.
|
Your puzzle answer was 75893264.
|
||||||
|
|
||||||
The first half of this puzzle is complete! It provides one gold star: *
|
|
||||||
--- Part Two ---
|
--- Part Two ---
|
||||||
|
|
||||||
Due to what you can only assume is a mistranslation (you're not exactly fluent in Crab), you are quite surprised when the crab starts arranging many cups in a circle on your raft - one million (1000000) in total.
|
Due to what you can only assume is a mistranslation (you're not exactly fluent in Crab), you are quite surprised when the crab starts arranging many cups in a circle on your raft - one million (1000000) in total.
|
||||||
@@ -90,3 +88,7 @@ The crab is going to hide your stars - one each - under the two cups that will e
|
|||||||
In the above example (389125467), this would be 934001 and then 159792; multiplying these together produces 149245887792.
|
In the above example (389125467), this would be 934001 and then 159792; multiplying these together produces 149245887792.
|
||||||
|
|
||||||
Determine which two cups will end up immediately clockwise of cup 1. What do you get if you multiply their labels together?
|
Determine which two cups will end up immediately clockwise of cup 1. What do you get if you multiply their labels together?
|
||||||
|
|
||||||
|
Your puzzle answer was 38162588308.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
|
50
2020/day23/ex2.bash
Executable file
50
2020/day23/ex2.bash
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ex2.bash: Advent2020 game, day 23/game 2.
|
||||||
|
|
||||||
|
CMD=${0##*/}
|
||||||
|
shopt -s extglob
|
||||||
|
set -o noglob
|
||||||
|
|
||||||
|
declare -A next # next[i] is cup right to i (ring)
|
||||||
|
declare -i end runs cup _cup
|
||||||
|
|
||||||
|
read -r str
|
||||||
|
tmp="${str//?()/x}"
|
||||||
|
tmp=${tmp#x}
|
||||||
|
IFS=x read -ra array <<< "$tmp"
|
||||||
|
|
||||||
|
cup=${array[0]}
|
||||||
|
end=1000000
|
||||||
|
runs=10000000
|
||||||
|
|
||||||
|
_cup=$cup
|
||||||
|
# initialize the next array with input cups
|
||||||
|
for _next in "${array[@]:1}"; do
|
||||||
|
next[$_cup]=$_next
|
||||||
|
_cup=$_next
|
||||||
|
done
|
||||||
|
# initialize the next array (up to end)
|
||||||
|
for ((_next = 10; _next <= end; ++_next)); do
|
||||||
|
next[$_cup]=$_next
|
||||||
|
_cup=$_next
|
||||||
|
done
|
||||||
|
next[$_cup]=$cup # close the ring
|
||||||
|
|
||||||
|
_cup=$cup
|
||||||
|
declare -i _1st _2nd _3rd dest
|
||||||
|
for ((i = 1; i <= runs; ++i)); do
|
||||||
|
_1st="${next[$cup]}"
|
||||||
|
_2nd="${next[$_1st]}"
|
||||||
|
_3rd="${next[$_2nd]}"
|
||||||
|
dest=$cup
|
||||||
|
while
|
||||||
|
(( --dest > 0 )) || dest=$end
|
||||||
|
(( dest == _1st || dest == _2nd || dest == _3rd ))
|
||||||
|
do :; done
|
||||||
|
(( tmp=next[$dest], next[$dest]=_1st, next[$cup]=next[$_3rd], next[$_3rd]=tmp ))
|
||||||
|
(( cup=next[$cup] ))
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "%s: res=%d\n" "$CMD" $(( next[1] * next[${next[1]}] ))
|
||||||
|
exit 0
|
Reference in New Issue
Block a user