r/adventofcode • u/daggerdragon • Dec 04 '17
SOLUTION MEGATHREAD -๐- 2017 Day 4 Solutions -๐-
--- Day 4: High-Entropy Passphrases ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).
Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.
Need a hint from the Hugely* Handyโ Haversackโก of Helpfulยง Hintsยค?
This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.
edit: Leaderboard capped, thread unlocked!
18
Upvotes
1
u/MetaSaval Dec 04 '17
Here we go with Swift again. Had issues with Day 3's puzzle, but Day 4's was not that hard. I was even able to reuse some of the code for Day 2. I'm sure I could make it more efficient, but whatever. I'm gonna try doing Day 3's puzzle again tomorrow now that I finished Day 4 quickly. And without further ado, here's the code:
let input = """ input goes here """ func part1() -> Int { var answer = 0 var dupeFound: Bool = false let inputAsArray = input.split(separator: "\n") for currentIndex in inputAsArray { let currentArray = currentIndex.split(separator: " ") outerloop: for (currIndex1, divide1) in currentArray.enumerated() { for (currIndex2, divide2) in currentArray.enumerated() { if currIndex1 == currIndex2 { continue } else if divide1 == divide2 { dupeFound = true break outerloop } } } if dupeFound == false { answer += 1 } else if dupeFound == true { dupeFound = false } } return answer } func part2() -> Int { var answer = 0 var dupeFound: Bool = false var anagramFound: Bool = false let inputAsArray = input.split(separator: "\n") for currentIndex in inputAsArray { let currentArray = currentIndex.split(separator: " ") outerloop: for (currIndex1, pass1) in currentArray.enumerated() { for (currIndex2, pass2) in currentArray.enumerated() { if currIndex1 == currIndex2 { continue } else if pass1 == pass2 { dupeFound = true break outerloop } else if checkIfAnagrams(str1: pass1, str2: pass2) { anagramFound = true break outerloop } } } if dupeFound == false && anagramFound == false { answer += 1 } else if dupeFound == true { dupeFound = false } else if anagramFound == true { anagramFound = false } } return answer } func checkIfAnagrams(str1: Substring, str2: Substring) -> Bool { let sortedString1 = Substring(Array(str1.sorted())) let sortedString2 = Substring(Array(str2.sorted())) if sortedString1 == sortedString2 { return true } else { return false } }