Inlägg

Inlägg som BigMomma har skrivit i forumet
Av BigMomma

Dag: 6
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim input = File.ReadAllText("input.txt") Console.WriteLine("Part1: " & findIndex(input, 4)) Console.WriteLine("Part1: " & findIndex(input, 14)) End Sub Function findIndex(input As String, markerLength As Integer) As Integer Dim window(markerLength - 1) As String For i = 0 To input.Length - 1 Step 1 window(i Mod markerLength) = input(i) If i >= markerLength - 1 And window.Distinct().Count = markerLength Then Return i + 1 End If Next Return -1 End Function End Module

Dold text
Av BigMomma

Dag: 5
Språk: VB.Net

edit: Snyggade till koden lite

Imports System.IO Module Program Sub Main(args As String()) Dim input = File.ReadAllLines("input.txt") Dim stacks = resetStacks(input) Dim instructionStart = Array.FindIndex(input, Function(line) line.Contains("move")) For i = instructionStart To input.Length - 1 Step 1 Dim instruction = input(i).Split(" ") For j = 1 To Integer.Parse(instruction(1)) Step 1 stacks(Integer.Parse(instruction(5)) - 1).Push(stacks(Integer.Parse(instruction(3)) - 1).Pop()) Next Next Dim part1 As String = "" For Each stack In stacks part1 = part1 & stack.Peek Next stacks = resetStacks(input) Dim crane As New Stack(Of Char) For i = instructionStart To input.Length - 1 Step 1 Dim instruction = input(i).Split(" ") For j = 1 To Integer.Parse(instruction(1)) Step 1 crane.Push(stacks(Integer.Parse(instruction(3)) - 1).Pop()) Next For j = 1 To Integer.Parse(instruction(1)) Step 1 stacks(Integer.Parse(instruction(5)) - 1).Push(crane.Pop()) Next Next Dim part2 As String = "" For Each stack In stacks part2 = part2 & stack.Peek Next Console.WriteLine(part1) Console.WriteLine(part2) End Sub Function resetStacks(input As String()) As List(Of Stack(Of Char)) Dim stacks As New List(Of Stack(Of Char)) Dim stacksEnd = Array.FindIndex(input, Function(line) (Not line.Contains("["))) For i = 0 To ((input(0).Length - 3) / 4) Step 1 stacks.Add(New Stack(Of Char)) Next For i = stacksEnd - 1 To 0 Step -1 If Not String.IsNullOrWhiteSpace(input(i)(1)) Then stacks(0).Push(input(i)(1)) End If For j = 1 To stacks.Count - 1 Step 1 If Not String.IsNullOrWhiteSpace(input(i)(1 + (j * 4))) Then stacks(j).Push(input(i)(1 + (j * 4))) End If Next Next Return stacks End Function End Module

Dold text
Av BigMomma

Dag: 4
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim part1 As Integer = 0 Dim part2 As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim pair = reader.ReadLine.Split(","c) Dim firstElf = pair(0).Split("-"c) Dim secondElf = pair(1).Split("-"c) Dim sections1 As New HashSet(Of Integer) For i = Integer.Parse(firstElf(0)) To Integer.Parse(firstElf(1)) sections1.Add(i) Next Dim sections2 As New HashSet(Of Integer) For i = Integer.Parse(secondElf(0)) To Integer.Parse(secondElf(1)) sections2.Add(i) Next If sections1.IsSubsetOf(sections2) Or sections2.IsSubsetOf(sections1) Then part1 += 1 End If If sections1.Overlaps(sections2) Then part2 += 1 End If End While End Using Console.WriteLine("Part1:" & part1) Console.WriteLine("Part2:" & part2) End Sub End Module

Dold text
Av BigMomma

Dag: 3
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim part1 As Integer = 0 Dim part2 As Integer = 0 Dim rucksacks = File.ReadAllLines("input.txt") For Each rucksack In rucksacks Dim compartment1 = rucksack.Substring(0, rucksack.Length / 2) Dim compartment2 = rucksack.Substring(rucksack.Length / 2) For Each item In compartment1 If compartment2.Contains(item) Then If Char.IsUpper(item) Then part1 += Asc(item) - Asc("A") + 27 Else part1 += Asc(item) - Asc("a") + 1 End If Exit For End If Next Next For i = 0 To rucksacks.Length - 1 Step 3 For Each item In rucksacks(i) If rucksacks(i + 1).Contains(item) And rucksacks(i + 2).Contains(item) Then If Char.IsUpper(item) Then part2 += Asc(item) - Asc("A") + 27 Else part2 += Asc(item) - Asc("a") + 1 End If Exit For End If Next Next Console.WriteLine("Part1:" & part1) Console.WriteLine("Part2:" & part2) End Sub End Module

Dold text
Av BigMomma

Dag: 2
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim scoreMap1 As New Dictionary(Of String, Integer) From { {"A X", 1 + 3}, {"A Y", 2 + 6}, {"A Z", 3 + 0}, {"B X", 1 + 0}, {"B Y", 2 + 3}, {"B Z", 3 + 6}, {"C X", 1 + 6}, {"C Y", 2 + 0}, {"C Z", 3 + 3} } Dim scoreMap2 As New Dictionary(Of String, Integer) From { {"A X", 3 + 0}, {"A Y", 1 + 3}, {"A Z", 2 + 6}, {"B X", 1 + 0}, {"B Y", 2 + 3}, {"B Z", 3 + 6}, {"C X", 2 + 0}, {"C Y", 3 + 3}, {"C Z", 1 + 6} } Dim score1 As Integer = 0 Dim score2 As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim round = reader.ReadLine() score1 += scoreMap1(round) score2 += scoreMap2(round) End While End Using Console.WriteLine("Part1: " & score1) Console.WriteLine("Part2: " & score2) End Sub End Module

Dold text
Av BigMomma

Dag: 1
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim elfs As New List(Of Integer) Dim currentElf As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim currentLine As String = reader.ReadLine() If Not String.IsNullOrWhiteSpace(currentLine) Then currentElf += Integer.Parse(currentLine) Else elfs.Add(currentElf) currentElf = 0 End If End While End Using elfs.Sort() elfs.Reverse() Console.WriteLine("Part 1: Most calories: " & elfs(0)) Console.WriteLine("Part 2: Top 3: " & elfs(0) + elfs(1) + elfs(2)) End Sub End Module

Dold text
Av BigMomma

Jag reggade mig strax efter den blå tiden. Det var nån gång sent 2000 eller tidigt 2001, och sen igen i Juli 2001 när forumet byttes ut. Jag var 19 när jag reggade mig. Nu är jag 40. Tiden flyger verkligen iväg

Jag inte särskilt aktiv längre, men är inne och läser nyheter och trådar ofta. Kul att se att det finns en hel del gamla medlemmar som fortfarande är aktiva

Av BigMomma

Ljudkort är nog den enskilt största uppgradering jag nånsin gjort. När jag köpte ett begagnat Sound Blaster 16 av en klasskamrat och kunde välja Sound Blaster i spelinställningarna öppnades en helt ny värld. Helt plötsligt var det riktig musik och ljudeffekter i spelen till skillnad mot blipp-bloppandet från pc-speakern.

På andra plats kommer voodoo-kort som lyfte 3D-spelen till nya höjder

90-talet var väldigt roligt med sina enorma kliv framåt i utvecklingen

Av BigMomma
Skrivet av Dave1080:

Sen kan jag tycka att det känns som att det är bara folk som faktiskt löser skriver här. Kom igen, det finns väl mycket fler som också har det kämpigt?!

Ja det börjar bli kämpigt här också. Tiden och energin räcker inte riktigt till nu när det börjar bli svårare.
Jag löste Dag 11 del 1, men när det kom till del 2 tog både tiden och orken slut, och jag kände att motivationen dök när jag började halka efter. Men jag ska nog försöka lösa åtminstone några dagar till.

