Re: Advent of Code
Verfasst: Samstag 1. Dezember 2018, 13:50
Eine Musterlösung in dem Sinne ist mir nicht bekannt. Es gibt zu jedem Tag einen Thread im offiziellen Subreddit, in dem jeder seine Lösung vorstellen kann: https://www.reddit.com/r/adventofcode/c ... solutions/
Für viele scheint das allerdings eher ein Wettbewerb um den cleversten One-Liner zu sein (sicher auch wegen des Leaderboards), daher zeigen die Python-Lösungen meiner Meinung nach nicht immer unbedingt das sauberste Python.
Hier mal meine Lösung, die sicher auch nicht mustergültig ist:
(Wenn man für 'seen' eine Liste nimmt statt eines Sets, wird es übrigens sehr langsam; darauf bezog sich mein erster Post).
Und hier noch meine Lösung in AWK:
Für viele scheint das allerdings eher ein Wettbewerb um den cleversten One-Liner zu sein (sicher auch wegen des Leaderboards), daher zeigen die Python-Lösungen meiner Meinung nach nicht immer unbedingt das sauberste Python.
Hier mal meine Lösung, die sicher auch nicht mustergültig ist:
Code: Alles auswählen
#!/usr/bin/env python3
import fileinput
from itertools import cycle
def main():
adjustments = [int(line) for line in fileinput.input()]
print('Sum:', sum(adjustments))
frequencies = set()
frequency = 0
for adjustment in cycle(adjustments):
frequency += adjustment
if frequency in frequencies:
print("Repeat:", frequency)
break
frequencies.add(frequency)
if __name__ == '__main__':
main()
Und hier noch meine Lösung in AWK:
Code: Alles auswählen
#!/usr/bin/awk -f
{
sum += $1
buffer[NR-1] = $1
}
END {
print "Sum:", sum
frequency = 0
i = 0
size = length(buffer)
while (1) {
frequency += buffer[i]
if (frequency in seen) {
print "Repeat:", frequency
break
}
seen[frequency] = 1
i = (i+1) % size
}
}