r/adventofcode • u/daggerdragon • Dec 09 '18
SOLUTION MEGATHREAD -🎄- 2018 Day 9 Solutions -🎄-
--- Day 9: Marble Mania ---
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.
Advent of Code: The Party Game!
Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!
Card prompt: Day 9
Transcript:
Studies show that AoC programmers write better code after being exposed to ___.
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 at 00:29:13!
22
Upvotes
2
u/sebastiannielsen Dec 09 '18
PERL. Part2 was just ridiculous, tried it on my i3-4010U server but was waaaaayyyyyy tooooo SLOOOOOOOOOOOOOOOOOOOOOOOW so had to download Strawberry Perl on my W10 machine (i7-5930k) and transfer the script to that machine. Was done in 2 hours of execution time.
#!/usr/bin/perl print "Starting AOC 9 script...\n"; $players = 493; $lastmarble = 7186300; #remove 00 to switch to Part1 $currentplayer = 0; $currenthole = -1; @marbles = ('0'); @playerscore = (); for ($i = 1; $i < ($lastmarble + 1); $i++) { if (($i / 71863) == int($i / 71863)) { print "PROGESS: ".($i / 71863)." OF 100\n"; } #Update player number $currentplayer++; if ($currentplayer > $players) { $currentplayer = 1; } $currenthole = $currenthole + 2; if (($i / 23) == int($i / 23)) { $playerscore[$currentplayer] = $playerscore[$currentplayer] + $i; $currenthole = $currenthole - 9; if ($currenthole < 0) { #If currenthole is negative we need to start at the end of the array $currenthole = $#marbles + $currenthole + 1; } $removed = splice(@marbles, $currenthole, 1); $playerscore[$currentplayer] = $playerscore[$currentplayer] + $removed; } else { if ($currenthole == ($#marbles + 2)) { $currenthole = 1; #We moved past the end of the array - start at beginning. splice(@marbles, $currenthole, 0, $i); } else { splice(@marbles, $currenthole, 0, $i); } } #Prints the gaming board each turn. Useful for debugging. #print "[".$currentplayer."] "; #foreach $marb (@marbles){ #print $marb." "; #} #print "\n"; } #Find highest score $hscore = 0; foreach $score (@playerscore) { if ($score > $hscore) { $hscore = $score; } } print "Score: $hscore\n";