day 27/pert 1: bash optimization (25 sec -> 1.7 sec)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user