Day 15
[advent-of-code-2019.git] / day10 / zap.sh
1 #!/bin/bash
2
3 basedir=$(dirname $(readlink -f $BASH_SOURCE))
4 . $basedir/common.sh
5
6 our_asteroid=26,29
7
8 declare -A asteroids
9 declare -A asteroid_angles
10
11 read_file input.txt
12
13 # calculate angles to each asteroid from us
14 for asteroid in ${!asteroids[@]}; do
15     if [ $asteroid == $our_asteroid ]; then
16         continue
17     fi
18
19     # otherwise, get the angle from us to there
20     angle=$(get_angle $our_asteroid $asteroid)
21
22     # see if we've already got this angle as a key, if so append to it,
23     # otherwise set it
24     if [ ${asteroid_angles[$angle]+a} ]; then
25         asteroid_angles[$angle]+="|$asteroid"
26     else
27         asteroid_angles[$angle]=$asteroid
28     fi
29 done
30
31 zapped_count=0
32
33 sorted_angles=( "$(get_angles_list asteroid_angles)" )
34
35 for (( round=0; round<3; round++ )); do
36     for angle in $sorted_angles; do
37         if [ ${asteroid_angles[$angle]+a} ]; then
38             echo "$angle: ${asteroid_angles[$angle]}"
39             closest=$(get_closest_asteroid "${asteroid_angles[$angle]}")
40             #echo "      - closest $closest"
41             # blow up the closest!
42             newlist=$(remove_asteroid_from_string ${asteroid_angles[$angle]} $closest)
43             if [ "x$newlist" == "x" ]; then
44                 unset asteroid_angles[$angle]
45             else
46                 asteroid_angles[$angle]=$newlist
47             fi
48             zapped_count=$((zapped_count+1))
49
50             echo "$zapped_count: $closest"
51
52             if [ $zapped_count -eq 200 ]; then
53                 echo "The 200th asteroid to be zapped was $closest"
54                 break 2
55             fi
56         fi
57     done
58 done
59
60 echo "And we're done."