From: Brett Parker Date: Sun, 6 Dec 2020 19:13:59 +0000 (+0000) Subject: Day 4 2019 X-Git-Url: https://git.sommitrealweird.co.uk/advent-of-code-2019.git/commitdiff_plain/b9693f24bdae1a82db1d7ae39942eef9ba1a8891?ds=sidebyside Day 4 2019 --- diff --git a/day4/get_valid_passwords.sh b/day4/get_valid_passwords.sh new file mode 100644 index 0000000..9dd1562 --- /dev/null +++ b/day4/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" diff --git a/day4/invalid.txt b/day4/invalid.txt new file mode 100644 index 0000000..158d340 --- /dev/null +++ b/day4/invalid.txt @@ -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