Av BigMomma
Skrivet av S-MAX:

Har suttit ett bra tag med del 2, och jag måste säga att din lösning ser riktigt elegant ut. Kan du inte förklara logiken bakom, förstår inte trots att jag ser facit i din kod.

Lösningen går ut på att hitta sekvenser av adaptrar med 1 jolt skillnad. För varje sådan sekvens räknar man ut hur många variationer som finns för den sekvensen, och multiplicerar detta med totalsumman.
De steg som ökar med 3 måste tas med i den ordningen de står. De kan bara arrangeras på ett sätt och kan ignoreras i uträkningen (eftersom beräkningen skulle bli att multiplicera totalsumman med 1). I min lösning används de stegen för att markera slutet på en sekvens med 1 jolt-steg.

Loopen går igenom alla adaptrar i listan och stegar upp en räknare när skillnaden mot föregående adapter är 1 jolt.
När ett steg inte är 1 jolt (det är alltid 1 eller 3 jolt) har vi nått slutet på en sekvens och kan beräkna antalet möjliga variationer för den. Efter uträkningen återställs räknaren och börjar räkna på nästa sekvens.

Om det ser ut så här i listan: 10, 13, 14, 15, 18
Då är 13, 14, 15 en sekvens av 1 jolt steg.

sekvenser med 1 eller 2 adaptrar kan bara arrangeras på ett sätt och kan ignoreras.

Om det är 3 adaptrar i sekvensen kan de arrangeras på två sätt.
10, 13, 14, 15, 18
10, 13, 15, 18

4 adaptrar kan arrangeras på 4 olika sätt så här:
10, 13, 14, 15, 16, 19
10, 13, 14, 16, 19
10, 13, 15, 16, 19
10, 13, 16, 19

Och 5 adaptrar kan arrangeras på 7 olika sätt.

Jag hade ingen sekvens med fler än 5 adaptrar i min input, så jag har inte lagt till någon kod för det.

Dold text
Av BigMomma

Dag: 10
Språk: VB.Net

Edit: Ändrade till en for-loop istället för while i del 2.

Imports System.IO Module Program Sub Main(args As String()) Dim adapters As New List(Of Integer) adapters.Add(0) For Each line In File.ReadAllLines("input.txt") If Not String.IsNullOrWhiteSpace(line) Then adapters.Add(Integer.Parse(line)) Next adapters.Sort() adapters.Add(adapters.Last() + 3) Console.WriteLine("Part One: " & PartOne(adapters).ToString()) Console.WriteLine("Part Two: " & PartTwo(adapters).ToString()) End Sub Function PartOne(adapters As List(Of Integer)) As Integer Dim ones As Integer = 0 Dim threes As Integer = 0 For i = 0 To adapters.Count - 2 If adapters(i + 1) - adapters(i) = 1 Then ones += 1 If adapters(i + 1) - adapters(i) = 3 Then threes += 1 Next Return ones * threes End Function Function PartTwo(adapters As List(Of Integer)) As Long Dim total As Long = 1 Dim counter As Integer = 1 For index = 0 To adapters.Count - 2 If adapters(index + 1) - adapters(index) = 1 Then counter += 1 Else If counter = 3 Then total *= 2 If counter = 4 Then total *= 4 If counter = 5 Then total *= 7 counter = 1 End If Next Return total End Function End Module

Dold text
Av BigMomma

Dag: 9
Språk: VB.Net

Fick bråka med några Off-by-one-fel innan bitarna föll på plats.

