Day 4 2019
authorBrett Parker <iDunno@sommitrealweird.co.uk>
Sun, 6 Dec 2020 19:13:59 +0000 (19:13 +0000)
committerBrett Parker <iDunno@sommitrealweird.co.uk>
Sun, 6 Dec 2020 19:13:59 +0000 (19:13 +0000)
day4/get_valid_passwords.sh [new file with mode: 0644]
day4/invalid.txt [new file with mode: 0644]

diff --git a/day4/get_valid_passwords.sh b/day4/get_valid_passwords.sh
new file mode 100644 (file)
index 0000000..9dd1562
--- /dev/null
@@ -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"
diff --git a/day4/invalid.txt b/day4/invalid.txt
new file mode 100644 (file)
index 0000000..158d340
--- /dev/null
@@ -0,0 +1,758 @@
+255555: valid invalid
+255556: valid invalid
+255557: valid invalid
+255558: valid invalid
+255559: valid invalid
+255566: valid invalid
+255567: valid invalid
+255568: valid invalid
+255569: valid invalid
+255577: valid invalid
+255578: valid invalid
+255579: valid invalid
+255588: valid invalid
+255589: valid invalid
+255599: valid invalid
+255666: valid invalid
+255667: valid invalid
+255668: valid invalid
+255669: valid invalid
+255678: valid invalid
+255679: valid invalid
+255689: valid invalid
+255777: valid invalid
+255778: valid invalid
+255779: valid invalid
+255789: valid invalid
+255888: valid invalid
+255889: valid invalid
+255999: valid invalid
+256667: valid invalid
+256668: valid invalid
+256669: valid invalid
+256678: valid invalid
+256679: valid invalid
+256689: valid invalid
+256777: valid invalid
+256778: valid invalid
+256779: valid invalid
+256888: valid invalid
+256889: valid invalid
+256999: valid invalid
+257778: valid invalid
+257779: valid invalid
+257789: valid invalid
+257888: valid invalid
+257889: valid invalid
+257999: valid invalid
+258889: valid invalid
+258999: valid invalid
+266666: valid invalid
+266667: valid invalid
+266668: valid invalid
+266669: valid invalid
+266677: valid invalid
+266678: valid invalid
+266679: valid invalid
+266688: valid invalid
+266689: valid invalid
+266699: valid invalid
+266777: valid invalid
+266778: valid invalid
+266779: valid invalid
+266789: valid invalid
+266888: valid invalid
+266889: valid invalid
+266999: valid invalid
+267778: valid invalid
+267779: valid invalid
+267789: valid invalid
+267888: valid invalid
+267889: valid invalid
+267999: valid invalid
+268889: valid invalid
+268999: valid invalid
+277777: valid invalid
+277778: valid invalid
+277779: valid invalid
+277788: valid invalid
+277789: valid invalid
+277799: valid invalid
+277888: valid invalid
+277889: valid invalid
+277999: valid invalid
+278889: valid invalid
+278999: valid invalid
+288888: valid invalid
+288889: valid invalid
+288899: valid invalid
+288999: valid invalid
+299999: valid invalid
+333334: valid invalid
+333335: valid invalid
+333336: valid invalid
+333337: valid invalid
+333338: valid invalid
+333339: valid invalid
+333345: valid invalid
+333346: valid invalid
+333347: valid invalid
+333348: valid invalid
+333349: valid invalid
+333356: valid invalid
+333357: valid invalid
+333358: valid invalid
+333359: valid invalid
+333367: valid invalid
+333368: valid invalid
+333369: valid invalid
+333378: valid invalid
+333379: valid invalid
+333389: valid invalid
+333444: valid invalid
+333445: valid invalid
+333446: valid invalid
+333447: valid invalid
+333448: valid invalid
+333449: valid invalid
+333455: valid invalid
+333456: valid invalid
+333457: valid invalid
+333458: valid invalid
+333459: valid invalid
+333466: valid invalid
+333467: valid invalid
+333468: valid invalid
+333469: valid invalid
+333477: valid invalid
+333478: valid invalid
+333479: valid invalid
+333488: valid invalid
+333489: valid invalid
+333499: valid invalid
+333555: valid invalid
+333556: valid invalid
+333557: valid invalid
+333558: valid invalid
+333559: valid invalid
+333566: valid invalid
+333567: valid invalid
+333568: valid invalid
+333569: valid invalid
+333577: valid invalid
+333578: valid invalid
+333579: valid invalid
+333588: valid invalid
+333589: valid invalid
+333599: valid invalid
+333666: valid invalid
+333667: valid invalid
+333668: valid invalid
+333669: valid invalid
+333677: valid invalid
+333678: valid invalid
+333679: valid invalid
+333688: valid invalid
+333689: valid invalid
+333699: valid invalid
+333777: valid invalid
+333778: valid invalid
+333779: valid invalid
+333788: valid invalid
+333789: valid invalid
+333799: valid invalid
+333888: valid invalid
+333889: valid invalid
+333899: valid invalid
+333999: valid invalid
+334445: valid invalid
+334446: valid invalid
+334447: valid invalid
+334448: valid invalid
+334449: valid invalid
+334456: valid invalid
+334457: valid invalid
+334458: valid invalid
+334459: valid invalid
+334467: valid invalid
+334468: valid invalid
+334469: valid invalid
+334478: valid invalid
+334479: valid invalid
+334489: valid invalid
+334555: valid invalid
+334556: valid invalid
+334557: valid invalid
+334558: valid invalid
+334559: valid invalid
+334567: valid invalid
+334568: valid invalid
+334569: valid invalid
+334578: valid invalid
+334579: valid invalid
+334589: valid invalid
+334666: valid invalid
+334667: valid invalid
+334668: valid invalid
+334669: valid invalid
+334678: valid invalid
+334679: valid invalid
+334689: valid invalid
+334777: valid invalid
+334778: valid invalid
+334779: valid invalid
+334789: valid invalid
+334888: valid invalid
+334889: valid invalid
+334999: valid invalid
+335556: valid invalid
+335557: valid invalid
+335558: valid invalid
+335559: valid invalid
+335567: valid invalid
+335568: valid invalid
+335569: valid invalid
+335578: valid invalid
+335579: valid invalid
+335589: valid invalid
+335666: valid invalid
+335667: valid invalid
+335668: valid invalid
+335669: valid invalid
+335678: valid invalid
+335679: valid invalid
+335689: valid invalid
+335777: valid invalid
+335778: valid invalid
+335779: valid invalid
+335789: valid invalid
+335888: valid invalid
+335889: valid invalid
+335999: valid invalid
+336667: valid invalid
+336668: valid invalid
+336669: valid invalid
+336678: valid invalid
+336679: valid invalid
+336689: valid invalid
+336777: valid invalid
+336778: valid invalid
+336779: valid invalid
+336789: valid invalid
+336888: valid invalid
+336889: valid invalid
+336999: valid invalid
+337778: valid invalid
+337779: valid invalid
+337789: valid invalid
+337888: valid invalid
+337889: valid invalid
+337999: valid invalid
+338889: valid invalid
+338999: valid invalid
+344444: valid invalid
+344445: valid invalid
+344446: valid invalid
+344447: valid invalid
+344448: valid invalid
+344449: valid invalid
+344455: valid invalid
+344456: valid invalid
+344457: valid invalid
+344458: valid invalid
+344459: valid invalid
+344466: valid invalid
+344467: valid invalid
+344468: valid invalid
+344469: valid invalid
+344477: valid invalid
+344478: valid invalid
+344479: valid invalid
+344488: valid invalid
+344489: valid invalid
+344499: valid invalid
+344555: valid invalid
+344556: valid invalid
+344557: valid invalid
+344558: valid invalid
+344559: valid invalid
+344567: valid invalid
+344568: valid invalid
+344569: valid invalid
+344578: valid invalid
+344579: valid invalid
+344589: valid invalid
+344666: valid invalid
+344667: valid invalid
+344668: valid invalid
+344669: valid invalid
+344678: valid invalid
+344679: valid invalid
+344689: valid invalid
+344777: valid invalid
+344778: valid invalid
+344779: valid invalid
+344789: valid invalid
+344888: valid invalid
+344889: valid invalid
+344999: valid invalid
+345556: valid invalid
+345557: valid invalid
+345558: valid invalid
+345559: valid invalid
+345567: valid invalid
+345568: valid invalid
+345569: valid invalid
+345578: valid invalid
+345579: valid invalid
+345589: valid invalid
+345666: valid invalid
+345667: valid invalid
+345668: valid invalid
+345669: valid invalid
+345777: valid invalid
+345778: valid invalid
+345779: valid invalid
+345888: valid invalid
+345889: valid invalid
+345999: valid invalid
+346667: valid invalid
+346668: valid invalid
+346669: valid invalid
+346678: valid invalid
+346679: valid invalid
+346689: valid invalid
+346777: valid invalid
+346778: valid invalid
+346779: valid invalid
+346888: valid invalid
+346889: valid invalid
+346999: valid invalid
+347778: valid invalid
+347779: valid invalid
+347789: valid invalid
+347888: valid invalid
+347889: valid invalid
+347999: valid invalid
+348889: valid invalid
+348999: valid invalid
+355555: valid invalid
+355556: valid invalid
+355557: valid invalid
+355558: valid invalid
+355559: valid invalid
+355566: valid invalid
+355567: valid invalid
+355568: valid invalid
+355569: valid invalid
+355577: valid invalid
+355578: valid invalid
+355579: valid invalid
+355588: valid invalid
+355589: valid invalid
+355599: valid invalid
+355666: valid invalid
+355667: valid invalid
+355668: valid invalid
+355669: valid invalid
+355678: valid invalid
+355679: valid invalid
+355689: valid invalid
+355777: valid invalid
+355778: valid invalid
+355779: valid invalid
+355789: valid invalid
+355888: valid invalid
+355889: valid invalid
+355999: valid invalid
+356667: valid invalid
+356668: valid invalid
+356669: valid invalid
+356678: valid invalid
+356679: valid invalid
+356689: valid invalid
+356777: valid invalid
+356778: valid invalid
+356779: valid invalid
+356888: valid invalid
+356889: valid invalid
+356999: valid invalid
+357778: valid invalid
+357779: valid invalid
+357789: valid invalid
+357888: valid invalid
+357889: valid invalid
+357999: valid invalid
+358889: valid invalid
+358999: valid invalid
+366666: valid invalid
+366667: valid invalid
+366668: valid invalid
+366669: valid invalid
+366677: valid invalid
+366678: valid invalid
+366679: valid invalid
+366688: valid invalid
+366689: valid invalid
+366699: valid invalid
+366777: valid invalid
+366778: valid invalid
+366779: valid invalid
+366789: valid invalid
+366888: valid invalid
+366889: valid invalid
+366999: valid invalid
+367778: valid invalid
+367779: valid invalid
+367789: valid invalid
+367888: valid invalid
+367889: valid invalid
+367999: valid invalid
+368889: valid invalid
+368999: valid invalid
+377777: valid invalid
+377778: valid invalid
+377779: valid invalid
+377788: valid invalid
+377789: valid invalid
+377799: valid invalid
+377888: valid invalid
+377889: valid invalid
+377999: valid invalid
+378889: valid invalid
+378999: valid invalid
+388888: valid invalid
+388889: valid invalid
+388899: valid invalid
+388999: valid invalid
+399999: valid invalid
+444445: valid invalid
+444446: valid invalid
+444447: valid invalid
+444448: valid invalid
+444449: valid invalid
+444456: valid invalid
+444457: valid invalid
+444458: valid invalid
+444459: valid invalid
+444467: valid invalid
+444468: valid invalid
+444469: valid invalid
+444478: valid invalid
+444479: valid invalid
+444489: valid invalid
+444555: valid invalid
+444556: valid invalid
+444557: valid invalid
+444558: valid invalid
+444559: valid invalid
+444566: valid invalid
+444567: valid invalid
+444568: valid invalid
+444569: valid invalid
+444577: valid invalid
+444578: valid invalid
+444579: valid invalid
+444588: valid invalid
+444589: valid invalid
+444599: valid invalid
+444666: valid invalid
+444667: valid invalid
+444668: valid invalid
+444669: valid invalid
+444677: valid invalid
+444678: valid invalid
+444679: valid invalid
+444688: valid invalid
+444689: valid invalid
+444699: valid invalid
+444777: valid invalid
+444778: valid invalid
+444779: valid invalid
+444788: valid invalid
+444789: valid invalid
+444799: valid invalid
+444888: valid invalid
+444889: valid invalid
+444899: valid invalid
+444999: valid invalid
+445556: valid invalid
+445557: valid invalid
+445558: valid invalid
+445559: valid invalid
+445567: valid invalid
+445568: valid invalid
+445569: valid invalid
+445578: valid invalid
+445579: valid invalid
+445589: valid invalid
+445666: valid invalid
+445667: valid invalid
+445668: valid invalid
+445669: valid invalid
+445678: valid invalid
+445679: valid invalid
+445689: valid invalid
+445777: valid invalid
+445778: valid invalid
+445779: valid invalid
+445789: valid invalid
+445888: valid invalid
+445889: valid invalid
+445999: valid invalid
+446667: valid invalid
+446668: valid invalid
+446669: valid invalid
+446678: valid invalid
+446679: valid invalid
+446689: valid invalid
+446777: valid invalid
+446778: valid invalid
+446779: valid invalid
+446789: valid invalid
+446888: valid invalid
+446889: valid invalid
+446999: valid invalid
+447778: valid invalid
+447779: valid invalid
+447789: valid invalid
+447888: valid invalid
+447889: valid invalid
+447999: valid invalid
+448889: valid invalid
+448999: valid invalid
+455555: valid invalid
+455556: valid invalid
+455557: valid invalid
+455558: valid invalid
+455559: valid invalid
+455566: valid invalid
+455567: valid invalid
+455568: valid invalid
+455569: valid invalid
+455577: valid invalid
+455578: valid invalid
+455579: valid invalid
+455588: valid invalid
+455589: valid invalid
+455599: valid invalid
+455666: valid invalid
+455667: valid invalid
+455668: valid invalid
+455669: valid invalid
+455678: valid invalid
+455679: valid invalid
+455689: valid invalid
+455777: valid invalid
+455778: valid invalid
+455779: valid invalid
+455789: valid invalid
+455888: valid invalid
+455889: valid invalid
+455999: valid invalid
+456667: valid invalid
+456668: valid invalid
+456669: valid invalid
+456678: valid invalid
+456679: valid invalid
+456689: valid invalid
+456777: valid invalid
+456778: valid invalid
+456779: valid invalid
+456888: valid invalid
+456889: valid invalid
+456999: valid invalid
+457778: valid invalid
+457779: valid invalid
+457789: valid invalid
+457888: valid invalid
+457889: valid invalid
+457999: valid invalid
+458889: valid invalid
+458999: valid invalid
+466666: valid invalid
+466667: valid invalid
+466668: valid invalid
+466669: valid invalid
+466677: valid invalid
+466678: valid invalid
+466679: valid invalid
+466688: valid invalid
+466689: valid invalid
+466699: valid invalid
+466777: valid invalid
+466778: valid invalid
+466779: valid invalid
+466789: valid invalid
+466888: valid invalid
+466889: valid invalid
+466999: valid invalid
+467778: valid invalid
+467779: valid invalid
+467789: valid invalid
+467888: valid invalid
+467889: valid invalid
+467999: valid invalid
+468889: valid invalid
+468999: valid invalid
+477777: valid invalid
+477778: valid invalid
+477779: valid invalid
+477788: valid invalid
+477789: valid invalid
+477799: valid invalid
+477888: valid invalid
+477889: valid invalid
+477999: valid invalid
+478889: valid invalid
+478999: valid invalid
+488888: valid invalid
+488889: valid invalid
+488899: valid invalid
+488999: valid invalid
+499999: valid invalid
+555556: valid invalid
+555557: valid invalid
+555558: valid invalid
+555559: valid invalid
+555567: valid invalid
+555568: valid invalid
+555569: valid invalid
+555578: valid invalid
+555579: valid invalid
+555589: valid invalid
+555666: valid invalid
+555667: valid invalid
+555668: valid invalid
+555669: valid invalid
+555677: valid invalid
+555678: valid invalid
+555679: valid invalid
+555688: valid invalid
+555689: valid invalid
+555699: valid invalid
+555777: valid invalid
+555778: valid invalid
+555779: valid invalid
+555788: valid invalid
+555789: valid invalid
+555799: valid invalid
+555888: valid invalid
+555889: valid invalid
+555899: valid invalid
+555999: valid invalid
+556667: valid invalid
+556668: valid invalid
+556669: valid invalid
+556678: valid invalid
+556679: valid invalid
+556689: valid invalid
+556777: valid invalid
+556778: valid invalid
+556779: valid invalid
+556789: valid invalid
+556888: valid invalid
+556889: valid invalid
+556999: valid invalid
+557778: valid invalid
+557779: valid invalid
+557789: valid invalid
+557888: valid invalid
+557889: valid invalid
+557999: valid invalid
+558889: valid invalid
+558999: valid invalid
+566666: valid invalid
+566667: valid invalid
+566668: valid invalid
+566669: valid invalid
+566677: valid invalid
+566678: valid invalid
+566679: valid invalid
+566688: valid invalid
+566689: valid invalid
+566699: valid invalid
+566777: valid invalid
+566778: valid invalid
+566779: valid invalid
+566789: valid invalid
+566888: valid invalid
+566889: valid invalid
+566999: valid invalid
+567778: valid invalid
+567779: valid invalid
+567789: valid invalid
+567888: valid invalid
+567889: valid invalid
+567999: valid invalid
+568889: valid invalid
+568999: valid invalid
+577777: valid invalid
+577778: valid invalid
+577779: valid invalid
+577788: valid invalid
+577789: valid invalid
+577799: valid invalid
+577888: valid invalid
+577889: valid invalid
+577999: valid invalid
+578889: valid invalid
+578999: valid invalid
+588888: valid invalid
+588889: valid invalid
+588899: valid invalid
+588999: valid invalid
+599999: valid invalid
+666667: valid invalid
+666668: valid invalid
+666669: valid invalid
+666678: valid invalid
+666679: valid invalid
+666689: valid invalid
+666777: valid invalid
+666778: valid invalid
+666779: valid invalid
+666788: valid invalid
+666789: valid invalid
+666799: valid invalid
+666888: valid invalid
+666889: valid invalid
+666899: valid invalid
+666999: valid invalid
+667778: valid invalid
+667779: valid invalid
+667789: valid invalid
+667888: valid invalid
+667889: valid invalid
+667999: valid invalid
+668889: valid invalid
+668999: valid invalid
+677777: valid invalid
+677778: valid invalid
+677779: valid invalid
+677788: valid invalid
+677789: valid invalid
+677799: valid invalid
+677888: valid invalid
+677889: valid invalid
+677999: valid invalid
+678889: valid invalid
+678999: valid invalid
+688888: valid invalid
+688889: valid invalid
+688899: valid invalid
+688999: valid invalid
+699999: valid invalid
+777778: valid invalid
+777779: valid invalid
+777789: valid invalid
+777888: valid invalid
+777889: valid invalid
+777899: valid invalid
+777999: valid invalid
+778889: valid invalid
+778999: valid invalid
+788888: valid invalid
+788889: valid invalid
+788899: valid invalid
+788999: valid invalid