Optimise Day 10
[advent-of-code-2019.git] / day10 / zap.sh
old mode 100644 (file)
new mode 100755 (executable)
index eae98d2..74838a9
@@ -8,79 +8,7 @@ our_asteroid=26,29
 declare -A asteroids
 declare -A asteroid_angles
 
-exec 3<input.txt
-ln=0
-width=0
-while read -u 3 line; do
-    width=${#line}
-    for (( a=0; a<${#line}; a++ )); do
-        char=${line:$a:1}
-        if [ "${char}" == "#" ]; then
-            asteroids[$a,$ln]=0
-        fi
-    done
-    ln=$((ln+1))
-done
-
-get_angle() {
-    local a1=$1
-    local a2=$2
-
-    local vector=$(get_asteroids_vector $a1 $a2)
-    local move_x=${vector%,*}
-    local move_y=${vector#*,}
-
-    val="$(calc -p 'round(((90 + ((180/pi()) * atan2('$move_y','$move_x'))) % 360) * 100000000) / 100000000')"
-    echo "$val"
-}
-
-get_closest_asteroid() {
-    local asteroids=$1
-
-    local IFS="|"
-    local min_dist=-1
-    local nearest_asteroid=
-    local x=0
-    local y=0
-
-    for asteroid in $asteroids; do
-        vector=$(get_asteroids_vector $our_asteroid $asteroid)
-        x=${vector%,*}
-        y=${vector#*,}
-        # use absolute numbers for length calculation!
-        x=${x#-}
-        y=${y#-}
-
-        distance=$((x+y))
-        if [ $distance -lt $min_dist -o $min_dist -eq -1 ]; then
-            min_dist=$distance
-            nearest_asteroid=$asteroid
-        fi
-    done
-
-    echo $nearest_asteroid
-}
-
-remove_asteroid_from_string() {
-    local asteroids=$1
-    local asteroid=$2
-    local new_asteroids=
-    local a
-
-    local IFS="|"
-    local seperator=""
-
-    for a in $asteroids; do
-        if [ "$a" != "$asteroid" ]; then
-            new_asteroids+="${seperator}$a"
-        fi
-        if [ "x$new_asteroids" != "x" ]; then
-            seperator="|"
-        fi
-    done
-
-    echo "$new_asteroids"
-}
+read_file input.txt
 
 # calculate angles to each asteroid from us
 for asteroid in ${!asteroids[@]}; do
@@ -102,13 +30,7 @@ done
 
 zapped_count=0
 
-get_angles_list() {
-    local OFS=$'\n'
-
-    printf "%s\n" "${!asteroid_angles[@]}" | sort -g
-}
-
-sorted_angles=( "$(get_angles_list)" )
+sorted_angles=( "$(get_angles_list asteroid_angles)" )
 
 for (( round=0; round<3; round++ )); do
     for angle in $sorted_angles; do