Imports System.IO Module Program Sub Main(args As String()) Dim input As New List(Of Long) For Each line In File.ReadAllLines("input.txt") If Not String.IsNullOrWhiteSpace(line) Then input.Add(Long.Parse(line)) Next Dim partOne = input(FindInvalidIndex(25, input)) Dim partTwo = FindContiguous(FindInvalidIndex(25, input), input) Console.WriteLine("Part 1: " & partOne.ToString()) Console.WriteLine("Part 2: " & partTwo.ToString()) End Sub Function FindContiguous(index As Integer, input As List(Of Long)) As Long For i = 0 To index - 1 Dim sum As Integer = input(i) For j = i + 1 To index - 1 sum += input(j) If sum = input(index) Then Return input(i) + input(j) Next Next Return 0 End Function Function FindInvalidIndex(preamble As Integer, input As List(Of Long)) As Long For i = preamble To input.Count - 1 If Not isValid(preamble, input, i) Then Return i Next Return 0 End Function Function isValid(preamble As Integer, input As List(Of Long), indexToTest As Integer) For i = indexToTest - preamble To indexToTest - 1 For j = i + 1 To indexToTest - 1 If input(i) + input(j) = input(indexToTest) Then Return True Next Next Return False End Function End Module

Dold text

Skrivet av wgren:

Som Ruby programmerare (bland annat) så måste jag säga att VB.Net är behagligt läsbart. När man börjat vänja sig vid språk som inte har brackets i olika former och semikolon överallt så sticker dom i ögonen när man kommer tillbaka till språk (C och alla dess barn exvis) som kräver dom.

Ja jag gillar den "pratiga" syntaxen i VB.
Å andra sidan kan det bli lite wall-of-text-känsla över koden ibland och mycket knappande på tangentbordet.

Av BigMomma

Dag: 8
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim instructionSet = File.ReadAllLines("input.txt") Dim partOne As Integer = 0 Dim partTwo As Integer = 0 IsInfiniteLoop(instructionSet, partOne) Dim correctFound As Boolean = False Dim index As Integer = 0 While Not correctFound And index < instructionSet.Length Dim instructionSetToTest(instructionSet.Length - 1) As String For i = 0 To instructionSet.Length - 1 instructionSetToTest(i) = instructionSet(i).Clone() Next Dim instruction = instructionSetToTest(index).Split(" "c) If instruction(0) = "jmp" Then instructionSetToTest(index) = "nop " & instruction(1) ElseIf instruction(0) = "nop" Then instructionSetToTest(index) = "jmp " & instruction(1) End If If Not IsInfiniteLoop(instructionSetToTest, partTwo) Then correctFound = True index += 1 End While Console.WriteLine("Part 1: " & partOne) Console.WriteLine("Part 2: " & partTwo) End Sub Function IsInfiniteLoop(instructionSet As String(), ByRef acc As Integer) As Boolean Dim hasBeenRun(instructionSet.Length - 1) As Boolean Dim infiniteLoopFound As Boolean = False Dim internalAcc As Integer = 0 Dim index As Integer = 0 While Not infiniteLoopFound And index < instructionSet.Length hasBeenRun(index) = True Dim instruction = instructionSet(index).Split(" "c) Dim code = instruction(0) Dim increment = instruction(1) If code = "acc" Then If increment(0) = "+"c Then internalAcc += Integer.Parse(increment.Substring(1)) If increment(0) = "-"c Then internalAcc -= Integer.Parse(increment.Substring(1)) index += 1 End If If code = "jmp" Then If increment(0) = "+"c Then index += Integer.Parse(increment.Substring(1)) If increment(0) = "-"c Then index -= Integer.Parse(increment.Substring(1)) End If If code = "nop" Then index += 1 End If If index < instructionSet.Length AndAlso hasBeenRun(index) Then infiniteLoopFound = True End While acc = internalAcc Return infiniteLoopFound End Function End Module

Dold text
Av BigMomma

Dag: 7
Språk: VB.Net

Det blev inte så snyggt som jag hade hoppats på. Tänkte först skapa instanser av klassen "Bag" som i sin tur skulle innehålla en lista av instanser av Bag enligt reglerna i filen, och låta klassen gå igenom sitt eget innehåll och räkna. Sen ramlade hjärnan in på ett annat spår och i slutänden blev det nån konstig hybrid av klassinstanser, rekursion och textparsning.

Imports System.IO Module Program Sub Main(args As String()) Dim partOneCount As Integer = 0 Dim bags As New List(Of Bag) For Each rule In File.ReadLines("input.txt") Dim colorAndContents = rule.Split("bags contain") Dim contents = colorAndContents.Last().Split(","c) bags.Add(New Bag(colorAndContents(0).Trim(), contents)) Next For Each bag In bags If ContainsColor(bag, "shiny gold", bags, False) Then partOneCount += 1 Next Dim partTwoCount = BagCount(bags.Find(Function(b) b.Color = "shiny gold"), bags) Console.WriteLine("Part 1: " & partOneCount) Console.WriteLine("Part 2: " & partTwoCount) End Sub Function ContainsColor(currentBag As Bag, color As String, bags As List(Of Bag), includeOwnColor As Boolean) If currentBag.Color = color And includeOwnColor Then Return True Dim bagsToSearch As New List(Of Bag) For Each bag In currentBag.Contents Dim bagColor = bag.Split(" "c)(1) & " " & bag.Split(" "c)(2) If ContainsColor(bags.Find(Function(b) b.Color = bagColor), "shiny gold", bags, True) Then Return True Next Return False End Function Function BagCount(currentBag As Bag, bags As List(Of Bag)) As Integer Dim contentCount As Integer = 0 For Each item In currentBag.Contents Dim numBags = Integer.Parse(item.Split(" "c)(0)) Dim bagColor = item.Split(" "c)(1) & " " & item.Split(" "c)(2) contentCount += numBags For i = 1 To numBags contentCount += BagCount(bags.Find(Function(b) b.Color = bagColor), bags) Next Next Return contentCount End Function Class Bag Public ReadOnly Property Color As String Public ReadOnly Property Contents As List(Of String) Public Sub New(color As String, contents As String()) Me.Color = color Me.Contents = New List(Of String) For Each bag In contents If bag.Trim() <> "no other bags." Then Me.Contents.Add(bag.Trim()) End If Next End Sub End Class End Module

Dold text
Av BigMomma
Skrivet av Daz:

Dag: 6
Språk: C#

Trodde aldrig jag skulle ha nytta av mängdlära igen. Fick många träffar på google om HashSet<T> när jag sökte efter intersect men kändes lite utanför min nivå så körde på något jag förstod

using System; using System.IO; using System.Collections.Generic; using System.Linq; namespace AoC6 { class Program { static void Main() { List<string> input = File.ReadAllText("C:\\Users\\willh\\AdventOfCode2020\\AoC6\\input.txt").Split(new string[] { "\r\n\r\n" }, StringSplitOptions.None).ToList(); int totalSum = 0; foreach (string group in input) { int groupSum = CountUnique(group); totalSum += groupSum; } int totalSumTwo = 0; foreach (string group in input) { int groupSum = CountEveryone(group); totalSumTwo += groupSum; } Console.WriteLine("Solution 1 = {0}", totalSum); Console.WriteLine("Solution 2 = {0}", totalSumTwo); Console.ReadKey(); } static int CountUnique(string input) { List<char> sanitizedInput = new List<char>(); foreach (char c in input) { if (!(c == '\r') && !(c == '\n')) { sanitizedInput.Add(c); } } List<char> uniqueInput = sanitizedInput.Distinct().ToList(); return uniqueInput.Count; } static int CountEveryone(string input) { List<string> sanitizedInput = input.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList(); IEnumerable<char> all = sanitizedInput[0].ToArray(); foreach (var candidate in sanitizedInput) { all = all.Intersect(candidate.ToArray()); } int count = 0; foreach (char c in all) { count += 1; } return count; } } }

Dold text

Känner hur hjärnan sakta blir fylld såhär efter 6 dagar. Jag har nu 12 stjärnor vilket är fler de 11 jag tog förra året. Allting fr.o.m. nu är således nytt rekord och det känns ju ganska ok. Hoppas det inte kommer något monsterproblem och krossar mig imorgon.

Jag baserade min VB-lösning på HashSet, så kolla gärna den om du vill ha ett exempel på hur det kan användas. Förutom syntaxen funkar det på exakt samma sätt i C#

För övrigt riktigt kul att se hur lösningarna på samma problem i samma språk kan bli så olika varandra

Av BigMomma

Dag: 6
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim partOneCount As Integer = 0 Dim partTwoCount As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim groupAnswers As String = "" Dim groupMemberCount As Integer = 0 Dim line = reader.ReadLine() While Not String.IsNullOrWhiteSpace(line) groupMemberCount += 1 groupAnswers += line line = reader.ReadLine() End While Dim anyoneYes As New HashSet(Of Char) For i = 0 To groupAnswers.Length - 1 anyoneYes.Add(groupAnswers(i)) Next partOneCount += anyoneYes.Count For Each question In anyoneYes If groupMemberCount = groupAnswers.Count(Function(q) q = question) Then partTwoCount += 1 End If Next End While End Using Console.WriteLine("Part 1: " & partOneCount.ToString()) Console.WriteLine("Part 2: " & partTwoCount.ToString()) End Sub End Module

Dold text
Av BigMomma

VB.Net får alldeles för lite uppmärksamhet nu för tiden, så här kommer Dag 1-5 i VB.

Dag: 1
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim expenseReport As New List(Of Integer) For Each entry In File.ReadLines("input.txt") expenseReport.Add(Integer.Parse(entry)) Next Console.WriteLine("Part 1: " & CalculatePart1(expenseReport).ToString()) Console.WriteLine("Part 2: " & CalculatePart2(expenseReport).ToString()) End Sub Function CalculatePart1(expenseReport As List(Of Integer)) As Integer For Each entry In expenseReport For Each entry2 In expenseReport If entry + entry2 = 2020 Then Return entry * entry2 End If Next Next Return 0 End Function Function CalculatePart2(expenseReport As List(Of Integer)) As Integer For Each entry In expenseReport For Each entry2 In expenseReport For Each entry3 In expenseReport If entry + entry2 + entry3 = 2020 Then Return entry * entry2 * entry3 End If Next Next Next Return 0 End Function End Module

Dold text

Dag: 2
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim PartOneCount As Integer Dim PartTwoCount As Integer For Each entry In File.ReadLines("input.txt") Dim parts = entry.Split({"-"c, " "c, ":"c}, StringSplitOptions.RemoveEmptyEntries) Dim min = Integer.Parse(parts(0)) Dim max = Integer.Parse(parts(1)) Dim character = parts(2) Dim password = parts(3) Dim charCount = password.Count(Function(c) c = character) If charCount >= min And charCount <= max Then PartOneCount += 1 End If If password(min - 1) = character Xor password(max - 1) = character Then PartTwoCount += 1 End If Next Console.WriteLine("Part 1: " & PartOneCount.ToString()) Console.WriteLine("Part 2: " & PartTwoCount.ToString()) End Sub End Module

Dold text

Dag: 3
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim map As List(Of String) = File.ReadLines("input.txt").ToList() Dim part1 = CalculateSlope(map, 3, 1) Dim part2 = CalculateSlope(map, 1, 1) * CalculateSlope(map, 3, 1) * CalculateSlope(map, 5, 1) * CalculateSlope(map, 7, 1) * CalculateSlope(map, 1, 2) Console.WriteLine("Part 1: " & part1.ToString()) Console.WriteLine("Part 2: " & part2.ToString()) End Sub Function CalculateSlope(map As List(Of String), stepRight As Integer, stepDown As Integer) As Long Dim treeCount As Long = 0 Dim x As Integer = 0 Dim y As Integer = 0 While y < map.Count If map(y)(x) = "#"c Then treeCount += 1 End If x = (x + stepRight) Mod map(0).Length y += stepDown End While Return treeCount End Function End Module

