diff --git a/pom.xml b/pom.xml
index 833433c..f48d24a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,9 @@
org.jetbrains.kotlin
kotlin-maven-plugin
${kotlin.version}
+
+ 1.8
+
compile
diff --git a/src/main/kotlin/com/basdado/adventofcode/Day2.kt b/src/main/kotlin/com/basdado/adventofcode/Day2.kt
new file mode 100644
index 0000000..e483e5d
--- /dev/null
+++ b/src/main/kotlin/com/basdado/adventofcode/Day2.kt
@@ -0,0 +1,62 @@
+package com.basdado.adventofcode
+
+import java.nio.file.Files
+import java.nio.file.Paths
+import java.util.stream.Collectors
+import java.util.stream.Stream
+
+fun main() {
+
+ puzzle1()
+ puzzle2()
+}
+
+fun puzzle1() {
+ println(
+ lines()
+ .flatMap{ line -> line.chars().mapToObj{ Integer.valueOf(it) }
+ // Count how many times each character appears per word
+ .collect(Collectors.groupingBy( { it }, Collectors.counting()))
+ // Filter on characters appearing more than once
+ .filter { it.value > 1L }
+ .map { it.value }
+ .distinct()
+ .stream()
+ }
+ .collect(Collectors.groupingBy({ it }, Collectors.counting()))
+ .map { it.value }
+ .stream()
+ .mapToLong { it }
+ .reduce { left, right -> left * right }
+ .orElse(0L)
+ )
+}
+
+fun puzzle2() {
+
+ val ids = lines().collect(Collectors.toList())
+ for (i in 0 until ids.size) {
+
+ val shortIds = ids.stream()
+ .map { it.substring(0, i) + it.substring(i + 1) }
+ .sorted()
+ .collect(Collectors.toList())
+
+ var lastId = ""
+ for (shortId in shortIds) {
+ if (lastId == shortId) {
+ println(shortId)
+ return
+ }
+ lastId = shortId
+ }
+ }
+
+}
+
+fun lines(): Stream {
+// return Stream.of("abcdef", "bababc", "abbcde", "abcdef", "abcccd", "aabcdd", "abcdee", "ababab")
+ return Files.lines(Paths.get(Day2::class.java.getResource("/day/2/input.txt").toURI()))
+}
+
+class Day2
\ No newline at end of file
diff --git a/src/main/resources/day/2/input.txt b/src/main/resources/day/2/input.txt
new file mode 100644
index 0000000..5afe3c6
--- /dev/null
+++ b/src/main/resources/day/2/input.txt
@@ -0,0 +1,250 @@
+jplenqtlagxhivmwmscfukzodp
+jbrehqtlagxhivmeyscfuvzodp
+jbreaqtlagxzivmwysofukzodp
+jxrgnqtlagxhivmwyscfukwodp
+jbrenqtwagjhivmwysxfukzodp
+jbrenqplagxhivmwyscfuazoip
+jbrenqtlagxhivzwyscfldzodp
+jbrefqtlagxhizmwyfcfukzodp
+jbrenqtlagxhevmwfsafukzodp
+jbrunqtlagxrivmsyscfukzodp
+jbrenqtlaguhivmwyhlfukzodp
+jbrcnstsagxhivmwyscfukzodp
+jbrenqtlagozivmwyscbukzodp
+jbrenqwlagxhivswysrfukzodp
+jbrenstlagxhuvmiyscfukzodp
+jbranqtlhgxhivmwysnfukzodp
+jbrenqtvagxhinmxyscfukzodp
+jbrenqtlagdhivmwyscfukxody
+jbrenqtlagelavmwyscfukzodp
+jbrenqtlagxhtvmwyhcfukzbdp
+jbrenqwlagxhivmwyscfutzopp
+jbrenqtlavxhibmtyscfukzodp
+jbronqtlagxnivmwyscfuzzodp
+jbredqtlagxhppmwyscfukzodp
+jbrcnqtlogxhivmwysxfukzodp
+jbremqtlagehivswyscfukzodp
+jbrenqolagxhivmcyscfukzokp
+jbrehqtlacxhgvmwyscfukzodp
+fbrlnqtlagxhivmwyscbukzodp
+zbrfnqtlagxhivrwyscfukzodp
+jbregqtlagxnivmwyscfhkzodp
+jbrenqtllgxnivmwystfukzodp
+jurenqtlagxhivmwyscfulzoup
+jbrenitdagxhivmwyxcfukzodp
+jbrenqtlagxqivmwyscvuszodp
+jbqenqwlagxhivmwyscfckzodp
+jbrenqtlagxhivmwxscqupzodp
+jbrenqtlagxhivmwysciuqiodp
+jbrjnjtlagxhivmwyscfukzode
+jbrenqtlagxhuvmwqscfukzods
+jbrenqtlagxhuvmuyscfukzudp
+ibrenqtlagxhivmwyscfuktokp
+jbsenqtlagxhivcwyscfuksodp
+jbrfnntlagxhivmwnscfukzodp
+jzrenqulagxhivmwyscfukzodx
+jbrenqtqygxhivmwyscfukzwdp
+jbrenqtlagxfixmwyscfukzcdp
+jbrenqaoagxhivmwyshfukzodp
+jbrenqtlazxhivmworcfukzodp
+jbrenqtlagxhicowyscfukrodp
+jbrqnqtlagxhivzwyzcfukzodp
+jbrenqtlalxhuvxwyscfukzodp
+jbrenqtlqgxhhviwyscfukzodp
+jbrenqtuggxhivmoyscfukzodp
+jbrenqtlagxpivmwyscfukkodw
+zbrenqhlagxhivmwyscdukzodp
+jbrenutlagxxivmwyscfukzoqp
+obrenqtlagxhivmwxscfuszodp
+jbrenqtlagxhlvmwyscfuixodp
+rbrenqtlagdhixmwyscfukzodp
+jbrenqtlagxhivmwescfyszodp
+jbrfnqtlagxhivmwyscaukzhdp
+jbrenqtiagxhivmbyscfuxzodp
+cbrrnqtuagxhivmwyscfukzodp
+jbkenqtlagxhigmwysufukzodp
+jbjewqtlagxhivmwyscfuqzodp
+jbrznqtlagxvivmwyscfukzovp
+jbrenttlacxhivmwyscfhkzodp
+jblenqtlagxhivmwylcfukaodp
+jbrenqtlagxhivmqysiftkzodp
+jbrenqtlagwhikmwyscfukqodp
+jbrenqtlegxhivmwvsckukzodp
+jbrenqwzagxhiamwyscfukzodp
+jbrenqtlagxhivcwyscfgkzodc
+jbrenqtlagxxhvmwxscfukzodp
+jbrenqtlngxhivmwyscfukoowp
+jbreomtlagxhivmwpscfukzodp
+jfrenqtlagxhivmwyscnumzodp
+jbrenqtlagphipmwyscfukfodp
+jvrenqtlagxhivmwyscfmkzodw
+jbrenqtlaxxoiemwyscfukzodp
+jbrenqtlagxhivmwyscemkzpdp
+jbrenyjldgxhivmwyscfukzodp
+jbrenqtlagxhivfvyspfukzodp
+kbrenctlakxhivmwyscfukzodp
+jbrmhqtlagxhivmwyscfuizodp
+jbjenqtlagxlivmbyscfukzodp
+jbrenqtlaaxhivmmyshfukzodp
+jbronqtlagxhirmvyscfukzodp
+jbcrnqtlagxwivmwyscfukzodp
+jxrenszlagxhivmwyscfukzodp
+jbpenqtlagxhivmwyscfukkody
+jbrewqtlawxhivmwyscfukzhdp
+jbrenqylagxhivmwlxcfukzodp
+jbrenqtlagxxivtwywcfukzodp
+jbrenqtlagxhcvgayscfukzodp
+jbrenitlagxhivmwiscfukzohp
+jbrenutlagxhivmwyscbukvodp
+nbrenqtlagxhivmwysnfujzodp
+jbrenqtlagxhivmwyqcfupzoop
+jbrenqtrarxhijmwyscfukzodp
+jbrenqtlagxhivmwysdfukzovy
+jbrrnqtlagxhivmwyvcfukzocp
+jbrenqtlagxhivmwyscfuvzzhp
+jbhenitlagxhivmwysufukzodp
+jbrenqtlagxhivmwyscfuwzoqx
+kbrenqtlagxhivmwysqfdkzodp
+jbrenqtlagxhivmwyxmfukzodx
+jbcenatlagxxivmwyscfukzodp
+jbrenhtlagvhdvmwyscfukzodp
+jxrenqtlafxhivfwyscfukzodp
+jbreaztlpgxhivmwyscfukzodp
+tqrenqtlagxfivmwyscfukzodp
+jbrenqgllgxhwvmwyscfukzodp
+jbrejjtlagxhivmgyscfukzodp
+jbrenqtlagxhivmwyscvukzoqv
+jbrvnqtlagxsibmwyscfukzodp
+jbrenqttagxhuvmwyscfukvodp
+jbrenqteagxhivmwcscfukqodp
+jbrenqtsabxhivmwyspfukzodp
+jbbenqtlagxhivmwyscjukztdp
+jnrenqtlagxhiimwydcfukzodp
+jbrenqtlagxhfvmwyscxukzodu
+jbrenqtluyxhiomwyscfukzodp
+jbrenqvlagxhivmwyscuukzolp
+ebrenqtlagxnivmwysrfukzodp
+jbreeqtlatxhigmwyscfukzodp
+jbrenqtvxgxhivmwyscfukzedp
+jbrmnqtlagxhivmwywcfuklodp
+jbreeqtvagxhivmwyscfukzody
+jbrenptlagxhivmxyscfumzodp
+jbrenqtlagxhivmwysgfukzfsp
+jurenqtlagjhivmwkscfukzodp
+jbrenntlagxhivmwtscffkzodp
+jbrenqglagxhivmwyocfokzodp
+wbrenqtlagxhivmwhscfukiodp
+jbrenqtligxhivmqascfukzodp
+jbrenqtlagxhivmwxscfukpojp
+jurenqtlagxhivmmyscfbkzodp
+jbrenqtmagxhivmwyscfrbzodp
+jcrenqtlagxhivmwysefukzodm
+jbrenqtlagxhicmwywcfukzodl
+jbvanqtlagfhivmwyscfukzodp
+jbmenqjlagxhivmwyscfdkzodp
+jbrenqtlagohivvwysctukzodp
+jbrenqtdagxdivmwyscfckzodp
+kbrefqtlagxhivmwyscfuazodp
+jbrwnqtoagxhivmwyswfukzodp
+jjhenqtlagxhivmwyscfukzorp
+jbgsnqtlagxhivkwyscfukzodp
+jbrynqtlagxhivmsyspfukzodp
+jbrenftlmkxhivmwyscfukzodp
+nbrenqtxagxhmvmwyscfukzodp
+jbrunqtlagxhijmwysmfukzodp
+jbrenqtlagmaivmwyscfukzowp
+jbrerqtlagxhihmwyscfukzudp
+jbrenqtlagahivmwysckukzokp
+kbrenqtlagxhirmwyscfupzodp
+jbrrnqtlagxhivmwyecfukzodz
+jbrenqtlavxhivmwyscfusiodp
+jnrenqtlagxhivmwyhcfukzodw
+jbretqtlagfhivmwyscfukzrdp
+jbreoqtnagxhivmwyscfukzopp
+jbrenbtllgxhivmwsscfukzodp
+jbrenqtlmgxhivmwyscfuwzedp
+jbnenqtlagxhivbwyscfukzokp
+jbrenqslagxhivmvyscfukzndp
+jbrenqtlagxzivmwuscfukztdp
+gbrenqtlagxhyvmwyscfukjodp
+jbrenqteagxhivmwyscfuszedp
+jbrenqtlaglhivmwysafukkodp
+jbrenqtlagxhcvmwascfukzogp
+jbrenqtlagxhsvmkcscfukzodp
+jbrenqslbgxhivmwyscfufzodp
+cbrenqtlagxhivkwtscfukzodp
+jbrenqtltgxhivmzyscfukzodj
+jbrgnqtlagihivmwyycfukzodp
+vbrenqauagxhivmwyscfukzodp
+jbrqnqtlagjhivmwyscfqkzodp
+jbrenqtlakxhivmwyscfukvobp
+jcrenqelagxhivmwtscfukzodp
+jbrrnqtlagxhlvmwyscfukzodw
+jbrenqtlagxhivmwkscaumzodp
+jbrenqdlagxhivmiescfukzodp
+jhrenqtlagxhqvmwyscmukzodp
+jbrenqtlaghhivmwyscfukkoyp
+jowenqtlagxyivmwyscfukzodp
+jbrenitaagxhivmwyscfqkzodp
+jbrenqtlagxhivmwyscfnkbudp
+jbyenqtlagxhivmiyscfukzhdp
+jbrenitlagxhibjwyscfukzodp
+jbrenqtlavxhjvmwpscfukzodp
+jbrenqyaagxhivmwyscflkzodp
+jbrenqylagxhivmwyicfupzodp
+jbrenqtlagxmevmwylcfukzodp
+lbrenqtlagxhiqmwyscfikzodp
+jbrenqtnarxhivmwyscfmkzodp
+jbrenqtlamxhivmwyscfnkzorp
+jbbenqtlavxhivmwyscjukztdp
+jbrenqtlagxhivmwyscfnliodp
+jbwenetlagxhivmwyscfukzodt
+jbrenatlagxhivmwysmfujzodp
+jbrsnstlagxhivmwyscfukgodp
+jbwvnitlagxhivmwyscfukzodp
+jbrenqtbagxhkvmwypcfukzodp
+jbrlnqtlafxhivmwyscfukdodp
+jbrenztlanxhivmwyscjukzodp
+jbrepqtlagxhivmwudcfukzodp
+jbrenqtlagxiivmwdscfskzodp
+jbrdjqtlagxhivmwyschukzodp
+jbrenqtoaguhivmwyccfukzodp
+jdrexqjlagxhivmwyscfukzodp
+jbrenqtlagxhovmwysckukaodp
+pbrfnqblagxhivmwyscfukzodp
+jbrenqtlagxrivgiyscfukzodp
+jbrelqtgagxhivmryscfukzodp
+jbrenqtlagxhicmwjscfikzodp
+jbrenqjlagxhivmwyscfmkjodp
+jbrenqtlagxpivmwzscgukzodp
+jbienqzlagxpivmwyscfukzodp
+jbrenqvlagxhivmwdscfukzodx
+owrenqtlagxhivmwyicfukzodp
+gbrenqtlaathivmwyscfukzodp
+jbgenqtlafxhivmwysqfukzodp
+jbrenqtlagxhivtwsscfukzokp
+jbrnnqylanxhivmwyscfukzodp
+ebrenqolagxhivmcyscfukzodp
+jbrenqtlarnhivgwyscfukzodp
+jbmenqtlagxhivmvyscfukzgdp
+jbrevqtlaglhivmwystfukzodp
+jbrenqplanthivmwyscfukzodp
+jbrenqtlagxhivmkyscbukzosp
+jbrenqtlagxaivmwyscfugzodo
+jbrenqplagxhnvmwyscfjkzodp
+jbrenqtlagxhivgwyscfusrodp
+cbrenqtlagxhivmwysmfukzody
+jbrenquwaexhivmwyscfukzodp
+jbredqtlagxhdvmwyscfukzoup
+jbrxnqtlagxhivmwysczukaodp
+jbrenqtlafnhivmwyscfuczodp
+jbbdkqtlagxhivmwyscfukzodp
+ubrenqtlagxhivkwyucfukzodp
+ebjenqtlagxhivmwyscfukzodj
+jbgenqtlugxxivmwyscfukzodp
+jbrenqtoagxqivmwdscfukzodp
+bbeenqtlagxhivmwyscfumzodp
+jbfeeqtlagxhivmwmscfukzodp
+jbrlnqtlagxhiimwescfukzodp
+jbrenqtlagwoivmwyscfukhodp
+jbrenqtlagnhivmwyscfuszovp