Passed test case 1 & 3
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
FILE=test-input-1
|
||||
FUNCNEST=99999
|
||||
FILE=test-input-2
|
||||
read -r -a MAP_ARRAY <<< "$( < "$FILE" paste -s -d "" | sed -E 's/(.)/\1\ /g' )"
|
||||
MAP_LEN=${#MAP_ARRAY[@]}
|
||||
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||
@ -45,22 +46,23 @@ check_and_unset () {
|
||||
|
||||
IDX=$1
|
||||
local KV_I=${IDX%% *} # Remove trailing whitespace
|
||||
if [[ -v KV_CACHE[$KV_I] ]] # Check if tile has been "taken"
|
||||
then
|
||||
(( AREA++ ))
|
||||
VALUE=${KV_CACHE[$IDX]}
|
||||
printf "max: %s peri: %s area: %s key: %s val: %s\n" "$MAX_PERI" "$PERI_NUM" "$AREA" "$1" "$VALUE" >&2
|
||||
(( AREA++ ))
|
||||
VALUE=${KV_CACHE[$KV_I]}
|
||||
unset "KV_CACHE[$KV_I]" # "Take" it
|
||||
printf "max: %s peri: %s area: %s key: %s val: %s\n" "$MAX_PERI" "$PERI_NUM" "$AREA" "$1" "$VALUE" >&2
|
||||
|
||||
(( PERI_NUM+=MAX_PERI ))
|
||||
unset IFS; read -r -a VAL_ARRAY <<< "$VALUE"
|
||||
for VAL in "${VAL_ARRAY[@]}"
|
||||
do
|
||||
(( PERI_NUM-- ))
|
||||
check_and_unset "$VAL"
|
||||
done
|
||||
(( PERI_NUM+=MAX_PERI ))
|
||||
unset IFS; read -r -a VAL_ARRAY <<< "$VALUE"
|
||||
for VAL in "${VAL_ARRAY[@]}"
|
||||
do
|
||||
(( PERI_NUM-- ))
|
||||
VAL_IDX=${VAL%% *}
|
||||
if [[ -v KV_CACHE[$VAL_IDX] ]] # Check if tile has been "taken"
|
||||
then
|
||||
check_and_unset "$VAL_IDX"
|
||||
fi
|
||||
done
|
||||
|
||||
unset "KV_CACHE[$KV_I]" # "Take" it
|
||||
fi
|
||||
}
|
||||
|
||||
while read -r CHAR
|
||||
@ -86,6 +88,7 @@ do
|
||||
|
||||
IFS=':'; while read -r VAR1 VAR2
|
||||
do
|
||||
printf "VAR1: %s VAR2: %s\n" "$VAR1" "$VAR2" >&2
|
||||
KV_CACHE[$VAR1]=$VAR2
|
||||
done <<< "$(
|
||||
|
||||
@ -94,7 +97,9 @@ do
|
||||
do
|
||||
NUM_ADJ=0
|
||||
printf "%s:" "${CHAR_ARRAY[i]}"
|
||||
for (( j=i+1; j<i+MAP_WIDTH; j++ )) # There can only be MAP_WIDTH number of elements within valid range
|
||||
MIN=$(( $(( i-MAP_WIDTH )) < 0 ? 0 : $(( i-MAP_WIDTH )) ))
|
||||
MAX=$(( $(( i+MAP_WIDTH )) < MAP_LEN ? $(( i+MAP_WIDTH )) : $(( MAP_LEN )) ))
|
||||
for (( j=MIN; j<MAX; j++ )) # There can only be MAP_WIDTH number of elements within valid range
|
||||
do
|
||||
if check_adjacent "${CHAR_ARRAY[i]}" "${CHAR_ARRAY[j]}"
|
||||
then
|
||||
@ -108,13 +113,15 @@ do
|
||||
)"
|
||||
|
||||
# Iterate through
|
||||
for CHAR in "${CHAR_ARRAY[@]}"
|
||||
for CH in "${CHAR_ARRAY[@]}"
|
||||
do
|
||||
MAX_PERI=3
|
||||
PERI_NUM=1 # Special head case
|
||||
CHAR=${CH%% *} # Remove trailing whitespace
|
||||
if ! [[ -v KV_CACHE[$CHAR] ]]; then continue; fi
|
||||
MAX_PERI=4
|
||||
PERI_NUM=0
|
||||
AREA=0
|
||||
check_and_unset "$CHAR"
|
||||
printf "max: %s peri: %s area: %s\n" "$MAX_PERI" "$PERI_NUM" "$AREA" >&2
|
||||
printf "char: %s max: %s peri: %s area: %s\n" "$CHAR" "$MAX_PERI" "$PERI_NUM" "$AREA" >&2
|
||||
printf "%s\n" "$(( PERI_NUM * AREA ))"
|
||||
done
|
||||
# Get all plants
|
||||
|
Reference in New Issue
Block a user