Created
December 7, 2016 11:07
-
-
Save pakaufmann/bb1d9386e3bc7a74ce668a815e42ff8e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Day7 extends Challenge { | |
val ips = loadFile("day7.txt").getLines().toList | |
override def runFirst(): Unit = { | |
println(ips.count(supportsTLS)) | |
} | |
override def runSecond(): Unit = { | |
println(ips.count(supportsSSL)) | |
} | |
def supportsTLS(ip: String): Boolean = { | |
def hasAbba(part: String) = part.matches(""".*([a-z])((?:(?!\1).))(\2)\1.*""") | |
val abbaParts = splitParts(ip).map { | |
case (part, true) => | |
true -> hasAbba(part) | |
case (part, false) => | |
false -> hasAbba(part) | |
} | |
abbaParts.contains((true, true)) && !abbaParts.contains((false, true)) | |
} | |
def supportsSSL(ip: String): Boolean = { | |
val abaRegex = """([a-z])((?:(?!\1).))\1""".r | |
def getAbaList(part: String) = part.sliding(3).flatMap(abaRegex.findFirstIn).toList | |
def createBab(aba: String) = new StringBuilder().append(aba(1)).append(aba(0)).append(aba(1)).toString() | |
val parts = splitParts(ip) | |
val babs = parts | |
.filter(_._2) | |
.flatMap(a => getAbaList(a._1)) | |
.map(createBab) | |
parts.filter(!_._2).exists(p => babs.exists(bab => p._1.contains(bab))) | |
} | |
private def splitParts(ip: String) = { | |
val parts = ip.split("""\[|\]""") | |
parts.zipWithIndex.map(p => p._1 -> (p._2 % 2 == 0)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment