Daar heb je gelijk in, maar ik vond het niet helemaal in de geest van het oplossen zonder geheugen, aangezien je dan twee keer over dezelfde invoer moet gaan, wat impliceert dat je 'm ergens opgeslagen hebt.Woy schreef op woensdag 4 december 2024 @ 09:54:
Part2 kan nog wat efficienter door als je een don't tegen komt naar een andere state te springen die alleen do() probeert te parsen. Dat werkt natuurlijk niet als je in 1 run zowel Part1 als 2 wil doen.
(Als je ze splitst kun je overigens deel 1 ook versimpelen, want dan hoef je alleen de mul() instructies te detecteren, en kun je do()/don't() negeren.)
Op zich heb je daar een goed punt: de totale overhead is kleiner naarmate het invoergrid groter is, dus uiteindelijk is die misschien verwaarloosbaar, en het kan zelfs zo zijn dat op een bepaald moment het range checken meer kost dan het bespaart.TrailBlazer schreef op woensdag 4 december 2024 @ 10:19:
ik heb net even gekeken. In mijn oplossing heb ik voor part 1 47006 waardes gechecked en hiervan genereerden er 516 een exception. Dus iets meer dan 1 % resulteerde in een exception. Ik weet niet wat meer performance kost het checken of ze allemaal in boundary zijn of deze exceptie afhandelen in deze use case.
Maar dat tweede is specifiek voor Python; het komt doordat de code in Python zelf trager is dan de native code, die de bounds check uiteindelijk implementeert. De snelheidswinst komt dus eigenlijk alleen door het offloaden van de check naar native code.
Dit soort code kun je eigenlijk wel zonder spoiler tags postenFriits schreef op woensdag 4 december 2024 @ 10:42:
Als je van een afstandje kijkt, zijn deel 1 en 2 ongeveer hetzelfde.