Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Gedetailleerde uitleg volgt. Twee versimpelingen: ten eerste, laten we de coördinaten met het eindpunt exclusief opschrijven, dus x=[1..3] = [1,2,3] = [1..4), dat rekent makkelijker. Ten tweede: ik leg uit hoe het in 2D werkt, wat makkelijker te visualiseren is. Ik ga er vanuit dat je het zelf wel naar 3D kunt generaliseren.joppybt schreef op woensdag 22 december 2021 @ 16:48:
spoiler:Die 'simpelweg de coordinaten reduceren' opmerking kan ik totaal niet plaatsen. Wat bedoel je daar mee?
ON: x=[2..7) y=[1..4)
ON: x=[4..9) y=[3..6)
Dit zijn twee overlappende rechthoeken. Om het totale oppervlak te berekenen kun je gewoon een 2D bitmap nemen waarin je simpelweg elk rechthoek tekent:
. . 1 2 3 4 5 6 7 8 9
. +-------------------
1 | 0 1 1 1 1 1 0 0 0
2 | 0 1 1 1 1 1 0 0 0
3 | 0 1 1 1 1 1 1 1 0
4 | 0 0 0 1 1 1 1 1 0
5 | 0 0 0 1 1 1 1 1 0
6 | 0 0 0 1 1 1 1 1 0
7 | 0 0 0 0 0 0 0 0 0
Vervolgens tel je dan het aantal 1'en. Hetzelfde kun je natuurlijk in 3 dimensies doen, en dat werkt ook voor deel 1 (met een bitmap van 101×101×101 cellen) maar voor deel 2 wordt die bitmap natuurlijk veel te groot.
De truc is om je te beseffen dat waarden in de bitmap alleen kunnen verschillen op coördinaten die daadwerkelijk in de invoer voorkomen. De x-coordinaten in de invoer zijn 2, 4, 7, 9. De y-coordinaten zijn 1, 3, 4, 6. Dat betekent dat je aan een 4x4 bitmap genoeg hebt:
. . 2 4 7 9
. +---------
1 | 1 1 0 0
3 | 1 1 1 0
4 | 0 1 1 0
7 | 0 0 0 0
De 1 linksboven representeert dus de rechthoek x=[2..4) en y=[1..3). Alle waarden in die rechthoek moeten wel dezelfde waarde hebben want de coördinaten ertussen (x=3 of y=2) komen niet in de invoer voor.
Er is geen informatie verloren gegaan; je kunt de oorspronkelijke bitmap herleiden door rijen en kolommen te dupliceren (kolom 3 is een kopie van 2, bijvoorbeeld).
(Eigenlijk heb je zelfs aan een (4-1)x(4-1) = 3x3 matrix genoeg want de eindpunten zijn exclusief dus de laatste rij en kolom bevatten alleen nullen.)
Nu kun je op het eind niet simpelweg 1'en meer tellen; je moet voor elke cel de oppervlak van het rechthoek dat het representeert uitrekenen. De kolom [2..4) heeft breedte 4 - 2 = 2. De rij [4..7) heeft hoogte 7 - 4 = 3. En op die manier kun je voor elke cel het oppervlak uitrekenen als hoogte × breedte van de betreffende rij en kolom:
. . 2 3 2
. +----------
2 | 4 6 0 0
1 | 2 3 2 0
3 | 0 9 6 0
. | 0 0 0 0
4 + 6 + 2 + 3 + 2 + 9 + 6 = 32, wat hetzelfde is als het aantal 1en in de bitmap in het begin.
Die numpy oplossing is wel een eyeopener: het is allemaal voorbereiding en vervolgens één aanroep van de magische np.ix_ functie?
De laatste stap is dan het berekenen van de inhoud van elke 1-cel. En daar komt de np_.ix truc van pas, wat eigenlijk een 3D outer product is (sorry, ik kan de Nederlandse term niet vinden). Feitelijk bereken ik een 3D array: inhoud[x][y][z] = lengte[x] * breedte[y] * diepte[z]
KabouterSuper schreef op woensdag 22 december 2021 @ 17:46:
[...]
En klopt je doCubesOverlap wel? Wat als startx<other.startx en endx>other.endx.? Dan overlap je wel, maar dit lijkt niet uit je functie te komen.
Dat was het probleem inderdaad, die overlap miste ik.

Helaas daardoor vandaag voor deel 2 geen hogere ranking
De rien. Zo dicht bij de finish helpen we elkaar over de streep, toch?Remcoder schreef op woensdag 22 december 2021 @ 19:10:
[...]
Held
![]()
Dat was het probleem inderdaad, die overlap miste ik.
When life gives you lemons, start a battery factory
Daarna nog ff goed bedenken hoe ik door de tree wil lopen.
Heb de code van DataGhost er half naast liggen maar wil het natuurlijk niet klakkeloos overnemen en wel echt begrijpen.
Siditamentis astuentis pactum.
Euhm ik heb een string versie in ontwikkeling gehad maar werd een beetje kriegel van tellen van die haakjes etc. Dat heb ik nu klaar maar om dan het juiste uit te knippen en weer in de te plakken vond ik zo'n gedoeVarienaja schreef op woensdag 22 december 2021 @ 20:26:
Bij dag 18 blijf ik het grappig vinden dat iedereen 'moeilijk' doet met trees en dergelijke. Ik doe alleen maar string-operaties. Bijna exact zoals in het voorbeeld.
Edit:
Dit krabbeltje, https://github.com/Cranza...18/python/day18-string.py
[ Voor 9% gewijzigd door Cranzai op 22-12-2021 21:25 ]
Omdat dat niet per se de meest intuïtieve en leesbare code oplevert, het behoorlijk fragiel is, aanpassingen lastig zijn en performance vaak niet over naar huis te schrijven is. Er zijn meerdere oplossingen te bedenken, ik ben voor een boom gegaan omdat dat redelijk makkelijk redeneert en je daarmee vaste looptijden van vaak maximaal O(log n) per operatie hebt, terwijl stringmanipulaties zeer vaak naar minimaal O(n) gaan per operatie.Varienaja schreef op woensdag 22 december 2021 @ 20:26:
Bij dag 18 blijf ik het grappig vinden dat iedereen 'moeilijk' doet met trees en dergelijke. Ik doe alleen maar string-operaties. Bijna exact zoals in het voorbeeld.
Er zijn zat talen waarin strings niet mutable zijn dus dat is ook een extra horde. Ik zie dat je in jouw code (disclaimer: ik gebruik nooit java) veel gebruik maakt van allerlei kopieën van strings en dat gaat echt heel snel heel diep in de papieren lopen. Het kan wel in deftige tijd met een "string" maar dan wil je het liefst alsnog een andere datastructuur gebruiken (met dezelfde representatie) die wel mutable is waardoor al die operaties een stuk goedkoper zijn. Ook handig om te weten is dat een boom met een beetje code eromheen ook gewoon in datzelfde string-formaat opgeslagen kan worden, maar dan zonder alle automatische gemakken van een boom zoals O(1) elementen invoegen en weghalen.
Deze opgave was toevallig zo "makkelijk" dat je hier nog met stringmanipulaties kon wegkomen omdat de boom altijd maar maximaal 16 elementen heeft en alle getallen maximaal 1 teken lang zijn, maar bijvoorbeeld mijn aangepaste opgave (waar de boel 16 diep mocht zitten ipv 4 diep) loopt voor geen meter omdat je dan opeens tegen 65536 elementen aan zit te kijken. Ofja, na een paar minuten crasht 'ie met een stack overflow
[ Voor 8% gewijzigd door DataGhost op 23-12-2021 00:55 ]
Voor de dag van vandaag heb ik deel 1 al opgelost zonder ook maar 1 regel te programmeren. Maar bij deel twee geeft hij dat mijn antwoord te laag is. Ik denk dat ik dat maar interpreteer als "ik heb een betere oplossing gevonden dan de maker?"
Straks maar eens kijken of ik het ook nog met een stukje code kan oplossen....
Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat
Same here en deel 2 ook, plaats 48 op global leaderboardDiderikdm schreef op donderdag 23 december 2021 @ 07:58:
Eerste deel met de hand opgelost vandaag, deel twee wil ik niet proberen op deze manier
https://github.com/rverst.../blob/main/Y2021/Day12.cs
https://github.com/rverst.../blob/main/Y2021/Day13.cs
https://github.com/rverst.../blob/main/Y2021/Day14.cs
Bij dag 13 vind ik het toch wel wat jammer dat ik bij deel 2 niet echt de uitkomst print, maar alleen de pixels, maar had geen zin om dat om te zetten naar de daadwerkelijke characters.
Op dit tempo ga ik het helaas niet halen om op eerste kerstdag ook daadwerkelijk klaar te zijn, maar mijn doel is wel om het dit jaar nog af te kunnen ronden.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Nice, jij gaat er dus ook echt vroeg voor zittenMrHaas schreef op donderdag 23 december 2021 @ 08:16:
[...]
Same here en deel 2 ook, plaats 48 op global leaderboard
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Woot net ook deel twee met de hand hahaMrHaas schreef op donderdag 23 december 2021 @ 08:16:
[...]
Same here en deel 2 ook, plaats 48 op global leaderboard
Lekker global leaderboard wel!
[ Voor 6% gewijzigd door Diderikdm op 23-12-2021 08:38 ]
Mja, het voelt een beetje vies, maar I'll take itDiderikdm schreef op donderdag 23 december 2021 @ 08:27:
[...]
Woot net ook deel twee met de hand haha
Lekker global leaderboard wel!
Op zich eens, al weet ik niet of met de hand per se "makkelijker" is danMrHaas schreef op donderdag 23 december 2021 @ 09:23:
[...]
Mja, het voelt een beetje vies, maar I'll take it
Diderikdm schreef op donderdag 23 december 2021 @ 10:03:
[...]
Op zich eens, al weet ik niet of met de hand per se "makkelijker" is dan
spoiler:Een A*/Dijkstra oplossing met constraints
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Engineering is like Tetris. Succes disappears and errors accumulate.
En een amphipod mag boven geen enkele kolom stoppen, niet alleen zijn doelkolom. Iets met lezen...
Ik heb de puzzle uiteindelijk ook met de hand opgelost om m'n algoritme te controleren en fouten te vinden.

Siditamentis astuentis pactum.
When life gives you lemons, start a battery factory
Deze laat ik voor als ik er tijd voor heb.
Jammer dat deze kennelijk makkelijk genoeg is om met de hand te doen, want daar heb ik geen zin in.
Hm, ironisch genoeg heeft deel 2 het makkelijker gemaakt een strategie te verzinnen
[ Voor 29% gewijzigd door DataGhost op 23-12-2021 14:29 ]
Toch fijn dat het nu ook via code gelukt
runtime is 14s voor part 1 & 2 elk, voor nu prima
[ Voor 15% gewijzigd door Diderikdm op 23-12-2021 16:09 ]
En mijn algoritme wil ook niet echt vlotten, ik vermoed dat die nogal graag de A-tjes loopt te verplaatsen omdat die zo lekker goedkoop zijn...
Dat maakt toch niet uit? Ook A-tjes kunnen maar hooguit 2 zetten doen.Remcoder schreef op donderdag 23 december 2021 @ 14:52:
ik vermoed dat die nogal graag de A-tjes loopt te verplaatsen omdat die zo lekker goedkoop zijn...
Vanuit een hok naar een hok. En daarna nooit meer bewegen.
Vanuit een hok naar de gang. En daarna naar een hok.
Siditamentis astuentis pactum.
Ook op de gang kunnen ze bewegenVarienaja schreef op donderdag 23 december 2021 @ 14:55:
[...]
Dat maakt toch niet uit? Ook A-tjes kunnen maar hooguit 2 zetten doen.
Vanuit een hok naar een hok. En daarna nooit meer bewegen.
Vanuit een hok naar de gang. En daarna naar een hok.
^ tenzij je bedoelt dat ze meer dan 2 vakjes per keer kunnen bewegen?
Fuuuuu....Diderikdm schreef op donderdag 23 december 2021 @ 14:58:
[...]
spoiler:"Once an amphipod stops moving in the hallway, it will stay in that spot until it can move into a room. (That is, once any amphipod starts moving, any other amphipods currently in the hallway are locked in place and will not move again until they can move fully into a room.)"
^ tenzij je bedoelt dat ze meer dan 2 vakjes per keer kunnen bewegen?
Heb ik dáár overheen gelezen

Dat verandert wel redelijk de boel.
[ Voor 11% gewijzigd door DataGhost op 23-12-2021 15:46 ]
Fuuuuuuu…. Ik ook.Remcoder schreef op donderdag 23 december 2021 @ 14:59:
[...]
Fuuuuu....
Heb ik dáár overheen gelezen![]()
Dat verandert wel redelijk de boel.
Dat maakt de boel aanzienlijk meer constrained.
[ Voor 9% gewijzigd door armageddon_2k1 op 23-12-2021 16:02 ]
Engineering is like Tetris. Succes disappears and errors accumulate.
Ik had dit ook geprobeerd maar helaas kreeg ik er het verkeerde antwoord uit... Misschien heb ik ergens een optimale zet gemist of heb ik me verrekend. Gelukkig kan ik beter programmeren dan rekenen.tarlitz schreef op donderdag 23 december 2021 @ 11:04:
Leuke puzzel vandaag, ik ben voor de 'no-code' optie gegaan
Ik vind het zelf nog wel leuk maar ik vind dat er wel veel tijdrovende opdrachten tussen zitten. Ik kan me voorstellen dat als je weinig vrije tijd hebt het moeilijk bij te benen is.Creepy schreef op donderdag 23 december 2021 @ 10:33:
Ik merk wel dat ik een beetje AoC moe begin te worden.
Ik dacht zelf meer aanspoiler:Lijkt een beetje op de toren van Hanoi maar dan met wat extra contraints?
Ik weet niet eens zeker of het wel uitmaakt voor de state space. Zijn er toestanden die je zonder die restrictie wel kunt bereiken, en met de restrictie niet?Remcoder schreef op donderdag 23 december 2021 @ 14:59:
Heb ik dáár overheen gelezen![]()
Dat verandert wel redelijk de boel.
Zoniet, dan maakt het alleen uit voor het aantal zetten per toestand, maar dat is op z'n hoogst een constante factor.
[ Voor 14% gewijzigd door Soultaker op 23-12-2021 16:22 ]
Vrije tijd is op het moment het probleem nietSoultaker schreef op donderdag 23 december 2021 @ 16:16:
[...]
Ik vind het zelf nog wel leuk maar ik vind dat er wel veel tijdrovende opdrachten tussen zitten. Ik kan me voorstellen dat als je weinig vrije tijd hebt het moeilijk bij te benen is.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Draait in 1 à 2 seconde.
Pff inderdaad. 's morgens lees ik de opgave als ik opsta en onderweg naar werk denk ik er over na. Oplossen moet dan tussen de bedrijven door, tijdens lunch en 's avonds. Als het dan niet zo vlot gaat, kom ik in tijdnood.Soultaker schreef op donderdag 23 december 2021 @ 16:16:
Ik vind het zelf nog wel leuk maar ik vind dat er wel veel tijdrovende opdrachten tussen zitten. Ik kan me voorstellen dat als je weinig vrije tijd hebt het moeilijk bij te benen is.
Zo ben ik ook nog met deel 2 van de cuboids van gisteren bezig, zit nog ergens een bug in, maar met driedimensionale tekenstijl is het allemaal net wat lastiger.
Vandaag wel gelezen, maar niet aan begonnen. Ach, in de afgelopen jaren ben ik nog nooit zover gekomen als dit jaar dus dat is al winst
... en gaat over tot de orde van de dag
Met de juiste aanpak maakt het aantal dimensies niet eens uit als het goed is, en zou een upping the ante net zo goed dezelfde opgave maar dan in 4D kunnen zijn. Dus als je dingen wilt uittekenen kan dat prima in 2D.P_Tingen schreef op donderdag 23 december 2021 @ 21:53:
[...]
Pff inderdaad. 's morgens lees ik de opgave als ik opsta en onderweg naar werk denk ik er over na. Oplossen moet dan tussen de bedrijven door, tijdens lunch en 's avonds. Als het dan niet zo vlot gaat, kom ik in tijdnood.
Zo ben ik ook nog met deel 2 van de cuboids van gisteren bezig, zit nog ergens een bug in, maar met driedimensionale tekenstijl is het allemaal net wat lastiger.
Vandaag wel gelezen, maar niet aan begonnen. Ach, in de afgelopen jaren ben ik nog nooit zover gekomen als dit jaar dus dat is al winst
Ik ben allang blij, dat de goede antwoorden er weer uitkomen. (Daarnet bij het fatsoeneren van de code liep alles ineens in de soep.)
Siditamentis astuentis pactum.
Ja dat had ik ook al bedacht. Ik denk dat ik op zich de goede aanpak heb, een aantal testcases lopen goed in 2D maar niet allemaal, dus zoeken zoeken zoekenDataGhost schreef op donderdag 23 december 2021 @ 22:03:
[...]
Met de juiste aanpak maakt het aantal dimensies niet eens uit als het goed is, en zou een upping the ante net zo goed dezelfde opgave maar dan in 4D kunnen zijn. Dus als je dingen wilt uittekenen kan dat prima in 2D.
(het is soms net werk
... en gaat over tot de orde van de dag
Niet dat het per se is wat je nu moet doen, maar dikke kans dat je probleem zich vanzelf oplost als je je code zo maakt dat een cuboid een arbitrair aantal dimensies kan hebbenP_Tingen schreef op donderdag 23 december 2021 @ 22:08:
[...]
Ja dat had ik ook al bedacht. Ik denk dat ik op zich de goede aanpak heb, een aantal testcases lopen goed in 2D maar niet allemaal, dus zoeken zoeken zoeken
(het is soms net werk)

1
2
3
4
5
| ############# #...........# ###D#A#C#A### #D#C#B#B# ######### |
[ Voor 6% gewijzigd door armageddon_2k1 op 24-12-2021 07:54 ]
Engineering is like Tetris. Succes disappears and errors accumulate.
Ik heb hem tot nu alleen met de hand opgelost, maar wat is de score waarop je uitkomt?armageddon_2k1 schreef op vrijdag 24 december 2021 @ 07:54:
Is er iemand in staat mijn puzzle input voor dag 23 part 1 te draaien? Ik zie het niet meer. Test input gaat goed maar mijn input niet en handmatig kom ik ook op hetzelfde uit en m’n vrouw na 1 uur puzzelen ook….
code:
1 2 3 4 5 ############# #...........# ###D#A#C#A### #D#C#B#B# #########
Mijn code komt uit oparmageddon_2k1 schreef op vrijdag 24 december 2021 @ 07:54:
Is er iemand in staat mijn puzzle input voor dag 23 part 1 te draaien? Ik zie het niet meer. Test input gaat goed maar mijn input niet en handmatig kom ik ook op hetzelfde uit en m’n vrouw na 1 uur puzzelen ook….
code:
1 2 3 4 5 ############# #...........# ###D#A#C#A### #D#C#B#B# #########
Belangrijkste bij part 1 is:
Visueel uitgeschreven:
[ Voor 41% gewijzigd door Diderikdm op 24-12-2021 08:30 ]
Ik kom uit op 19167, zoals hierboven ook aangegeven en em dat is niet correct…Remcoder schreef op vrijdag 24 december 2021 @ 08:09:
[...]
Ik heb hem tot nu alleen met de hand opgelost, maar wat is de score waarop je uitkomt?
Ik weet dus niet of ik moet lachen of huilen.
[ Voor 8% gewijzigd door armageddon_2k1 op 24-12-2021 08:30 ]
Engineering is like Tetris. Succes disappears and errors accumulate.
.. Ik heb je even opgezocht op de eerste pagina van dit topic.. Kijk nog eens naar je sterren voor deze dagarmageddon_2k1 schreef op vrijdag 24 december 2021 @ 08:30:
[...]
Ik kom uit op 19167, zoals hierboven ook aangegeven en em dat is niet correct…
Ik weet dus niet of ik moet lachen of huilen.

Huh?Diderikdm schreef op vrijdag 24 december 2021 @ 08:33:
[...]
.. Ik heb je even opgezocht op de eerste pagina van dit topic.. Kijk nog eens naar je sterren voor deze dag
Maar als ik naar m’n aoc pagina ga dan is alleen part 1 geactiveerd. Ik kan letterlijk part 2 niet zien. Wat ik ook probeer.
EDIT: In cognito wel

EDIT: Aaaaaaaargh. Ingelogd met m’n verkeerde GitHub. Die van m’n werk!
[ Voor 19% gewijzigd door armageddon_2k1 op 24-12-2021 08:36 ]
Engineering is like Tetris. Succes disappears and errors accumulate.
Kan het zijn dat je bent uitgelogd op AoC/op een ander account zit? op het leaderboard zie ik dat je part1 al af hebt.armageddon_2k1 schreef op vrijdag 24 december 2021 @ 08:34:
[...]
Huh?
Maar als ik naar m’n aoc pagina ga dan is alleen part 1 geactiveerd. Ik kan letterlijk part 2 niet zien. Wat ik ook probeer.
Oftewel de grootste beperking van succesvol aoc doen ben ik zelf.
Engineering is like Tetris. Succes disappears and errors accumulate.
Ik heb de variabelen uit de input geextract en daar zie je dat a altijd 1 of 26 is en b > 10 als a == 1. Beide gevallen komen even vaak voor. In het geval van a == 1 groeit z dus altijd met z * 26 + N + c. Het andere geval moet je dus kloppend maken om te zorgen dat dan altijd z / 26 wordt gedaan door (z % 26) + b te berekenen en alleen verder te gaan als die tussen 1 en 9 valt. Met backtracking zoek ik dan de values voor de overige gevallen.
https://github.com/arjand...ain/python/24/solution.py
MrHaas schreef op vrijdag 24 december 2021 @ 09:07:
Holy shit, wat was dit!
spoiler:In eerste instantie vm gebouwd om te kijken wat er gebeurde maar kon weinig patronen vinden. Uiteindelijk in de "source code" gedoken om te kijken of ik daar iets zag. Daar heb je 14 gelijke blokken met 3 variabelen (a, b en c) per blok. Uiteindelijk doet elk blok het volgende: er wordt gecheckt of (z % 26) + b == N (N is huidige input). Zo ja, dan wordt z door a gedeeld. Zo nee, dan wordt z = z * 26 + N + c.
Ik heb de variabelen uit de input geextract en daar zie je dat a altijd 1 of 26 is en b > 10 als a == 1. Beide gevallen komen even vaak voor. In het geval van a == 1 groeit z dus altijd met z * 26 + N + c. Het andere geval moet je dus kloppend maken om te zorgen dat dan altijd z / 26 wordt gedaan door (z % 26) + b te berekenen en alleen verder te gaan als die tussen 1 en 9 valt. Met backtracking zoek ik dan de values voor de overige gevallen.
https://github.com/arjand...ain/python/24/solution.py
z=(z14==0)
z14=(z13//26*(25*c14+1)+(MONAD[0]+7)*c14)
c14=((z13%26)!=MONAD[0])
z13=(z12//26*(25*c13+1)+(MONAD[1]+13)*c13)
c13=(((z12%26)-9)!=MONAD[1])
...
...
z1=(z0*(25*c1+1)+(MONAD[13]+6)*c1)
c1=(((z0%26)+11)!=MONAD[13])
z0=0
Soms wordt de eerste term niet door 26 gedeeld, soms wel. Zal wel te maken hebben met de grootte van het getal.
Anyway, nu maar gaan backtracken om de hoogste getallen in MONAD te vinden.
When life gives you lemons, start a battery factory
En uiteindelijk van voren naar achter en beginnen van z=0. Door over de waardes 9..1 te itereren vindt je dan een geldige waarde voor dat blok. Veertien keer doen en klaar.
Deel twee itereren over 1..9
Nice, goed gevonden!Asgardian28 schreef op vrijdag 24 december 2021 @ 11:41:
Ja dacht dat we de moeilijke wel hadden gehad… na veel gepruts wel een mooie methode gebruikt:
spoiler:Bij het laatste blok begonnen en gesimuleerd voor welke z waardes een 0 eruit kwam. Dan weet je dus wat de output van het blok ervoor moet zijn. Toen voor dat blok gekeken bij welke inputs er geldige outputwaardes uitkwamen. Zo doorgaan totdat je bij begin bent.
En uiteindelijk van voren naar achter en beginnen van z=0. Door over de waardes 9..1 te itereren vindt je dan een geldige waarde voor dat blok. Veertien keer doen en klaar.
Deel twee itereren over 1..9
Nu heb ik alles nog met de hand uitgeschreven dus ik moet later vandaag de boel nog even netter maken zodat het ook gewoon voor de input werkt.
Wel jammer dat ik eigenlijk helemaal voor niks een VM gemaakt heb
[ Voor 8% gewijzigd door Janoz op 24-12-2021 12:53 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
dag 24 in java
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Deze puzzel heeft me een aantal uur gekost voordat ik überhaupt een richting had waar ik op moest denken.
[ Voor 31% gewijzigd door Diderikdm op 24-12-2021 15:13 ]
Ik heb uiteindelijk het 'programma' handmatig vertaald naar Excel formules. Eens een leuk alternatief.
Met formules had ik het punt bereikt dat ik al een heel kleine z over had, door telkens het input cijfer zo veel mogelijk zo te kiezen dat er van z een 'cijfer' af viel.
Vervolgens experimenteel ontdekt dat het resultaat alleen nog afhing van het eerste input cijfer. Die handmatig 9...1 uitgeprobeerd en dat leidde tot het goede antwoord.
joppybt schreef op vrijdag 24 december 2021 @ 15:43:
spoiler:Tip: tijdens het debuggen z converteren naar 26-tallig stelsel. Dan zie je dat er elke stap alleen een 'cijfer' achteraan bijkomt of het laatste 'cijfer' wegvalt.
Ik heb uiteindelijk het 'programma' handmatig vertaald naar Excel formules. Eens een leuk alternatief.
Met formules had ik het punt bereikt dat ik al een heel kleine z over had, door telkens het input cijfer zo veel mogelijk zo te kiezen dat er van z een 'cijfer' af viel.
Vervolgens experimenteel ontdekt dat het resultaat alleen nog afhing van het eerste input cijfer. Die handmatig 9...1 uitgeprobeerd en dat leidde tot het goede antwoord.
Ik had wel in google spreadsheets alles uitgewerkt en gereduceerd tot de daadwerkelijke formules, alleen ik zat me nog af te vragen hoe dat nu zit met die pairs waar de rest het over had, maar ook met de tips (en de code) snapte ik nog niet wat er nu precies gebeurt. Ik had de code lokaal gedraaid en met de debugger erdoorheen gestapt of ik ergens een aha-moment zou krijgen, maar nee.
Ik snap het overigens nog steeds niet, maar uiteindelijk met de BASE functie en jouw tip gaan puzzelen en de getallen gevonden. Dus toch nog enigszins op eigen kracht
Thanks, de tip met het 26-tallig stelsel zorgde ervoor dat ik eindelijk een oplossingsrichting had!joppybt schreef op vrijdag 24 december 2021 @ 15:43:
spoiler:Tip: tijdens het debuggen z converteren naar 26-tallig stelsel. Dan zie je dat er elke stap alleen een 'cijfer' achteraan bijkomt of het laatste 'cijfer' wegvalt.
Ik heb uiteindelijk het 'programma' handmatig vertaald naar Excel formules. Eens een leuk alternatief.
Met formules had ik het punt bereikt dat ik al een heel kleine z over had, door telkens het input cijfer zo veel mogelijk zo te kiezen dat er van z een 'cijfer' af viel.
Vervolgens experimenteel ontdekt dat het resultaat alleen nog afhing van het eerste input cijfer. Die handmatig 9...1 uitgeprobeerd en dat leidde tot het goede antwoord.
When life gives you lemons, start a battery factory
Als ik mijn data door jouw code gooi, krijg ik een ander getal voor deel 2.Diderikdm schreef op vrijdag 24 december 2021 @ 14:56:
Python dag 24
Deze puzzel heeft me een aantal uur gekost voordat ik überhaupt een richting had waar ik op moest denken.
spoiler:Al dacht ik nog wel op basis van 2018 - 16, 19 en 21 dat er waarschijnlijk wel subroutines in zouden zitten voor 9 ** 14 mogelijkheden
When life gives you lemons, start a battery factory
Uiteindelijk veel zitten rekenen op papier om tot een oplossing te komen
Uiteindelijke oplossing was om een inverse "functie" (kan meerdere outputs hebben) hiervoor te bouwen (met als input 5 waardes: uitkomst, w, en de 3 varierende getallen), en zo terug te itereren vanaf de uitkomst z=0. alle paden bijhoudend. Daarna alle paden naar getallen omzetten, lijst sorteren en onderste en bovenste pakken.
Niet megasnel, berekent veel te veel (namelijk alle mogelijke oplossingen, had gehoopt dat dat deel 2 zou zijn).
Maar goed, wel helemaal zelf gedaan, en blijf tot nu toe lekker elke dag de opgave van die dag oplossen.
[ Voor 15% gewijzigd door FCA op 24-12-2021 17:26 ]
Verandert z'n sig te weinig.
Dat betekent volgens mij dat maar liefst 36% deel 2 daar nog niet heeft weten op te lossen. En fors percentage zo op het eind.
Ah je hebt gelijk! Had iets gerefactord en niet meer gecheckt of het klopteKabouterSuper schreef op vrijdag 24 december 2021 @ 16:40:
[...]
Als ik mijn data door jouw code gooi, krijg ik een ander getal voor deel 2.

Had de a en b van de mn omgedraaid en de lijst reversed.. maar dat kan alleen als de paren lineair index 0 -> -1, 1 -> -2, 2 -> -3.. etc zijn
Ik heb mn code terug aangepast thanks!
[ Voor 22% gewijzigd door Diderikdm op 24-12-2021 18:00 ]
Ik denk trouwens dat dit wel de hoogste ratio van tijd-voor-deel-1 tot tijd-voor-deel-2 heeft van alle problemen, gezien hoe ingewikkeld deel 1 is en hoe eenvoudig deel 2 daarna is.
(Python code, voor de volledigheid).
Ah, dat had ik me nog niet eens gerealiseerd! Goed gezien.MrHaas schreef op vrijdag 24 december 2021 @ 09:07:
spoiler:daar zie je dat a altijd 1 of 26 is en b > 10 als a == 1.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
HA! maak daar +1 van want ik heb hem zojuist ook gefixt.joppybt schreef op vrijdag 24 december 2021 @ 17:35:
Voor dag 22 (3D cuboid matchen) hebben op dit moment 10860 mensen goud en 6110 zilver.
Dat betekent volgens mij dat maar liefst 36% deel 2 daar nog niet heeft weten op te lossen. En fors percentage zo op het eind.
Het heeft even geduurd, maar ik heb hem (het was 1268313839428137 overigens).
Bij het inlezen vergelijk ik de net ingelezen kubus (de "nieuwe") met alle bestaande kubussen. Ik check de bestaande kubussen één voor één of de nieuwe kubus die overlapt. Zo ja, dan snij ik alle delen van de bestaande kubus af en maak daar een zelfstandige delen van. Na afloop is de 'oude' kubus gereduceerd tot dat deel wat overlapte met de nieuwste kubus, maar omdat dat ook al in de nieuwe kubus zit, kan het weg (moet het weg, anders heb je dubbeltellingen).
Schematisch:
:fill(white):strip_exif()/f/image/dxvZBlkT82ZYUVaa8CdWOXdq.png?f=user_large)
Dat deel werkte redelijk vlot. Het duurde even voor ik doorhad dat je ook moet checken of een nieuwe kubus aan alle kanten een reeds bestaande kubus overlapt. Als dat zo is, kan de bestaande in 1x weg en ben je klaar met die kubus. Na het controleren op overlappingen kun je de nieuwe kubus ook gelijk weggooien als die "uit" staat, want dan heeft die verder geen invloed, maar is het alleen maar extra data wat je proces vertraagt.
Uiteindelijk had ik alles wel door hoe het moest, maar had ik nog steeds fouten bij de testinvoer. Eindeloos mijn algoritme zitten checken wat controleert op uitstulpingen aan x- y- en z-kant, maar dat leek allemaal in orde. Tot ik uiteindelijk met de debugger de fout vond in het deel wat controleert of een nieuwe kubus een bestaande volledig overlapt. Daar zat een kopieerfoutje in en had ik ergens x2 en y2 staan in plaats van x1 en y2. Tja, dan wordt het niks.
Fun fact: mijn vrouw zit tv te kijken en ik kom even dansend de kamer in om te melden dat ik mijn kubusprobleem heb opgelost. Ze kijkt me aan: "ok, haha, word je daar zo blij van?". Toch leuk, ik denk dat je programmeur moet zijn om dat te snappen. Uren en uren pielen en dat alleen voor die mooie tekst "That's the right answer!".
* P_Tingen is even een blije guppie
[ Voor 4% gewijzigd door P_Tingen op 24-12-2021 20:56 ]
... en gaat over tot de orde van de dag
Ik heb het nu niet zo opgelost, maar met een fixed aantal dimensies. Heb jij het wel generiek gedaan? Voorbeeldje?DataGhost schreef op donderdag 23 december 2021 @ 22:10:
[...]
Niet dat het per se is wat je nu moet doen, maar dikke kans dat je probleem zich vanzelf oplost als je je code zo maakt dat een cuboid een arbitrair aantal dimensies kan hebben![]()
Dan vallen als het goed is alle typfoutjes eruit.
... en gaat over tot de orde van de dag
Nee dat heb ik niet gedaan, maar moeilijk is dat verder niet als je de "juiste" manier van overlap hebt geimplementeerd.P_Tingen schreef op vrijdag 24 december 2021 @ 20:57:
[...]
Ik heb het nu niet zo opgelost, maar met een fixed aantal dimensies. Heb jij het wel generiek gedaan? Voorbeeldje?
Voor drie dimensies doe je exact hetzelfde maar kijk je daarna ook nog in de Z-richting en zijn het balken in plaats van rechthoeken. Daarmee krijg je maximaal A1, A2, A3, A4, A5, A6 en misschien B. Als je je coordinaten niet in hardcoded variabelen x1, x2, y1, y2, z1, z2 opslaat maar in twee arrays begin[dim] en eind[dim] met dim dus het aantal dimensies kan je diezelfde berekeningen doen in een loopje voor een arbitrair aantal dimensies. Het kan bijv. ook in 1D, dan zijn het allemaal lijnstukken, maar 6D is ook geen probleem. Op een gegeven moment krijg je wel veel hyperrechthoeken natuurlijk
Edit: niet echt getest maar je kan ze naast elkaar leggen en vergelijken. De minus-method doet het meeste werk.
[ Voor 5% gewijzigd door DataGhost op 24-12-2021 22:16 ]
Zo bijvoorbeeld.P_Tingen schreef op vrijdag 24 december 2021 @ 20:57:
Voorbeeldje?
Oorspronkelijk had ik het zelf ook voor 3 dimensies uitgeschreven, maar de code is korter en in een zekere zin simpeler als je 'm generiek schrijft.
[ Voor 5% gewijzigd door Soultaker op 25-12-2021 15:33 ]
Ging dit jaar weer beter dan vorig jaar, 22 keer top 1000 met als uitschieter een keertje 119e.
Gefeliciteerd Christofer Ohlsson en UnderKoen. En mezelf met plek 3
Werd nog spannend op het einde!
En iedereen die plezier heeft gehad met de puzzels, want daar gaat eigenlijk om zoals de bedenker van AoC Eric Wastl zegt. Uiteindelijk geeft het ook wel wat stress om de puzzel zo snel mogelijk op te lossen. Misschien volgend jaar maar eens rustig aan.
Goed gedaan! Ik ben blij dat ik de puzzel elke keer op de dag zelf heb weten op te lossen en meeste dagen ook voor 7:00! Altijd hoogtepuntje van het jaar dit, maar ik ben blij dat het er weer opzit want elke dag 5:30 opstaan begon er wel in te hakkenAsgardian28 schreef op zaterdag 25 december 2021 @ 06:35:
Nou het zit er weer op, leuke laatste puzzel om mee af te sluiten!
Ging dit jaar weer beter dan vorig jaar, 22 keer top 1000 met als uitschieter een keertje 119e.
Gefeliciteerd Christofer Ohlsson en UnderKoen. En mezelf met plek 3![]()
Werd nog spannend op het einde!
En iedereen die plezier heeft gehad met de puzzels, want daar gaat eigenlijk om zoals de bedenker van AoC Eric Wastl zegt. Uiteindelijk geeft het ook wel wat stress om de puzzel zo snel mogelijk op te lossen. Misschien volgend jaar maar eens rustig aan.
Siditamentis astuentis pactum.
Deel 2 kan je alleen krijgen als je 49 sterren hebtjoppybt schreef op zaterdag 25 december 2021 @ 09:44:
Intrigerend dat vandaag 1444 mensen deel 1 wel af hebben maar deel twee niet. Terwijl deel 2 toch echt 'niet zo moeilijk' is 🙂
Zat net te denken dat de ratio 1 ster / 2 sterren een mooie indicator is voor de moeilijkheid van een jaar (of er grote krakers tussen zaten). 2018 springt er daar uit.
Nu kan je dit jaar nog niet echt vergelijken, omdat deze ratio eerst heel erg wijzigt:
- eerst heel laag omdat de toppers als eerste klaar zijn en die ook alle puzzels hebben gehaald
- daarna stuk hoger (mensen die voor de lol doen en een puzzel hebben overgeslagen)
- daarna weer wat omlaag omdat mensen hun openstaande puzzels gaan oplossen
Dat was weer een mooi event
Ik denk uiteindelijk dat puzzels 1 - 17 relatief aan de makkelijke kant waren vergeleken met voorgaande jaren, en de puzzels hierna juist aan de moeilijkere kant.
Fijne feestdagen iedereen!
Doe je filter en lambda expres ipv een comprehension? Ik ben niet zo bekend met beiden, maar dacht me te herinneren dat ieg filter vaak door een comprehension kan worden vervangen, net zoals map. Misschien kwestie van voorkeur
Trouwens ff len(data) en len(data[0]) in een variabele gooien, scheelt getyp
Mooi simpel gemaakt trouwens, gewoon alles in je originele grid gedaan, nice!
[ Voor 27% gewijzigd door Asgardian28 op 25-12-2021 10:34 ]
Thanks!Asgardian28 schreef op zaterdag 25 december 2021 @ 10:32:
@Diderikdm
Doe je filter en lambda expres ipv een comprehension? Ik ben niet zo bekend met beiden, maar dacht me te herinneren dat ieg filter vaak door een comprehension kan worden vervangen, net zoals map. Misschien kwestie van voorkeur
Trouwens ff len(data) en len(data[0]) in een variabele gooien, scheelt getyp
Mooi simpel gemaakt trouwens, gewoon alles in je originele grid gedaan, nice!
Eerste puntje was eerder luiheid:) Itereerde eerst over de filter generator, maar dan veranderde de collectectie tijdens iteratie, dus toen maar een [x for x in ()] omheengeplakt (list(filter()) zou dan al mooier zijn), maar een filter is dan inderdaad al niet meer nodig.
Heb het even refactored thanks
Uiteindelijk dit jaar 41 sterren gehaald. Had nog iets meer kunnen zijn wanneer ik wat meer tijd had, maar denk niet dat ik op eigen kracht dit jaar alle 50 sterren had kunnen behalen.
Mede doordat mijn puzzel en C# ervaring bestaat uit een paar jaar AOC, dus mis soms nog net ff de handigheid. Dus mijn doelstelling is dan ook alleen maar: zoveel mogelijk oplossen op eigen kracht/kennis.
De eerste helft was goed te doen, daarna vond ik ze pittiger worden.
Maar was weer een leuk december tijdverdrijf.
Misschien aankomende week nog ff kijken of ik er nog wat sterren kan bij sprokkelen.
Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat
Dit was mijn eerste aoc, ik werd aangespoord door collega's om mee te doen, maar terugkijkend vond ik het erg leerzaam! Voornamelijk ook door oplossingen van anderen te bestuderen.
Uiteindelijk met behulp van de mini-voorbeelden gevonden waar mijn denkfouten zaten, en daarna nog ruzie gehad met het euvel als een zeekomkommer van positie 0 verplaatst de code dacht dat de zeekomkommer op positie max wel verplaatst kon worden naar positie 0, terwijl die eigenlijk nog behandeld moest worden als bezet.
Uiteindelijk maar de lelijke oplossing van het nogmaals kopieren van de grid gepakt, mijn ster gepakt en klaar.
Voorlopig ben ik even klaar met AoC 2021. De laatste paar puzzels hebben aardig mijn plezier erin vergald, misschien dat ik later nog ga proberen dag 23 opgelost te krijgen met code, maar dat zie ik dan wel weer.
Yep, ik herken het gevoel. Er zaten veel leuke puzzels tussen, maar aan het einde kostte het net teveel moeite om de lol erin te blijven zien. Vanochtend heb ik niet eens geprobeerd om mooie code te schrijven, ik heb alles in een numpy array geknald, heb een while True-loop aangezet en ben koffie gaan maken. Na een handvol minuten had ik het antwoord. En dag 23 heb ik ook met de hand gedaan. Hulde voor degenen die het programmatisch hebben opgelost.Remcoder schreef op zaterdag 25 december 2021 @ 13:49:
Ik ben niet trots op mijn code van vandaag...
***members only***
spoiler:Maar ik heb uiteindelijk 4x de code opnieuw geschreven omdat ik elke keer weer tegen problemen aan liep en ik niet zag waar de fout precies optrad.
Uiteindelijk met behulp van de mini-voorbeelden gevonden waar mijn denkfouten zaten, en daarna nog ruzie gehad met het euvel als een zeekomkommer van positie 0 verplaatst de code dacht dat de zeekomkommer op positie max wel verplaatst kon worden naar positie 0, terwijl die eigenlijk nog behandeld moest worden als bezet.
Uiteindelijk maar de lelijke oplossing van het nogmaals kopieren van de grid gepakt, mijn ster gepakt en klaar.
Voorlopig ben ik even klaar met AoC 2021. De laatste paar puzzels hebben aardig mijn plezier erin vergald, misschien dat ik later nog ga proberen dag 23 opgelost te krijgen met code, maar dat zie ik dan wel weer.
When life gives you lemons, start a battery factory
... en gaat over tot de orde van de dag
Respect aan alleen die de puzzel hebben afgemaaktDiderikdm schreef op zaterdag 25 december 2021 @ 10:25:
Python dag 25
Dat was weer een mooi eventLeuke afsluiter aan een toch uiteindelijk pittig jaar!
Ik denk uiteindelijk dat puzzels 1 - 17 relatief aan de makkelijke kant waren vergeleken met voorgaande jaren, en de puzzels hierna juist aan de moeilijkere kant.
Fijne feestdagen iedereen!
De eerste 17 puzzels waren inderdaad goed te doen maar bij mijn eerste deelname inderdaad op dag 18 gestrand.
Wellicht nog wat puzzeltjes later afmaken en anders volgend jaar weer van de partij! In ieder geval weer een goede opfrissen python gehad
P_Tingen schreef op zaterdag 25 december 2021 @ 14:13:
Ben nog niet aan het programmeren geslagen, maar wel de opgave al even bekeken. Als ik in aanmerking neem dat alle puzzels zelfs op een computer van 10 jaar oud moeten kunnen worden opgelost (aldus de maker van AoC) vraag ik me af of er een slimme aanpak is voor vandaag of is het gewoon dom doorrekenen?
There once was a lady of Wight --- Who travelled much faster than light --- She departed one day --- In a relative way --- And arrived on the previous night
Niets verplicht je om de puzzels in de oorspronkelijke volgorde te doen he. Als je op dag 18 vast zit kun je gewoon doorgaan (misschien met dag 20, want 19 is ook pittig), en kun je altijd later nog besluiten om terug te komen (of niet).Cranzai schreef op zaterdag 25 december 2021 @ 14:15:
De eerste 17 puzzels waren inderdaad goed te doen maar bij mijn eerste deelname inderdaad op dag 18 gestrand.
Liveshort schreef op zaterdag 25 december 2021 @ 15:42:
[...]
spoiler:Volgens mij geen slimme aanpak, maar wel een mogelijkheid om het redelijk simpel vectorized te doen (in numpy). Als je de rechtsgaande en benedengaande komkommers splitst in aparte boolean arrays kun je met np.roll in een keer de hele bende naar rechts of onder verplaatsen (inclusief 'wrappen' door de muren). Vervolgens kun je met & collisions uitrekenen en op die manier bepalen wat er blijft staan en wat niet. Beetje goochelen met logical and, not en or en je bent er. Runt instantaan voor de ~400 stappen die voor mijn input nodig waren.

Mijn Python oplossing doet 't in 4,5 seconde. Wie is sneller?
Haha, als je je echt verveelt, kan ik je de challenges van Dirk Rijmenants aanraden. Je kunt je behoorlijk lang vermaken met de enigma challenge (http://users.telenet.be/d.rijmenants/en/challenge.htm), maar er zijn er nog een aantal (zie http://users.telenet.be/d.rijmenants/index.htm). Er is er eentje die nog niemand heeft opgelost (misschien eens een poging doen met wat tweakers samen?).Remcoder schreef op zondag 26 december 2021 @ 10:36:
Ondanks de laatste paar dagen voelt het wel als een gemis nu om geen nieuwe puzzel te krijgen.
When life gives you lemons, start a battery factory
Des te meer tijd voor https://www.spoj.com/problems/classical/ SpojRemcoder schreef op zondag 26 december 2021 @ 10:36:
Ondanks de laatste paar dagen voelt het wel als een gemis nu om geen nieuwe puzzel te krijgen.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Ik ga maar eens uitzoeken wat hier aan de hand is.That's not the right answer; your answer is too high. Curiously, it's the right answer for someone else; you might be logged in to the wrong account or just unlucky.
When life gives you lemons, start a battery factory
Check dat je je eigen input gebruikt hebtKabouterSuper schreef op woensdag 2 februari 2022 @ 08:32:
Ik ben maar eens begonnen om de vorige jaren ook te doen (2015). En krijg een melding bij een oplossing die ik nog nooit had gehad:
[...]
Ik ga maar eens uitzoeken wat hier aan de hand is.

En als dat het geval is, is het dus gewoon toeval (en een teken dat je algoritme nog niet klopt). Ik heb hem ook wel eens gehad
Zo scherp als een voetbal!
... en gaat over tot de orde van de dag
Ik heb deze afgelopen jaar ook gehad, ondanks dat ik maar één account heb. Dus gewoon puur toeval om op een verkeerd (goed) antwoord te komenKabouterSuper schreef op woensdag 2 februari 2022 @ 08:32:
Ik ben maar eens begonnen om de vorige jaren ook te doen (2015). En krijg een melding bij een oplossing die ik nog nooit had gehad:
[...]
Ik ga maar eens uitzoeken wat hier aan de hand is.
PS5 PSN: UnrealKazu