ik had die hint niet nodig, maar bedacht hem nadat ik een half uur bezig was geweest om het dans algoritme te optimaliseren.
[ Voor 20% gewijzigd door DRaakje op 16-12-2017 15:26 ]
Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.
[ Voor 20% gewijzigd door DRaakje op 16-12-2017 15:26 ]
Anoniem: 159174
Toch wat gevonden: via de link naar de API bij de private leaderboard kan je een pak met JSON data (https://adventofcode.com/.../private/view/189709.json) ophalen met alle timestamps. Volgens mij zou je daarmee de scorelijst opnieuw kunnen berekenen, dus ook je eigen punten per onderdeel. #boelwerk.Reptile209 schreef op vrijdag 15 december 2017 @ 09:41:
[...]
En nog een vraag: kan je nog ergens terugzien welke score's je per dagdeel hebt gekregen binnen de Tweakers Leaderboard?
Zo scherp als een voetbal!
Mess with the best, die like the rest
https://niels.nu
Anoniem: 1004565
[ Voor 58% gewijzigd door Anoniem: 1004565 op 18-12-2017 00:05 ]
https://niels.nu
Same here..Son-of-a-bitch. Kleine spoiler voor de mensen die vast zitten:
spoiler:32 bits ints zijn niet groot genoeg voor de registers.
Je hebt helemaal geen expliciete linked list nodig, je kunt gewoon indices van 0 t/m N als identifiers gebruiken, en je hoeft alleen maar de successor van elke node op te slaan. Daarvoor is een array van integers genoeg, zoals in m'n Python oplossing:Anoniem: 1004565 schreef op zondag 17 december 2017 @ 16:38:
na wat gepieker toch maar besloten gebruik te maken van een LinkedList. GGRR Rust std-lib, er is dus geen .insert(positie, element) functie voor de linkedlist uit de std-lib....
gelukkig beston er al een crate die dit wel kon!
Een runtime van ~1640 seconden, maarja...
[ Voor 4% gewijzigd door Soultaker op 18-12-2017 13:43 ]
Soultaker schreef op maandag 18 december 2017 @ 13:12:
Hoe efficiënt is jullie oplossing voor deel 2 van dag 17 (Spinlock)?
Met K=303 (mijn invoer) en N=50,000,000 is de voor de hand liggende O(NK) oplossing nog best traag. Ik kan wel een manier bedenken om het in O(N log K) te doen, maar eigenlijk is het de factor N die kleiner moet worden, en daar heb ik geen goed idee voor.
[...]
Je hebt helemaal geen expliciete linked list nodig, je kunt gewoon indices van 0 t/m N als identifiers gebruiken, en je hoeft alleen maar de successor van elke node op te slaan. Daarvoor is een array van integers genoeg, zoals in m'n Python oplossing:
https://github.com/maksve...e/blob/master/2017/17B.py
Ahh, dat had ik nog helemaal niet bedacht (terwijl dat veel meer lijkt op m'n aanpak van dag 17A). Slim! Dat maakt de implementatie sowieso O(N) en inderdaad redelijk snel (nog steeds meerdere seconden in Python, maar PyPy helpt).P.O. Box schreef op maandag 18 december 2017 @ 13:31:
(spoiler voor 17B)
Anoniem: 159174
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
[ Voor 18% gewijzigd door EagleTitan op 18-12-2017 15:45 ]
Precies! En dat vind ik ook zo cool van dit soort challenges. Zit toch al een tijdje in 't vak en het traint lekker de hersenspiertjes. Komt nog eens bij dat ik redelijk handig met Kotlin begin te worden en dat gaat in de nabije toekomst ook handig zijn.kenneth schreef op maandag 18 december 2017 @ 14:45:
Zoals verwacht erg weinig tijd gehad na dag 8. Nu de lessen van de eerste week mentaal verwerkt zijn kijk ik opeens opvallend anders naar de problemen. Ik denk sneller in termen van folds, state machines en adt's.
https://niels.nu
Je hoeft geen multithreading te gebruiken.Quadro! schreef op maandag 18 december 2017 @ 19:59:
Ik vond deel 2 wel tof vandaag! Ik heb alleen geen flauw idee hoe je fatsoenlijk concurrent dingen in Haskell doet, dus maar even snel iets in Go in elkaar geklust.
[ Voor 6% gewijzigd door P.O. Box op 18-12-2017 22:36 ]
Precies dat... 2 uur frustratie ofzo.Bee.nl schreef op maandag 18 december 2017 @ 22:52:
Heel lang zitten staren op dag 18 deel 2. De code had ik vrij snel en alles leek te kloppen, maar toch kwam er steeds niet het juiste antwoord uit. Was ik gewoon vergeten om het eerste argument bij de jump te checken.
4,8kW ZO-NW PVOutput 8x300Wp ZO 12 graden. 8x300Wp NW 12 graden.
https://niels.nu
Ik denk dat je het probleem ingewikkelder hebt geïnterpreteerd dan nodig was.
Meh, code hergebruiken is overratedWel veel code kunnen hergebruiken weer
Klopt, maar toen ik 't werkend had, was ik er aardig klaar meeSoultaker schreef op dinsdag 19 december 2017 @ 10:59:
Ik denk dat je het probleem ingewikkelder hebt geïnterpreteerd dan nodig was.spoiler:Er zijn geen splitsingen in de invoer. Dus is het onderscheid tussen DFS en BFS ook betekenisloos, en hoef je ook geen visited set bij te houden.
https://niels.nu
Anoniem: 1004565
https://niels.nu
Mja, voor deel 1Hydra schreef op woensdag 20 december 2017 @ 08:24:
spoiler:Hoewel ik de juiste antwoorden direct kreeg gaat dit niet werken voor alle inputs omdat ik niet detecteer of particles elkaar nog kunnen raken. Ik itereer gewoon 'dom' 500 keer en ga er dan maar vanuit dat het wel gelukt is.
Ja, die had ik ook, maar het klopt niet helemaal tenzij je goed je best doet bij de tie-breaker. Ik had de mazzel dat het voor mijn input goed gaat, maar het is wel tricky .Peelee schreef op woensdag 20 december 2017 @ 10:57:
Vandaag bracht herinneringen boven aan menige fysica en mechanica cursus, niet zo moeilijk maar wel leuk![]()
spoiler:Als alternatieve, niet-itererende oplossing heb ik voor deel 1 enkel gecheckt welke van de particles de laagste versnellingsvector heeft.
In de 'long run' zal die uiteindelijk het traagste van punt (0,0,0) weggaan, ongeacht z'n initiële snelheid en positie.
sig
Peelee schreef op woensdag 20 december 2017 @ 11:27:
Goed gezien inderdaad!spoiler:Dan speelt de initiele snelheid ook een rol, of als die ook nog eens gelijk is de beginpositie
sig
Anoniem: 1004565
veldsla schreef op woensdag 20 december 2017 @ 13:43:
Het antwoord vinden bij dag 20 door te kijken naar de output leidde vlotjes tot de juiste oplossing. Het vinden van de juiste condities om de loop te breken vond ik nog het lastigst. Misschien kan het ook wel efficienter...
Nu nog tijd vinden voor dag19...
Zo scherp als een voetbal!
Mess with the best, die like the rest
https://niels.nu
Anoniem: 420461
Da's een hoop code...
[ Voor 39% gewijzigd door Hydra op 22-12-2017 09:21 ]
https://niels.nu
Ja, niks ten nadele van jou hoor, maar we hebben nogal eens discussies waarbij sommigen claimen dat Go zoveel makkelijker is dan Java. Heb er zelf redelijk veel mee gedaan (simpele REST service en wat commandline tooltjes) maar ik word eigenlijk gek van hoe omslachtig 't allemaal is. Simplistic != easy. Java is van zichzelf al erg verbose (nu ik veel in Kotlin bezig ben is het vaak best wel 'meh') maar ik zie vrijwel alleen maar AoC code in Go waarbij de Java versie gewoon minder code bevat.EagleTitan schreef op vrijdag 22 december 2017 @ 09:25:
Go is best verbose inderdaad.
https://niels.nu
Da's een beetje het punt. Een type-system; top. Ik ben Java dev en in AoC met Kotlin bezig en beiden zijn strongly typed. Maar Go heeft daarbovenop een hoop 'busywork' dat niks toevoegt IMHO.veldsla schreef op vrijdag 22 december 2017 @ 10:11:
De kracht van verbose code, en ja Rust is ook nogal verbose, is denk ik niet het verbose zijn tijdens de initiele ontwikkeling, maar vooral het vertrouwen wat je kunt hebben tijdens het refactoren en optimaliseren. Ik doe zelf niks met Go, maar ik hoop dat het daar ook geldt. Hoe meer expliciete types des te beter de compiler kan assisteren als je in de code gaat spitten.
https://niels.nu
Ik ben ook Java dev waarbij ik sinds vorig jaar zoveel mogelijk overzet naar Kotlin. Is inderdaad een prachtige taal al zijn er nog wel een aantal kleine zaken die in Java net iets robuuster danwel volwassener Nou staat Kotlin nog in zijn kinderschoenen en elke update maakt het echt een stuk beter, maar simpele dingen zijn soms echt nog heel erg raar.Hydra schreef op vrijdag 22 december 2017 @ 10:38:
[...]
Da's een beetje het punt. Een type-system; top. Ik ben Java dev en in AoC met Kotlin bezig en beiden zijn strongly typed. Maar Go heeft daarbovenop een hoop 'busywork' dat niks toevoegt IMHO.
Ik ben overigens wel helemaal over als het op Kotlin aankomt. M'n dagelijks werk is Java en ik vind Kotlin gewoon 100% een betere taal. Er is niks waar ik zo iets van heb dat Java beter is, en dat zegt nogal wat
Ik heb nog niet professioneel met Kotlin gewerkt. Puur uit interesse; kun je voorbeelden noemen?Lye schreef op vrijdag 22 december 2017 @ 10:53:
Ik ben ook Java dev waarbij ik sinds vorig jaar zoveel mogelijk overzet naar Kotlin. Is inderdaad een prachtige taal al zijn er nog wel een aantal kleine zaken die in Java net iets robuuster danwel volwassener Nou staat Kotlin nog in zijn kinderschoenen en elke update maakt het echt een stuk beter, maar simpele dingen zijn soms echt nog heel erg raar.
https://niels.nu
Type inference is niet in alle gevallen perfect. Bijvoorbeeld het volgende:Hydra schreef op vrijdag 22 december 2017 @ 10:58:
[...]
Ik heb nog niet professioneel met Kotlin gewerkt. Puur uit interesse; kun je voorbeelden noemen?
1
2
| charArrayOf('a', 'b', 'c').let(::String) // Werkt niet charArrayOf('a', 'b', 'c').let { String(it) } // Gaat prima |
1
2
3
4
5
6
7
8
9
| class SomeClass { companion object { const val SOME_CONSTANT = 5 } fun a() = SOME_CONSTANT } const val SOME_CONSTANT = 3 |
[ Voor 4% gewijzigd door Lye op 22-12-2017 11:17 ]
Anoniem: 1004565
Dat wordt toch allebei direct duidelijk bij het eerste voorbeeld?Anoniem: 1004565 schreef op vrijdag 22 december 2017 @ 11:17:
part 1... Erg vaag waar je nou begon in de Grid, of dat nou op (0, 0) was, of exact in het midden...
Kwam er ook pas na veel frustratie achter dat het om een infinite Grid ging.... GRR
Anoniem: 1004565
[ Voor 75% gewijzigd door veldsla op 22-12-2017 13:29 ]
Anoniem: 1004565
Voor enums is het in Rust volgens mij erg snel om mem::replace te gebruiken om 'm aan te passen!veldsla schreef op vrijdag 22 december 2017 @ 12:45:
Zo dan maar, kleine tweak en het is weer sneller dan de Go versie0.5s tegen 1s. Kan nog 100ms af als ik een andere hasher kies.
[ Voor 30% gewijzigd door Anoniem: 1004565 op 22-12-2017 13:15 ]
Als AoC je iets leert, is het het goed lezen van de instructiesAnoniem: 1004565 schreef op vrijdag 22 december 2017 @ 11:17:
part 1... Erg vaag waar je nou begon in de Grid, of dat nou op (0, 0) was, of exact in het midden...
Kwam er ook pas na veel frustratie achter dat het om een infinite Grid ging.... GRR
[ Voor 5% gewijzigd door Hydra op 22-12-2017 13:25 ]
https://niels.nu
Check. That's itAnoniem: 1004565 schreef op vrijdag 22 december 2017 @ 12:53:
wellicht ligt het aan de manier waarop ik de richting initialiseer in het begin...
Anoniem: 1004565
Heb mn oplossing herschreven, werkt nu ook voor jouw input zonder dat er dingen aangepast hoeven te worden! https://github.com/DutchG.../Rust/day22/src/walker.rsveldsla schreef op vrijdag 22 december 2017 @ 12:45:
Zo dan maar, kleine tweak en het is weer sneller dan de Go versie0.5s tegen 1s. Kan nog 100ms af als ik een andere hasher kies.
Ik zie dat @Anoniem: 1004565 Rust versie een stuk harder gaat (maar het verkeerde antwoord geeft? Misschien een extra newline in de input...). Ik gok dat het aan de Vec ligt ipv de hashmap. Scheelt wel flink 130ms voor jouw oplossing
De mem::replace variant is exact even snel.
Ik heb het nog even zonder newline op de laatste regel geprobeerd, maar krijg nog steeds niet het juiste antwoord. Ik heb mijn input gecommit, dus check het zelf. Voor de zekerheid hieronder het antwoord
spoiler:5322 en 2512079
[ Voor 5% gewijzigd door Hydra op 23-12-2017 09:45 ]
https://niels.nu
Anoniem: 1004565
[ Voor 30% gewijzigd door Anoniem: 1004565 op 23-12-2017 11:59 ]
Anoniem: 420461
[ Voor 8% gewijzigd door DRaakje op 23-12-2017 20:46 ]
https://niels.nu
Ik had niet naar de 'echte' invoer gekeken en voor de test-invoer gewoon quick 'n dirty een 'geef me alle permutaties van de lijst' functie gebruikt. Dat werkt wel voor 8! (grofweg) maar niet echt voor 56!Soultaker schreef op zondag 24 december 2017 @ 12:52:
De meeste oplossingen zullen bijvoorbeeld niet werken voor een invoer die uit twintig keer 0/1 bestaat. Je kunt voor die situatie wel optimaliseren, maar dat is bij de testinvoer niet nodig (dus waarom zou je) en het maakt je algoritme niet fundamenteel sneller (het blijft exponentiële tijd kosten, in het ergste geval).
https://niels.nu
Ah thanks. Ik had hetzelfde probleem.EagleTitan schreef op maandag 18 december 2017 @ 15:44:
De halve dag besteed aan deel 2 omdatspoiler:de condition check voor de jump keek of niet 0 in plaats van groter dan 0
En dat maakte voor deel 1 geen verschil in de uitkomst, dus je merkt het ook niet
"never argue with idiots they drag you down to their level and beat you with experience" dilbert
[ Voor 3% gewijzigd door Daanoz op 25-12-2017 09:12 ]
Daanoz schreef op maandag 25 december 2017 @ 09:11:
spoiler:Ik vraag me wel af waar de naughty / nice list op de home pagina op gebaseerd wordt...? Het lijkt te maken te hebben me wie de puzzels wel of niet voltooid heeft?
[ Voor 31% gewijzigd door Hydra op 25-12-2017 09:44 ]
https://niels.nu
NopeHydra schreef op maandag 25 december 2017 @ 09:41:
Dag 25 in Kotlin
Erg simpel. Meeste werk zat in 't parsen van de input en het puur voor de lol zelf implementeren van de tape. Gelukkig maar; denk niet dat de fam 't leuk zou vinden als ik de hele dag bezig was
Fijne kerst iedereen!
[...]
spoiler:Donations? Gokje.
Zo scherp als een voetbal!
Anoniem: 420461
Reptile209 schreef op maandag 25 december 2017 @ 11:17:
spoiler:/me stond namelijk in het Nice-rijtje, en heb zeker weten geen donatie gedaan. Andere optie: gebruik van een Twitter-account?
Anoniem: 1004565
Anoniem: 420461
http://adventofcode.com/2017/day/25/inputAnoniem: 1004565 schreef op maandag 25 december 2017 @ 12:23:
Het valt me ook op dat ik nu niet meer bij de input van dag 25 kan...
Anoniem: 1004565
yayy! hahaha, wilde mn oplossing namelijk iets beter maken dan alleen maar if's en else statements... hehehe
1
| myArray = [[0]*Size]*Size |
1
| myArray = [[0,0,0],[0,0,0],[0,0,0]] |
1
| myArray = [[0 for j in range(Size)] for i in range(Size)] |
Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat
Anoniem: 420461
Zo doe ik het meestal ook. Je kunt nog kiezen voor de tussenvorm:ydderf schreef op maandag 25 december 2017 @ 19:47:
Uiteindelijk maar opgelost met:
code:
1 myArray = [[0 for j in range(Size)] for i in range(Size)]
Is dit de handigste manier of zijn er nog betere manieren?
1
| myArray = [[0]*Size for i in range(Size)] |
1
2
3
| d = dict() # of: d = {} d[1, 2] = 3 print(d[1, 2]) # 3 |
1
2
| d = dict(((i, j), 0) for i in range(10) for j in range(10)) print(myArray[1, 2]) # 0 |
1
2
3
| d = dict() print(d[1, 2] if (1, 2) in d else 0) # 0 print(d.get((1, 2), 0)) # 0 |
A software developer is someone who looks both left and right when crossing a one-way street.
Apple iPhone 16e LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq