day 27/pert 1: bash optimization (25 sec -> 1.7 sec)

This commit is contained in:
2021-07-30 17:31:06 +02:00
parent 1db46ed0b0
commit 16deb0f76b
2 changed files with 13 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
ex1.bash: res=2211 ex1.bash: res=2211
time: 0:25.09 real, 25.08 user, 0.01 sys time: 0:01.73 real, 1.72 user, 0.00 sys
context-switch: 144+1, page-faults: 0+1133 context-switch: 54+1, page-faults: 0+1089

View File

@@ -7,7 +7,7 @@ shopt -s extglob
set -o noglob set -o noglob
declare -A I_COUNT=() declare -A I_COUNT=()
declare -A CANBE=() I A_RULES=() FOUND=() ALL_I=() declare -A CANBE=() I A_RULES=() FOUND=() ALL_I=() ALL_A=()
declare -a R declare -a R
declare -i count=0 declare -i count=0
@@ -46,29 +46,20 @@ delw() {
_res="${_res##*( )}" _res="${_res##*( )}"
_res="${_res%%*( )}" _res="${_res%%*( )}"
} }
# add a word to string $1, if not already present
addw() {
local -n _s="$1"
# shellcheck disable=SC2206
local _reg="\b$2\b"
[[ "$_s" =~ $_reg ]] || _s+=" $2"
_s="${_s##*( )}"
}
REGEX="(.*) \(contains(.*)\)" REGEX="(.*) \(contains(.*)\)"
while read -r line; do while read -r line; do
[[ "$line" =~ $REGEX ]] [[ "$line" =~ $REGEX ]]
ingr="${BASH_REMATCH[1]}" ingr="${BASH_REMATCH[1]}"
all="${BASH_REMATCH[2]}" allg="${BASH_REMATCH[2]}"
all=${all//,} allg=${allg//,}
R[$count]="$ingr" R[$count]="$ingr"
for ka in $all; do for ka in $allg; do
A_RULES[$ka]+=" $count" A_RULES[$ka]+=" $count"
ALL_A[$ka]=""
for ki in $ingr; do for ki in $ingr; do
addw CANBE[$ka] "$ki" ALL_I[$ki]=""
ALL_I[$ki]="$ki"
done done
done done
for ki in $ingr; do for ki in $ingr; do
@@ -76,9 +67,12 @@ while read -r line; do
done done
((count++)) ((count++))
done done
all_i="${!ALL_I[@]}"
for k in "${!ALL_A[@]}"; do
CANBE[$k]="$all_i"
done
declare -i solved=0 count solved=0
declare allerg allerg1 ingred
while ((solved==0)); do while ((solved==0)); do
solved=1 solved=1
for allerg in "${!CANBE[@]}"; do for allerg in "${!CANBE[@]}"; do