Dold text

Dag: 4
Språk: VB.Net

Imports System.IO Imports System.Text.RegularExpressions Module Program Sub Main(args As String()) Dim validCount1 As Integer = 0 Dim validCount2 As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim passPortData As String = "" Dim line = reader.ReadLine() While Not String.IsNullOrWhiteSpace(line) passPortData += line & Environment.NewLine line = reader.ReadLine() End While If Not String.IsNullOrWhiteSpace(passPortData) Then Dim passPort As New Dictionary(Of String, String) Dim fields = passPortData.Split(New String() {" ", Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) For Each field In fields Dim key = field.Split(":"c).First Dim value = field.Split(":"c).Last passPort.Add(key, value) Next If IsPassPortValidPartOne(passPort) Then validCount1 += 1 End If If IsPassPortValidPartTwo(passPort) Then validCount2 += 1 End If End If End While End Using Console.WriteLine("Part 1: " & validCount1.ToString()) Console.WriteLine("Part 2: " & validCount2.ToString()) End Sub Function IsPassPortValidPartOne(passPort As Dictionary(Of String, String)) As Boolean If Not (passPort.ContainsKey("byr") AndAlso Not String.IsNullOrWhiteSpace(passPort("byr"))) Then Return False If Not (passPort.ContainsKey("iyr") AndAlso Not String.IsNullOrWhiteSpace(passPort("iyr"))) Then Return False If Not (passPort.ContainsKey("eyr") AndAlso Not String.IsNullOrWhiteSpace(passPort("eyr"))) Then Return False If Not (passPort.ContainsKey("hgt") AndAlso Not String.IsNullOrWhiteSpace(passPort("hgt"))) Then Return False If Not (passPort.ContainsKey("hcl") AndAlso Not String.IsNullOrWhiteSpace(passPort("hcl"))) Then Return False If Not (passPort.ContainsKey("ecl") AndAlso Not String.IsNullOrWhiteSpace(passPort("ecl"))) Then Return False If Not (passPort.ContainsKey("pid") AndAlso Not String.IsNullOrWhiteSpace(passPort("pid"))) Then Return False Return True End Function Function IsPassPortValidPartTwo(passPort As Dictionary(Of String, String)) As Boolean If Not IsPassPortValidPartOne(passPort) Then Return False If Not (Integer.Parse(passPort("byr")) >= 1920 And Integer.Parse(passPort("byr")) <= 2002) Then Return False If Not (Integer.Parse(passPort("iyr")) >= 2010 And Integer.Parse(passPort("iyr")) <= 2020) Then Return False If Not (Integer.Parse(passPort("eyr")) >= 2020 And Integer.Parse(passPort("eyr")) <= 2030) Then Return False Dim format = Strings.Right(passPort("hgt"), 2) If Not (format = "in" Or format = "cm") Then Return False Dim height = Integer.Parse(Strings.Left(passPort("hgt"), passPort("hgt").Length - 2)) If Not ((format = "in" And height >= 59 And height <= 76) Or (format = "cm" And height >= 150 And height <= 193)) Then Return False If Not Regex.IsMatch(passPort("hcl"), "#[0-9a-f]{6}") Then Return False If Not Regex.IsMatch(passPort("ecl"), "amb|blu|brn|gry|grn|hzl|oth") Then Return False If Not (IsNumeric(passPort("pid")) And passPort("pid").Length = 9) Then Return False Return True End Function End Module

Dold text

Dag: 5
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim seats As New List(Of Integer) For Each boardingPass In File.ReadLines("input.txt") seats.Add(CalculateSeatId(boardingPass)) Next seats.Sort() Console.WriteLine("Part 1: " & seats.Last.ToString()) Console.WriteLine("Part 2: " & FindMissingSeat(seats).ToString()) End Sub Function CalculateSeatId(boardingPass As String) Dim front As Integer = 0 Dim back As Integer = 127 Dim left As Integer = 0 Dim right As Integer = 7 For i = 0 To 9 If boardingPass(i) = "F"c Then back = Math.Floor((back + front) / 2) If boardingPass(i) = "B"c Then front = Math.Ceiling((back + front) / 2) If boardingPass(i) = "L"c Then right = Math.Floor((left + right) / 2) If boardingPass(i) = "R"c Then left = Math.Ceiling((left + right) / 2) Next Return front * 8 + left End Function Function FindMissingSeat(seats As List(Of Integer)) As Integer Dim seatToCheck = seats.First For i = 0 To seats.Count If seatToCheck <> seats(i) Then Return seatToCheck seatToCheck += 1 Next Return 0 End Function End Module

Dold text
Av BigMomma

Dag 2 i C#

private void RunProgramButton_Click(object sender, EventArgs e) { IntCodeComputer computer = new IntCodeComputer(); computer.Memory = Array.ConvertAll(InputTextBox.Text.Split(','), Convert.ToInt32); computer.RunProgram(); ResultTextBox.Text = computer.Memory[0].ToString(); } private void FindValuesButton_Click(object sender, EventArgs e) { IntCodeComputer computer = new IntCodeComputer(); for (int noun = 0; noun <= 99; noun++) { for (int verb = 0; verb <= 99; verb++) { computer.Memory = Array.ConvertAll(InputTextBox.Text.Split(','), Convert.ToInt32); computer.Memory[1] = noun; computer.Memory[2] = verb; computer.RunProgram(); if (computer.Memory[0] == 19690720) { ResultTextBox.Text = (100 * noun + verb).ToString(); return; } } } } class IntCodeComputer { public int[] Memory { set; get; } public void RunProgram() { int instructionPointer = 0; while (Memory[instructionPointer] != 99) { switch (Memory[instructionPointer]) { case 1: Memory[Memory[instructionPointer + 3]] = Memory[Memory[instructionPointer + 1]] + Memory[Memory[instructionPointer + 2]]; instructionPointer += 4; break; case 2: Memory[Memory[instructionPointer + 3]] = Memory[Memory[instructionPointer + 1]] * Memory[Memory[instructionPointer + 2]]; instructionPointer += 4; break; default: throw new Exception("Unknown opcode. Aborting."); } } } }

Dold text
Av BigMomma

Det här var ju en rolig adventskalender Hoppas tiden räcker till att göra alltihop.

Min lösning på Dag 1 i C#

private void CalculateButton_Click(object sender, EventArgs e) { string[] modules = InputTextBox.Text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); double totalFuel = 0; foreach (string module in modules) { totalFuel += CalculateFuel(double.Parse(module)); } ResultTextBox.Text = totalFuel.ToString(); } private double CalculateFuel(double mass) { double fuel = Math.Floor(mass / 3) - 2; if (fuel > 0) { return fuel + CalculateFuel(fuel); } return 0; }

Dold text
Av BigMomma

Det som visats hittills ser riktigt bra ut och jag köper det nog direkt vid release. De verkar ha fått kontrollerna att funka bra med handkontroll så det blir nog PS4-versionen för min del.

Jag har längtat efter något i stil med Wing Commander: Privateer och Freelancer väldigt länge. För några år sen såg Star Citizen ut att bli spelet jag längtat efter, men det har förvandlats till Second Life i rymden och lär aldrig ens släppas. Det här ser ut att bli en modern tolkning av Privateer, som var fantastiskt bra på sin tid. Det enda negativa är nog att det känns lite FÖR mycket som Privateer. Nästan varenda grej är tagen direkt därifrån. Jag hoppas de får in mer egna och nya ideer innan release så det känns fräsch och nytt och inte som att spela ett gammalt spel med ny grafik.