From 49f975fd20b53572c5af434fb42a2633e1c30aff Mon Sep 17 00:00:00 2001 From: Jeremy Soumokil Date: Sat, 2 Dec 2023 23:06:16 +0100 Subject: [PATCH] Advent of code 2023 Day 1 --- build.gradle.kts | 27 + gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 248 ++++++ gradlew.bat | 92 ++ src/main/kotlin/Main.kt | 5 + src/main/kotlin/day1/Day1.kt | 55 ++ src/main/resources/day1/input.txt | 1000 ++++++++++++++++++++++ src/test/kotlin/day1/Day1Test.kt | 25 + src/test/resources/day1/calibration1.txt | 4 + src/test/resources/day1/calibration2.txt | 7 + 10 files changed, 1470 insertions(+) create mode 100644 build.gradle.kts create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 src/main/kotlin/Main.kt create mode 100644 src/main/kotlin/day1/Day1.kt create mode 100644 src/main/resources/day1/input.txt create mode 100644 src/test/kotlin/day1/Day1Test.kt create mode 100644 src/test/resources/day1/calibration1.txt create mode 100644 src/test/resources/day1/calibration2.txt diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..b6fd41c --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + kotlin("jvm") version "1.9.21" + application +} + +group = "nl.apirapi.adventofcode" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation(kotlin("test")) +} + +tasks.test { + useJUnitPlatform() +} + +kotlin { + jvmToolchain(21) +} + +application { + mainClass.set("MainKt") +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..1af9e09 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..fcb6fca --- /dev/null +++ b/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt new file mode 100644 index 0000000..b21b193 --- /dev/null +++ b/src/main/kotlin/Main.kt @@ -0,0 +1,5 @@ +import day1.Day1 + +fun main() { + println("Day 1: ${Day1.answerOne()} && ${Day1.answerTwo()}") +} \ No newline at end of file diff --git a/src/main/kotlin/day1/Day1.kt b/src/main/kotlin/day1/Day1.kt new file mode 100644 index 0000000..13b93dd --- /dev/null +++ b/src/main/kotlin/day1/Day1.kt @@ -0,0 +1,55 @@ +package day1 + +import java.io.File + +object Day1 { + + fun calculateOne(input : List) = input + .filter(String::isNotBlank) + .fold(0, addMagicNumber()) + + fun calculateTwo(input : List) = input + .filter(String::isNotBlank) + .map(::replaceElvenNumbers) + .fold(0, addMagicNumber()) + + private fun addMagicNumber() = { accumulator: Int, line: String -> + val firstDigit = NUMBER_REGEX.findAll(line).first().value + val secondDigit = NUMBER_REGEX.findAll(line).last().value + val total = (firstDigit + secondDigit).toInt() + accumulator + total + } + + private fun replaceElvenNumbers(string: String): String = + string.mapIndexed { index, _ -> + readElvenNumberAtStart(string.substring(index)) + }.joinToString(separator = "") + + private fun readElvenNumberAtStart(string: String) = when { + string.isBlank() -> "" + string[0].isDigit() -> string[0].toString() + string.startsWith("one") -> "1" + string.startsWith("two") -> "2" + string.startsWith("three") -> "3" + string.startsWith("four") -> "4" + string.startsWith("five") -> "5" + string.startsWith("six") -> "6" + string.startsWith("seven") -> "7" + string.startsWith("eight") -> "8" + string.startsWith("nine") -> "9" + else -> "" + } + + fun answerOne() = + File("src/main/resources/day1/input.txt") + .readLines() + .let(::calculateOne) + + fun answerTwo() = + File("src/main/resources/day1/input.txt") + .readLines() + .let(::calculateTwo) + + private val NUMBER_REGEX = Regex("\\d") + +} \ No newline at end of file diff --git a/src/main/resources/day1/input.txt b/src/main/resources/day1/input.txt new file mode 100644 index 0000000..d92a1d1 --- /dev/null +++ b/src/main/resources/day1/input.txt @@ -0,0 +1,1000 @@ +7jlncfksix7rjgrpglmn9 +vcgkgxninerqjltdbhqzzpd4nine23 +fx3 +8nrbjbpjpnineseven +7qlfhcsnxn7fpfhjcgr6eightsevenjlpchjtzpztwo +28rzgskgk94ninefive +zdpxcql1eight5 +8two5six37 +9khfphjl71trppsrtwo +lxthkgbbf2jdcssfiveqksvbqvm8four4 +seven9tjcgztctxzzttct +onetljcfh9fivesvgcqnklz9four +4mptgcnzmvvsevenzmjjzhndzdvxmz59bm +1hrqthmr +7eightqmfmsn +jkgdnpzjkzzceighttklsfiveqxgsvxdq4 +hdk28lqhhttjz6one2 +2five524 +363mtk +qlmtpch9eightlzddxs7one +one6five1hxphtl687rllvb +31gdnsxtpnn +sqvbcqlnjhk135 +eightgcdszrsghmmfsevendr2844 +eightthreecdpccfj7 +ljfgt9kvnine175kpnrbttktktf +zjfeightfive9nine44seven4 +sixshbrtr4nmjr +3two54 +26sixbhmmgdcl +drxfnbsdzf3gnxbtmmggvkxrsevenbbzdfxnrdnkfivefive +two8591mrvchg4 +3jjhfzlnklpvvfcnsjbdmgvlfkeight2snxrkzzsx +ztwo79onesix56seven +threeeightrhlxptmtwofivenfourthree3 +fbhcqcttgxlrstcqeight4dbfjp +prsevenfournineglccpgssix7 +hzprzdvbsxzllgvttworstxtwodstxbtjnzm6 +99sevenfive +fdvnvc2 +vmpnpqg32llcxpbzcxqvseven +dc9fgvrvsqqhlj2nq97three +four77twothreeonenine9 +3kfkfour +xfg58six8cjtvmrgvsq5l +gmfxvhftld2hbmmprpppzchcqmxninethreethree3mmplrvbtkf +3fourqndl6 +rj6ninenzkbktfqsc2 +9konehdmllc +mneightzzqvdm14 +8oneseventlrsrzflccrbv +9vvvgqdkrckjlzcfsbdgrqrhhtbb7fnhcxzmk9nine7 +825ngddfhpfrsl6 +mc6tjxxll9seven +fxbgccqmmh2 +five7three4vmxjlqcnc3 +9mninehkmlpcxqnfkqfbg6six3 +3onefourrv1ninesixfour8 +fourtwosdtz817fivevjvlzr +seventhvxk1fournqqqfjrvdvbpkvd +v733rklzvnslkonefive6zbvq +178ncllbfkkh4eightwoq +glbxfjhskzbseven6mjzlxccfive3 +fptwoneonefivefive2ztxpndjdq2 +lxzhsgqkx5mjxtrmbkdtfeightsrchzmq6 +1nngc2338ninedjkvszdmnjrl +five6six7 +bcpxbcbssbtmdfninefivesevendtm9eighthxtvxb +mzdttqmfpssevensixeight3twoone4 +rrtzlhkgrgtmrvlcthreeonefour5 +75threeeight4 +3ttcjsdrj6one91t +3twofgdpfqxxp +seven3gjslxpltpbonemt +82jcvqkrgzkx8three8rmszgdj4 +ctwone41fnjksbxb1mxxzznsvg35fivesix +four7bzfeight3one +heightwo24cxs +fdtwone8sevenfour37 +1sevenmdmlrgmqnnth1mrone +7nqxzdrblffcdm22six +5ttpzlv +zhqjlfive3 +jvzpgppblkb6 +nine77lmfour +kqnvgtkgphxcxsixfoursix2 +pjjdlnineltbcknfqvhj8tworbkqhdcp +nine65fiveeightjmeight +j1sptkfhsczt +4czpqqglpc41bzkss1 +qd28j +three1fourfourm +four5seven4twodvmzzdtn +zj4 +dzzrdkjjdxspfrjsonefive8brrzlrjvzfour +zrjzfxxddn66 +fourrnsphsdzmv9xznt6seven +56eightcbhkmjfourone +fivejzlbvqzb3sixsix +fiveghfclksgqffdpb7 +cmmplbcnml36threetrxnhrrdonelmspsbhfd9twonenn +ccxrlmzrreightone9three9 +zg6four1eight +1ngv +bfhptfjzlgkxtftwo7gthree +txrpbzgjzg272three9jlstdb8 +3seven6twofxvxdlcqj33 +six3eightjrdxgkrkm5five +one67one3 +gnfhhkffqfctxmvznmftwo34gjsrpxlv43 +five6zjdjpptnthreefour7sevenqfjlpshg +onesevenninesvnnrvxxeightrdbvsbdnzgtmlmf1 +2six8seven +3eightjrpqdrtwoxjvmgzpbffjnfdps9 +tptlcldftc3 +lcpqlbjfgmhkjpkhc4eight9ninesixsixseven +eightxjfqqtxnsbsnrdxdjv8six79 +tvkthbbrr8five +seven35threerrkdqjgps58two +5dln1rqqgdjlcmmrvm2pmhvhcxhfsbxkfqngp5 +sixnpvbq36514one +mxdvxfgdfzmkjcrtl2 +onejv7lxmbrbzjsthreesevenninesm +threehbhnm8nine +bvhgqz6 +9two89sixfxjz37 +8xninepvggctk85fivefkj +8sixdjndzzzrkk +five61oneightr +cmthreesixeight7jlvdvmdjfzbv3 +9two1onefour1clxjonetwo +9sixtzphqltmeightlbrhjone1ktrvjldff6 +five68eightfourqpfcxftzlxrhgdcvpd +nxvdtfkltwozzl72fourhzxtqjf1 +91fiveeightthree65twoneh +3eight6ninexqqgxzxfgmsixseveneightfqk +dlpsfmsthree2zgfpdnftvfqgsgr +4kggfpxg8jpxzdqsixeight +fivefourtwo923 +z3gx +six4prlsp84tgvc +1foursrznv62k +vmzr829nkxtlf +3dzsx2two7sixfivebkktgfbzdt +fourpzpmvxc2zvvrhrbhf +frpddtknqjxpqqzhdnfour9sixdqjbqxh +89sevengkbeight6mn +two7jcpnxhbtmhtwo39twoone +cvdqlfkrs821fourrrgnmm +6onefhnnbrzgx7fourxcj +seveneighthfr6rz +9vvqlpnzbxfct8 +two8three2fpseveneight +2three75three2 +znvbrbrqlfive8 +lnfjqfkk8 +14tvvmdlntrv6three +5twor2chtvj +threetwomgrcfivefive7 +five4qbvxthrfxdkjkk +sixthreethree5scmqrfq4vf3 +rjsljnqcrttbpfhfxbfourone4 +threeseventwoseven87dnmqjbbxfoneighttfz +seven4four9eightxqlsixthreeone +1ninesix43bmsttggvzn14 +seven1sixbmnxmz +grqhlkrcdzbhstgtvpclvtphph4twoseven +fgfprscb27pzfvvblxhkvonefive +five77fivethreefive3vddgfngng +13nllfsevenfour6four +threenineeightfour173three +fourqvsbxxzmfh2hhcjxsrkz +4jdtxgltkkkvlnhrztwofxppsdlcqztwo3gdlctj +5four334rvfour9 +551threenine +eightonenineeight8 +qmjqmjvvfkdbnjgkrqh8two +sevenjzqnv32lldmr5one +6five8fivefour +ljvhqqvqxqsix1367 +two6kvjtwonenzf +2p5chjdcseven9 +lnrrrkkdsvfhkl9vfqfgnvonegtwo6 +twoseven4lhhpcvthree4tkrone +8hllnnmpm3rjxndcmpt9jfjqng +qbnlgqeight2csvjshglqzmgkqqxqzq95 +two2nine +rrpffkq15foureighttwo2 +five3ninetpx5fmrzsqvfzq +mrqhcpgvblhvskv5pdsdzzfzfsix +two7fvmhvseventwo7 +3sixone94three8fdplbm2 +loneightseveng79 +fourone7 +zvgjt1 +xpgbfghsmj2six8eight8mzlnvmv7 +grjtwo48 +jhcgjlgxt1seven1 +5dhtppxrxcsbjsm37 +cbhmtp56xbqzppjjfivezhtxxvkrzsix +hctwonelcninefourfive2 +four4rcxpkzbeight95xxdb3 +fivejlplgzflone963two +trgninefourtwo6five +66fournine535foursxbvsfvf +1bskfour +dvlmbrxssevenhldvjxdzcfdvbfourthree2seven6 +6two92635 +8dzszone +hfcm6 +dxrfhpdbrqmqq8four +bfclp5sixeight81three +eightffsqgkmt53gfjxqsskpsfpbcmqvdfour9 +6sevensevenfour1v +9threetfspsfxhnzblgsxz +seven5tz7pfhlpt9qxrqz +pmbeightwooneonefiveseventft4 +xhjhmzljnx7 +twotgdvhkpmg1rthzfc6 +onesevennpcsbfive9sixseven +7sevenmbhlrjxrpddcnl +8fsvntpptctwobjmkgzvc4two +onetwosix4 +fourthree4fourlqbvscdponeights +1glkfrdb69sixsrvvb +ninetwoeight7cvjtdmgpsfivefnlvgsqtstwo9 +9threejtfoureightseven +38nine8 +87two7onetwo +2vkkcgxdqpnthreehklfmfmjdpkz9fivetwofour +one5oneone5oneone +three5hlxkxrmxsbgrzqsgrone +twokbbnbjp7 +mvxpdllxrvfthreeone51eight +rrqvfiveseven5two1qgqppn +92s +fourxcj8frbvlxzgpvoneone +648211 +4eightgzxnsixlvksllptszztmkjb3four +fivegqg6 +foureightmmnknlseven1 +83kx +sixeight12kskzhrjjpslmprtwo +1xzncrsfrlfivetwoxptv46nine +fourmxfq6twotwo4 +oneht8 +3prjdlrcznine +btkpqmxxmggkzftmkxbzqvdccchxdmjlqztzfgfour7 +tvbstznine9z +two1fivemmnlcnmqlrnbp95gjjh +dq671ninezk +6cmxtt769 +629rkhc198 +2fourfiver +three5nqkjdsixfrjnf4gcbjrznine +xjhqqf7oneeightrgkdprrssmxp63 +5fourfivekpvmnlpfrt1 +xnqkjcldhttbpjr8 +fdntjsb957sevenhbmntp +jlmmmmdv482three +63lnbhmdhpsp32 +99cmntldfdflqkfkv +kqnlqqkpr9eighteightthree15threenine +6threefttghrvjsjg6 +spmrjzfm6eightwokn +bdcjfqvsdronertfztlblqbgfgtkjv8qhbjfhthree6nine +9fvltpsxtcbtjxbtlfdvm7 +6jxvxrdmpjthreefstfgrsixfourzbfznjjlqtjx +8onesixkmhgvsnfhqnxlkn +rrjxvqjbnvvsgddtvmb3six5 +eight8sevenbmtgbvdzcpqnzqone1hbhlgcfour +2nineseven41 +8xptgrh1njz +geightwo93sevenseventwobpdhhjsrbfour57 +m4kd9four +6nine5seven9v +glzc1fiveeightvbmvk +ninesixone3sevenzmvrqbtwo4four +9onefoureightfivefour +fjqpgnjdd1twoninecgsqsmtonenine1f +94sixthreedflcddxnvvrthree +vvfnbgpkgsnjtszxhrsixfive5rrdtfpkdhdvsg +39four1pjfkt +45sixkhlfc1fivetcvnlstnine +sevenone2seven +twofiveonenine6eight5 +grxzndnqpd56 +xnpdfnfgt5fivetwotwo +9four6two +sgmlzbpnkrmfivesbdzbnhkcxndpone49 +88six2hrmkl2 +mthree3eightfiveone +smrzqc7twothree2three +nmtwo8cr +378one47four +27four +5two7seven68six +9onecnonethree9 +nineqhvbjqbrkpjhjhdbpk3twoseven +rq4qldc +86bqzct2nine +eightsnfgrjzhsnxbfivethree6ljxx +oneeight1threevzdcplnqrbk92 +8k9dkqmqhndthreethree +9sp6j5two +4rsone1seven2seventwo +ninehhdcbxfgs7fljclncb6vpzhqphxz +drplsnsch3zfr +86nine +2threeeightsixvzpcqjs +dmkhbxsggeight7seven9 +fourshjlmrbbcnznstgj2sx +gcbzbldk6nine +fourskpc1vzfxsrjckcmccljtt9 +1oneone53oneeight6 +six3fourqxqbs9nkbsixthreesix +pmlrkrhqdjgg121nineseven9 +dmgnq6 +kpmponeone5 +mxmhbqnrcjj1threeeightxzfive +onebzxnrqqfltfourglvkqfive4nine5 +threezvmfl7vsdrthsdsjsix9mbrqqmz1 +boneight8onelrtjkj +tqxbbceight9rqbthreek +3h32nklscdkfhtztwontprj +2threesix +qkzmpvkvsixxfzlrfrgv682 +3seven6mvkeight2fourvhvvqone +three389sixeight +bx664nine +nine82rcdvqtj91dbffscng4 +2sixsixtbqhvcndjtcvrrbtdzsxrlrvdxjtd7fzdtlrhlxvbpvhknmm +6zbpblsznhlzljtmstwothree28ngdcfkk +eight8nbfmdqlcvonenine +8two4sx7rffstvxlq1seven4 +gmzbd8nine5nine1one +sevenfivezdfbn7six +5892 +ss9 +8xcvzgzkjcdg +1seven7three +8four1fourtwonezs +hnjzk8 +xfour5mrj +vnkspgtkxspdtwofxlvtlkqpqcffxbqth13cll +mmjkshtmtwofour1 +sixthree6 +seven9mzmbkkrzsix5five +9cbrsqjlhntpzfivegmgn1six +bdbnlrdpsninenine3twotwocpvjd3 +twonine193 +twothree1twor8cmtxtd +bvgtninevfrjs6 +eightsix8 +sixfbzsxfjtfv8 +5onethreeone +dgzcksnqz8foursix +9onetsrtwotwothreerbv +4dnzc8 +fivenine4sjzsdgvdqsix3511 +7twofivefivefourqdgpmfblgv +oneonelgjsk9 +zcfhrrpseven8tlffkfnineeightttwoknlfdjpj +nine5nine +8sixtwotwooneoneeightcdklzjgvnqrsvvkbtfj +7one9vxjdkbhqmfbpt +6twoeighttwo +sixthreesix162 +5jhxxchf69twosxjckh5 +sevenxspmvxpmc788one +9fseven4 +vxzqgxbmtgxnm588seventwoqtmfsb9 +four8nine4ftn5 +eighteightrhjzcmxql28four +twogqjdbmmxqgtxdppchr2xxhcptq2mrvgsdccs +six24 +nqdptone3drgtwoone8 +threesixnine8hlkrj +four7pvvljkscc6hvsppgxrsixknrnrvfjqqfive +7tdnbzqqxftqtxjqxgmbdhbvsqdone22drc +59rqhzrfrps +six1scbkqjd4 +89blbn +lqhoneightthree96tppmhtpmlt7 +threeqpnsevengfx3 +sixk27lfjrvhvtsixtwo +four5slf8onefournine5 +ninehgczrdslkstltfive96bqtz5 +scfkzsr4fournine325 +5eighthzn9rjdzxllvg +1six1threedrfpflhqfour64 +fivekdtgcdsjxone8nine +7sevensevenhronepdgbxvfd5 +619nine6threetwo6 +fivehchdssjrlshfqjlptsxghzrcsfcglm4 +6two73smnqbbmsix +84fivermpjpjgkn +oneeighteightfhjtxbjc94threefrnnnncdz +lrckglbdn94eightqbfxp +mtztmbhthzone26sixgjvnbzsjfmthreevqdqrld +pnrtpgzcnznfive3eightwogkq +threevfpkrjddtpszxddckhftt6txkszsbxnn +ninecxdtmdnineseveneight5fivesd +xjvv7one +5eightfiveseven +twodpfdzvqmpzmvs7tpjnpmv5 +75fivethreesixsfqpzdonefive4 +4onefive6bsvtplblfbmnjjlb +eight75one73pjgdqq +ntcnmnkvjzpvxpmb7twokqfour1 +zd1sevenmgdrgrzvvh +65four +3kzfztjxjbseven67bnfcntfknlxlv +eightfive8xnnkeightfive +6three95eighttwonineonevkrtwonebgs +92seven2cndf +onezxphkcrsix7klrhnhdcxrpz +mgl8ldbxzdlgtwo6cdvxbp +foursix7lzcddxnjdrfqtthree7six +hxheightwoncdcrkczbninefour3lfdtgnqgcnbfxbqlnt +2pmcvctfml1one92 +nineone9eight +6crppdpp4cmngqseven3mmv +473sevensqpvvhfdrfiventgvmvrhtqx +gpnzc1rmfxqgj8nine271 +84sixtwo +frcrtsqhfour3threefivesix +bhcvf6 +seven2seveneightzqmdqhb9 +28hjjrgqklqgbm +98three +jqzjntlc541 +oneq22 +7fc92ljfmqt19 +sixzpzkgfiveonezjvrzfdcf43lbqxqseven +1two4kfxglzcdjc3dpvb +fivembfkfdq6 +nplrclbrbf5ks6five4hzzbsnine +3mkmbgxhn +seven9d +vnfj8qng +eightrgtjpdjjktwo1lphnlrtjfxtvghhbncj2two +eight66frbpds5g +3one8four9two5 +9ninefouronefcckhcdfb1mnmdsltdrsix +eightsvsix122241 +3fgpmgxcdqfourkhnrptlktrchfqbxcbbcxvjgznfjkj +eighthbhsgrqkgcxtwofour2nzj +93xnjrphktk6vshpvnftblggghskg34 +seven2sixsdvmcfgq64 +twothreefive3hrmkbmrskcvknineninebnjksp +82fourninetwothree8 +2two158threeninesix +hgltdx48onetwofvnsmmsdzjthree +k38 +ninenine4sixctnznsb3tkpx +pvfzqtgpntnfhfp47rhllqrlx22 +815qxtrghrsg +5vhfourvdblpninemdzbbgmvsfone +nine8nine6four +threebcbsmxbks2two5twon +kzpsc74qxflxpsix6jgmzgqxvsngc +7dbrsmpksixqttqsphqpd7twoeight +kffivefourdknzqsevenvkssgvhxf1 +sixeight5sljd5fourxkkxv6 +rnsjsmfcbp4twofour +zdfour5pktmsmxf3 +threen42 +stgtphmjk7onexfour2foursrpj8 +pjbgtsevenseven7zzhgxlmz +sixeightfivefourseven9bpjbcmvkrfive +hfhxfqlbqtwo4cdfksbbtlcsix +778lkffbzmpdbxjbpfoursdbp +tvpjnvtxeight1onefive3nvncq +38seven47 +five8threexqtglzmpmvbzfour +nmtsjjfvfzbhpltbbsrjphrnxhr1two3sixvp +4gbvkbfqrfgrbr85sixone +6mxqltfsxqxnpdrjkxhrp +lftdxbhhzvvhpone51six +3grhbqf5one +six9four94tthree +sevenh1bdcgdtmjqhnkzxlkxsevenonecbx +jvtwonecfksxckgq6 +zvmjbthreecbpfdvd6 +6bsvrsevenbcbcgrrhpxtvbhhfp1 +sevenfivemtmpcgml9mljnhcrdbfvksvlbpmvhs +8nine9 +mszqdg7jsrcckxn +eightseven9zzsixninexhscseventhree +eight57 +4zjpjz26dxnzfb +rmcnbnlpd3nine4gngphqfmc24 +1vvgfxdfourprlmsjmvvtxnn8seven +nineonethree6zznkfrcgzvfour +gcnjsdlhptwofourtwoonemggshpdh3eight +4eightfivenxftjch +eightthreeseven94 +twokvtjgcq992 +69psqdmgbtljjzjmpsbs1fiveoneggjbbk +3k +eightsix3seven4twosevenq7 +jlthbzsc2 +22nine8jhmktwo5 +8pzmtnlfptpjckftzrzqsrxkkcc3 +four33jfxmhcdktzhqvmkxhklxjllx +nine3lqcsbmmh4f +three514twonellp +4qhn5 +sixbmkxqdgtkbcghvpzonecfmgkpfrxv68six +6threeeightjhfsmp8mpvhrjcxzsevenone +sevens9two37fjdfrnk +jhzpvfldrbmmmglvrkz2ninelbgpdlpdcteight +qj9 +rxfhkkvheightfouronejh8238 +zfsixvbqngj1vhbvxpfk6 +vjbqvcm3 +51six38ngvq42three +7zjtcczjz79seven +five8fivexxmrn +sixseventhree3sixcsk +zninefour8tworxkfb48 +63nine3 +11eight +bxlgdzqthree2ninegqn6kvktfts8 +tvmzzlpnineztxdbkxgthree1four1 +gxcnhxone9 +8eightfive5jkqx +qcfgbpgdveighteightone7seven +86eight2five +tftbbfpsvhtwo8eight8seventwo2 +skfp8 +8hdlhh4ninenxllmthreefivebhslxkvtcp +sixbmljnmhseven4sevenmsfbsbqlzrrseven3 +v1828 +6seven53hhtj +five51lkfsrm2 +bvnrdvjnxjbfv9prx +tqbnxeight6hztrsbvronethreethreeqvh +pcbjr3cjhrqxbcvpzdmfive6oneightgt +qdeightl6four +ncprx96ninegn3 +sevenb4eightwonr +qbslkmkqlf8ztzeightpcn +fiveeightcpn7hvxmtpcsbqfvpnmvgncfbpxzhfive +3rxxcqhlp4five +threefouronevdbdmktp17 +sixdtmnlhth9onefive +fouronelxgxpvtmseven2ninesix +eightrfxrkcfive21ftlcgdcrmbsnrr +nine1fourfourxkppvqrxfdhsdphjcgnhnfnzlld +562 +4sixhj4eightzkbfpdrtzcsp2 +ddfdbdqzfshfxnseven6onetwo2 +five915b3 +sghrbfzmmrrbnone9four5rkmqgh +threedmmsdvgs6twotwochp +seven1fivesixnine9four +6dvmgsjcfour3q +cschsrvz3nkk +4fnqmnd4rnxbjvcbxpchfour +3eight9 +tboneninerzhsgqqcxd2gxhm2mhdpkjeight +vpsbgmzbjk6nineeight +sixsjbzldfive6 +qjprfk1eight7vbdshhnfive59 +dbxdgt6 +pdgghktdjhsxnblgpzmtc24onecmctldqtsc +bgfzght2szvttsdndfiveqgns3 +6ninebdnbxzmeightfivevff8pdllfour +four2nineeightvfeighttwo +fiveone3sevenhfqnfbjg3five +eight19two +fqkeightwosvszgpjvbl2xtmgmc6128six +6five6one24fivemcgpx +pmvrz6threemlhoneightdjf +7cxrgxx53gksgdsv9 +six3two +nfqffqrvkvhqfzthgxp3fivesix7gb +nlqdkgllxdvgj8xdhdfnnnfive +fournine1nineseven +four35djzxvsvvdfxbnhsixfouroneseven +9fourhntsmprtddm +fourfsix81sixvxmz8eight +3pqngffjxqpntqtl8zz4 +five325ninemfqxnseven1 +1one2gqx3 +hqsfive67rr3q4 +onefblnbfvzlzthreenine1 +96zsvdl2 +1fourjjhf1tn18 +sixfdpljnbpzxlvhncjs9threefckbgtcm +seven6ffmvnnmxl8fxskzvpfs +5tgbqdkfive +52czvkbqgztwo17ninesix +bmshtrzdcmkfour5 +nrfn25one +9two4plklcqzjftj7 +onedks4five6hdllqssixbssl +2xftcfnd2twotwo +rzxzkcdtnmsbhnncltpj62 +6snszfour +398seven58 +vstfive8869 +1fivesevenvgjrlqqlthjz1 +tpg7eightseven +gqvpptsix356 +7nineone9fournineeight +tr1threenine +tvz8xconeightfz +two11five1nine +jntkxfvt2threegseven3 +b69ztbtgmqfntdnine4two4 +threedsgrrfcpzpfivebrpjhzfhs96gxmfhkhfive3 +eighteightthree5crdbzgqvtxx6two +nine4onepxjtmbhrpklmlhcfspxrjdnd +7fivetpttvnmgzd +8lmddfzjeightxxvvcvp +loneight1three4dmzxqncjbninerbsrjxxlsb +657fourdjkhrlxjdp3ninepvlqhz +three4threekddjrfsdk3 +8xbjcnsjq89 +six8ninesixfourpcsfhnsxgrz +8twosixmvhmsps3 +six9sixeight +4seven175 +4twomspqqn6929 +71seven9eight +4znc92eight +ninetwo2blcllflxonezljhhsfivelngxk +nmbrjnsqhkxzxhmxsix1oneeight5fourseven +42kvzlcdjzxmgnpqmsmkxq3seven43eightwovms +rj5hxkldqseven +f7 +5sskjblmnbzjhctvmttwotwott +9ftmpxlbphsfxzsbktjttkxclknsbkftwo7 +3ndmzlfbsfqhxrlj2fourfive +8378vkthreemggtf2 +2hprlpkbsfzbnbpsmflxjh15one +dxvtfrhhxthree68four529eight +xgjvjddtnine1zxeightwosnx +sixblpgkznvjseven2oneskvxgngzlpzvjcxkcjgblh +bhhkfive4jgngngjfhbp8kpnjtgrmblone +8vmfivetwo9eightthreefxbvf +8738 +8sixlgnpbpqpltbqqjjxpkcdfourhxzqpmm +seventwo5three +h46ssnqlfrl8 +ninetwokrkfqhh2jbznndtchssjtbpqdhtnrhsix +254 +1nhbdtwosixonezxtnvhjnine +qxx97d1dcnqzqhsixnzbrvrksnc +fivegnxzgvmzone8fourfivethree5 +fivexhx7six87 +zngqzxpmd63bgfzjpftsjgzghdppqfqbnblt7sixone +ninemzlgnkglj1 +fiveninesixeightthree4six1 +fivesix5ninethreeqkxczhp3 +eight19two16pqdstm +mplj637sjtgzltwo +7lvs7xzmjmxjhlgdqhtqllhtzlkmbfm5 +six6kqvbjfoureight94 +one9qdjpfszz6vxbrdnntfz8btft6 +65onendmdgtr +seven368 +eight31ngsdmnm +2threetgpvcseven +nine297zqgvglthreel +7eighttxvrbjsnbcseven +rdpcnrscggv1cxv63 +2cdfltscsnzg8eightwosg +jrszpsjthree8n8bdjtlcbxtsixktkcc +dns3 +2threebpkctf +5pgzpfqntc +9pkone +oneseven2fm545two3 +9threegtctbldnnclqpdmjnps7seven +1dknxbdcvpssix413 +rzrvm77one2 +sixnttfive97jdcjvcmg +spdmkhnthreebqsmtqgnm5threedxjcvsrxbq +btzkx8ckninevffmmfm3four +hgx8fivenine2oneightc +thdfczcpnxctgfiveseven65threeeight4 +five6nine +qgtds7 +hqnzcfleight8two2 +8q8zbkjrqxzhlzgmqmzrbfqceight +nbbrrmksdm2ninefive3x +fivec2sixsixmngbsjzk71 +821one4 +5eightvpxfpnzvsfhcdtn7kdkjdpsqcl +6seventwotwogxvgvxzjbvcqcl38 +onetwo23863 +24qtzzxfhq +one7six814 +czdhrn2twoninetwo8 +one54 +foursslpnrqcv7sixtwoned +9xsptsgfplpbrtpc1sevenjrggpr52 +zoneightg6sixgfdtwo7 +34twodhthree2tqsevenvqqrxq +monektltrghq97seven +ggeightwothree5cpfvrnp48 +nine7zpcbx33bbmd +six831 +63vjlqdc5one +nine9cgxgrq8 +5sixxpeightsix +onecgpxlhhgtthreetwo3 +336 +xcdjlblthreefourqrcxbxlhsdlseven5five +9znnlhrrmb1999drzkckthreehghffcgfr +two8one +ztwogggh48 +six4pcmqkpqb +14two47vmhbsgrgdone3 +84eight2 +5cnoneskjzppm +nine8threecstfxqp7 +threecsbhnn22three9three4xphcvgnz +vjq8ninenhr7 +qcffmrfthreexgjjrdbdthree3 +eightsix5 +threeeightfcsmrvdqzp6 +sevendcpm3five4eightbthreefive +kq9one46dqnr +jbmtdqbzn5sixlnthree +ninebdz4fourbvq +phbzxtvtthreerm89 +dqlgfoursix5k3mcrkmxcp +3fivesixqrrvtsjdxtdqp14pznxpnrgkrvg +5cnkfz4lxbvbpmcfninetgn9 +mtjq8threeninefourhnzgctvtrfive +47l6784 +twopdmponenzpjfbqgt2nine1qccqx +77hspkdhqfztwomkdshrkn3nt +five7pjrslqhkzcjzhn6 +twoqvgphqs8zzmgclhsseven5eightfive +threehmkjmrqqblnrfvbpzhrsix4zvlmcqeight +6lcfjthree8ninefive54 +sevenfive558four +htbdrfh8bthreeninedrjdbjbzlknine +hkhknzrbfsevenhcvbdfs2sixcbjqzltfour4 +qrvfpxdseven2 +139msnzkfgpzdz5nine1 +rbdone3ftvrdkssvmnzjgpcbdjzdkcgbcs69 +nine58 +2ckxdtcqc5seveneight4two +qtgndtm4mrqvtgbgjf7nzhvtvjqqrdmfiverzzgn +3rchqn37tlvgtftdjqxgbvhlpclpneightfive +11sfhcntjzpnkvpzjfhhpmbtjptngpnbqthreethree6 +fivenine4cthreeeightzqlckkvs +5threekjqxkddgvzph92 +five372seven8eightthreefour +fivegjjxh15zdnbxzlhleight5fourqrpxj +84sevenvckrdpxlgzkcbpr76fjzbpn +mvvxgjfqj9five1psvtflxhkpfourdxzxhvxmthreekp +seven7pnltbp1twotwo9lfdgzpj +sevenfkrtsgrnhgfive54three8csmsg +sevendczlbgjbg6srsbtseven +onejscsevensix2oneightd +mchrcflvfj3znrzhrvbhm +brfninexxntnine83kfzbn +97tfgthreefxpv +kspdrcnvvntts8bb4sixvghhjcpt +8onedxcbnlvpntljztxs +c91drttnrsevenxj9 +9onethree9fivexrszjfxcrjdbskdmn +cjtnzpfourxspsjvmrbqclkzkdftc8pdfbfxjnvflgfkqctvcsc +5seventkqrdpmrrchxfournczqzlqqm7p +nhpbdxgzzjltdftqc5fivelgvjshonervrxmgscvhnnfl +2gcqpdcgjv +bqhzdzxb54 +nsmxljkjcmnmxvcrj7threegcrjs7 +2cninev1eightdjcztnrk +cmjskeightmjfrlfhm22fivetzmfive +8ndsix +nzrgmlcrg5r4eighthfxm4 +threeptlf3x4 +3bhd +cbmzrtglngmghmonezdqnhxxd1ctpghbfzqfivefour8 +eightpdzftbdlcrtwonine29bcgxflmf +69crzsmjfivecxcqtffoursix4two +92zghnv +fivejmdxvnf1 +1ntvtnrjmeight1onegckvcnsjnthree +ncxgppbsnhsfnhlonelfbxqzsgfjj8 +eightfhjbrlzxcgtls42sixtjk7two +czrtnfzjnjhxdxtbgtmntkcpninejtzrprsstm4eight2 +483nine +onecnxpmhjjcvdtzc71seven +5l15 +19jmkmrxbdbtz4shpdgmmhzrxtbftpgrj3plvlqdvnr +two4two +kqgtjstcpnhf8 +sn6 +grtgjxgqhv2fourbjmfnb +bfmtkqfcp5hks74fivesevenbgvgzr +peightwoninef2ninejmlhndvjd92 +1qxm +2drkgnvghqrjtfxrvnthreesevenpzzldp +four4zcmmzgbzc +4nfbpctgmx +3threemfbgthree19sixone8 +ggc1gldjhxsgvq +1four4seven824nineeight +ninefour6one5ninetwo +bpjs8rjdxpm +zggcvkzeight7onejgkhpsrdkfvfx5three +7h7lpjzsdv4six1 +6seven9one4 +sixfour6 +4hkddrmgfp +43ninecrtoneseven2qbhkkbzdltfour +85 +hlfive3dqzdvjkdd +5chpcxbjkrdzbjtwofivethreem +6ninenineonefour +5five8twoonesf2 +four1seven5pbbjgmxgxmvfzjtvr6vttbnd +zzkcpcckmsixeightnine4 +9xxzzvcsg45one +xmd3ninerxllskrl +xxj2onesixfive3six +threeseven8 +one43 +1sixthreelcbcfgbone3bzgrl5 +four12535three5 +jztxrtwo8495 +threeqhsvcvzfnsevenfourtwothreeffrz9 +onevqlxcz461five4fthree +znine5 +cch5ptlbcbh2ngnlqnrdsjv6mfhndf2 +threehblbzlddttzkrsl51eightzrj +68pgmnbz7seven +twotfhcgltpp1ntpcvrmkgd998 +seven3fourfive7eightsevendlqqseven +jqtcrf43zkktbqhsevendljgb5two +3one5threethree +vvpjcnine9seventhreeninebtzmr +jfourp7twoseven32 +2prjqnineninevjlmqkrkdxv +67six1oneddp9 +tcbcttxninenine21hrmphqrjkvtnfgchjnb3 +sg1six5sevennineone +ninet7jkrzxtmmz +ninesixtslvqck9 +dnhsp9sevenrrsjdn +onekqkvb7 +2sfflskftk +79four +jnngdkghtwo1two +fptfourseven4hjvkz3onesix +tzhtsgkcp8 +9n +six4294seven8 +seveneight74five1 +kfghjdssttgrfour2two5three1nine +5gkhgsixvlpcdmpgbjkqtjlthreetwo3one +sevenfour1tfxzgsnldk1fiveqg +187qhhqlrjx +2lthreethreexthjqcsix +cgpxkxgkmcpdzhtpc363 +sixbtkvqt3 +4twotwoqqmtb7dczgqrtsixseven +seventwo7z9fzgjkl5fjndrznc +qsgfnjqsghtwoninethree8lppsthree +threesevenkdzzvzbl2foursxrlq4sevensix +seven8bjbmcnhrcp3one +gg531 +one8sfvzplxlknine54 +dlxeightwo48fourthreeninethreeeight +sixxlglqsjtmqmgcnfvpljsevenqlgllg6 +tszncfour7one +three54three4 +qkjxzcdmxqvjngmrkpmleight83 +5twoksv49 +7six58sseven87two +fourseven6ndsgfjv8 +ppmclkxhpjpqrjoneeight8two +538 +sixlhsixfive5 +twosevenb3f2twonebpb +lxqbgl55fgzfmvtpgjbxxgffsixlkxlbvmjkkslqpkq5 +7ptnpseven6one +3mtlbfc6tx46five +99pgdmnrbjv +7twokvzlvptxcrfbfzqsxsqvxtfkcpkczkr9fjxsr +eight82lfivenine +onetwo2jvqdhkktbeight +8zhxksgcc79one +knqqz4 +36twofour +2gdssixtnineeight2 +foursix4 +49hjbscbjvbckhjmjrdbh3one +fivesixdqpnv2 +7ftwo +fourffhffkphssbxzsgeight68dvhgrb +two8sevenfive1 +dggljb5nvhpspbscfhd21 +twokeightthreeone6lqglrseven +cklfcsqgtwohptslmlgdpjktvvbbx3 +two3sixthreesevennine +7ninepnclmdnv7ninevmqoneightpct +czzbhfhhrfonetwo1ttvpgxkgsonektpnfrptjltklj4 +7sixthree1five45 +btwone3fivelfzmfxsr81oneqhkzjvt +5kmrlbvpcdrfivefourfive3 +9fsl3nine12 +1seven1seventwofivetwosix +sixzdeight9fcpzvsbtz85 +n1jmxjvgfiveone +1qsptpfbqtrl19three +5twoeight3grrksgjdkgn +1dq4sjknrp755 +2three2five +txktfive2ngqfl57 +vnrjvh1qpbbzqlgjpgrsgrqgggthreeone +sevenone8srlxqqlvv +eightsbfivefourfourseven6 +853 +eight53b3sxfvnz7 +qbhrhkhcbnsfivenszghnbhsix2ggvv +two28three9 +rltzcpbqxfive1nineone +5threedcfspjkm62seven8 +tlndznhtthree268 +ndfgfkphmn2sixjxxtlbqlnine +51eight682fivepnine +dqvrvthreesixsix2fivenrjeight +seven69 +4qlkktltwo8tqgxcninefour21 +threefour32j +4nine27ngxp8 +seven5ghxkb8 +nineone56 +two8onezonesctsttzt5 +64km6ttncd +three6six6 +threetwoeight7six7jgmhreightwocl +3sixfivehjgvqjlrsfivesix6 +fiveeight3sppjtccnineeighteightnffgtlsdj +12seven9fbqxhs9jgh4five +7dmbqrqsnckxtpt +ktvlgfzt95lfdvf4lbppfccjcprdpkdj +seven65lrjmmqdfjfourtslnhdh5 +sblgrkqccmpqhfksmg5532 +rgqzkmmv4ctgzcgvqdghmvfour3 +24rtxdxqnbvdnkgtgcbfkfbtwo +63seven78hrdnnsh +eighttpj79 +foursix6 +6czcdgdmrmzcdcfmsixfkdnbdsplcscqh27 +3333dgrd +8threeltfpfz3 +xgxddj3qkcnbbbhtvbzkmvh8 +s2pzqkldrcx43xzmxqvspm +eight1gkvlt24twothree19 +lkrzltxknd5fmjgbds2klkfgcgp3xcbxxpnl9hzfbfclrx +2zhn73 +sixone4eightninelthreeeight +seven8vlqqfjfmltwosevenfivetwo +spfkzfmssfjrsevennine8ltlrnrjbcfive8 +1spbthreeshsgmrbcp +ninefive7cnxznfmcp6nine +eight4one9x3nine +eightnine4kgxhxx1ckrqlrn +6sevenkjmfxrbhck +jsgtwonefvmcdsnqfp4fivefivesevenhkbkqcb1vgkshfnxfc +eightcvzmtlvsm49 +78four +threeoneninecjzs75 +xrxrsrh58 +1zqkhcvoneseventwohbrfbqgvp +9zfznrfvtgjfhsk +v5jcblbstnvxk +6s1 +6three1seven +75xpmzmhqqphgtrblhkcdxczcvbmg +2rqv989fourthreefourone +zmghjgrfqlzpdcqq9fjnkbl7btgf +2three3qvbfbn +fivehnklrqktnqqlqfslfjpfpfx9six +3xvskqbjzrlonetwo +95fx6sevenseven3grfncsdttt +two8twoklgnrm +two9seven6eight +7lh2sevenshfvljtphhnbhvkzxxgjjrvlq7 +ninemdgkndsevensevensix4seven +4three6eight1lkdmtbh +7rdpvbqljvnine82pmqclfive +nine6nine7seven6 +54rvpqphbpxmcfjmcspsnhrjp +eightn2skzmpmtgqhvvfxgqonevtbfsmfklzspxdrgj +nine276rzshsrvncjrdzfxbmzzlvkhdlcc +sevenfivexgznfftgthree44 +fivekltdkmm3rdmdnm32nineddsfdzpks diff --git a/src/test/kotlin/day1/Day1Test.kt b/src/test/kotlin/day1/Day1Test.kt new file mode 100644 index 0000000..0f07624 --- /dev/null +++ b/src/test/kotlin/day1/Day1Test.kt @@ -0,0 +1,25 @@ +package day1 + +import java.io.File +import kotlin.test.Test + +class Day1Test { + + @Test + fun calculateOne() { + val result = File("src/test/resources/day1/calibration1.txt") + .readLines() + .let(Day1::calculateOne) + + assert(result == 142) + } + + @Test + fun calculateTwo() { + val result = File("src/test/resources/day1/calibration2.txt") + .readLines() + .let(Day1::calculateTwo) + + assert(result == 281) + } +} \ No newline at end of file diff --git a/src/test/resources/day1/calibration1.txt b/src/test/resources/day1/calibration1.txt new file mode 100644 index 0000000..7bbc69a --- /dev/null +++ b/src/test/resources/day1/calibration1.txt @@ -0,0 +1,4 @@ +1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet diff --git a/src/test/resources/day1/calibration2.txt b/src/test/resources/day1/calibration2.txt new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/src/test/resources/day1/calibration2.txt @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen