Day 14
This commit is contained in:
25
14/01.sh
Executable file
25
14/01.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
rules=()
|
||||
n_step=10
|
||||
read polymer
|
||||
read
|
||||
|
||||
while read line; do
|
||||
rules+=( ${line% ->*}'|'${line#*-> } )
|
||||
done
|
||||
|
||||
for ((i=0; i<$n_step; i++)); do
|
||||
polymer_size=0
|
||||
while [ $polymer_size -lt ${#polymer} ]; do
|
||||
polymer_size=${#polymer}
|
||||
for rule in ${rules[@]}; do
|
||||
polymer=${polymer//${rule:0:2}/${rule:0:1}'|'${rule:3:1}'|'${rule:1:1}}
|
||||
done
|
||||
done
|
||||
polymer=${polymer//'|'/}
|
||||
done
|
||||
|
||||
occurences=( $(printf "%s\n" $(sed 's/\(.\)/\1 /g' <<< $polymer) | sort | uniq -c \
|
||||
| sort -nr | sed 's/.$//') )
|
||||
echo $((occurences[0]-occurences[-1]))
|
||||
44
14/02.sh
Executable file
44
14/02.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
rules=()
|
||||
n_step=40
|
||||
declare -A polymer
|
||||
declare -A occurences
|
||||
read line
|
||||
occurences[${line:0:1}]=$((${occurences[${line:0:1}]}+1))
|
||||
for ((i=1; i<${#line}; i++)); do
|
||||
pair=${line:$((i-1)):2}
|
||||
polymer[$pair]=$((${polymer[$pair]}+1))
|
||||
occurences[${line:$i:1}]=$((${occurences[${line:$i:1}]}+1))
|
||||
done
|
||||
read
|
||||
|
||||
while read line; do
|
||||
rules+=( ${line% ->*}'|'${line#*-> } )
|
||||
done
|
||||
|
||||
for ((i=0; i<$n_step; i++)); do
|
||||
declare -A new_polymer
|
||||
for rule in ${rules[@]}; do
|
||||
rule_pair=${rule:0:2}
|
||||
rule_pair_1=${rule:0:1}${rule:3:1}
|
||||
rule_pair_2=${rule:3:1}${rule:1:1}
|
||||
if ! [ -v polymer[$rule_pair] ]; then
|
||||
polymer[$rule_pair]=0
|
||||
fi
|
||||
new_polymer[$rule_pair]=$((${new_polymer[$rule_pair]}-${polymer[$rule_pair]}))
|
||||
new_polymer[$rule_pair_1]=$((${new_polymer[$rule_pair_1]}+${polymer[$rule_pair]}))
|
||||
new_polymer[$rule_pair_2]=$((${new_polymer[$rule_pair_2]}+${polymer[$rule_pair]}))
|
||||
occurences[${rule:3:1}]=$((${occurences[${rule:3:1}]}+${polymer[$rule_pair]}))
|
||||
done
|
||||
for new_pair in ${!new_polymer[@]}; do
|
||||
if ! [ -v polymer[$new_pair] ]; then
|
||||
polymer[$new_pair]=0
|
||||
fi
|
||||
polymer[$new_pair]=$((${polymer[$new_pair]}+${new_polymer[$new_pair]}))
|
||||
done
|
||||
unset new_polymer
|
||||
done
|
||||
|
||||
occurences_array=( $(printf "%s\n" "${occurences[@]}" | sort -nr) )
|
||||
echo $((occurences_array[0]-occurences_array[-1]))
|
||||
Reference in New Issue
Block a user