X-Git-Url: https://git.sommitrealweird.co.uk/advent-of-code-2019.git/blobdiff_plain/8d19ec771c083ce8bbfff9b075d42f15ad704831..24a0a2360eb2e4b4332ce45ba5888e72f970428a:/day04/get_valid_passwords.sh diff --git a/day04/get_valid_passwords.sh b/day04/get_valid_passwords.sh new file mode 100644 index 0000000..9dd1562 --- /dev/null +++ b/day04/get_valid_passwords.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +start_password=254032 +end_password=789860 + +check_valid_1() { + cur_password=$1 + last_val=${cur_password:0:1} + val=$last_val + got_dupe=0 + if [ $cur_password -ge $start_password ] && [ $cur_password -le $end_password ]; then + for (( a=1; a<${#cur_password}; a++ )); do + val=${cur_password:$a:1} + if [ $val -ge $last_val ]; then + if [ $val -eq $last_val ]; then + got_dupe=1 + fi + else + return 1 + fi + last_val=$val + done + if [ $got_dupe -eq 1 ]; then + return 0 + fi + else + return 1 + fi + + return 1 +} + +check_valid_2() { + cur_password=$1 + last_val=${cur_password:0:1} + val=$last_val + dupe_count=1 + got_dupe=0 + if [ $cur_password -ge $start_password ] && [ $cur_password -le $end_password ]; then + for (( a=1; a<${#cur_password}; a++ )); do + val=${cur_password:$a:1} + if [ $val -ge $last_val ]; then + if [ $val -eq $last_val ]; then + dupe_count=$((dupe_count+1)) + else + # only pairs + if [ $dupe_count -eq 2 ]; then + got_dupe=1 + fi + dupe_count=1 + fi + else + return 1 + fi + last_val=$val + done + if [ $dupe_count -eq 2 ]; then + got_dupe=1 + fi + if [ $got_dupe -eq 1 ]; then + return 0 + else + return 1 + fi + else + return 1 + fi + + return 1 +} + +get_next() { + password=$1 + temp_password=$((password+1)) + last_val=${temp_password:0:1} + new_password="$last_val" + for (( a=1; a<${#temp_password}; a++ )); do + val=${temp_password:$a:1} + if [ $val -lt $last_val ]; then + val=$last_val + fi + new_password+=$val + last_val=$val + done + + echo "$new_password" +} + +cur_password=$start_password +valid_passwords=0 +valid_passwords_2=0 +while [ $cur_password -le $end_password ]; do + echo -n "$cur_password: " + if ( check_valid_1 $cur_password ); then + echo -n valid + valid_passwords=$((valid_passwords+1)) + if ( check_valid_2 $cur_password ); then + echo " valid" + valid_passwords_2=$((valid_passwords_2+1)) + else + echo " invalid" + fi + else + echo invalid + fi + cur_password=$(get_next $cur_password) +done + +echo "There are $valid_passwords valid passwords" +echo "And $valid_passwords_2 really valid passwords"