Advent of Code 2018 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 2 3 4 5 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ppx17
  • Registratie: December 2007
  • Laatst online: 17-04 16:47
bernardV schreef op zondag 16 december 2018 @ 16:01:
Ik ben voor dag 15 bezig met een eigen A* implementatie. Het kan vast sneller of ik zou de code kunnen lenen (genoeg implementaties te vinden), maar dat maak het ook weer leuk.

A*: Wikipedia: A* search algorithm

spoiler:
Het lijkt mij handig A* te gebruiken, je kunt gewicht aan posities geven en dan zal de implementatie de kortst mogelijke route kiezen op basis van "gewicht". Door muren een zodanig hoge weight te geven zal er nooit door een muur gegaan worden.
spoiler:
Volgens mij ga je dan de fout in als er geen route is naar een enemy bijvoorbeeld omdat deze geblokkeerd word door een muur. Dan zal hij alsnog de dure route door de muur kiezen.


Overigens eens met de reacties hierboven, wat een werk is day15 zeg. 16 was vanmorgen even snel gedaan, nu weer door met 15... :-(

40D | 8 | 50 | 100 | 300


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
@ppx17
spoiler:
Daar heb ik ook aan gedacht, maar dat is wel op te lossen door een weight > x te negeren als "niet mogelijk".
Immers weet je je grid size en als je muren bijvoorbeeld een weight van x*y + 1 geeft weet je dat het groter is dan de langst mogelijke route op je grid.

Acties:
  • 0 Henk 'm!

  • ppx17
  • Registratie: December 2007
  • Laatst online: 17-04 16:47
bernardV schreef op zondag 16 december 2018 @ 16:06:
@ppx17
spoiler:
Daar heb ik ook aan gedacht, maar dat is wel op te lossen door een weight > x te negeren als "niet mogelijk".
Immers weet je je grid size en als je muren bijvoorbeeld een weight van x*y + 1 geeft weet je dat het groter is dan de langst mogelijke route op je grid.
spoiler:
Makkelijkste oplossing is om gewoon geen nodes te genereren die in een muur of buiten de map bestaan, kan hij er ook geen route over zoeken. :)

40D | 8 | 50 | 100 | 300


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
ppx17 schreef op zondag 16 december 2018 @ 16:08:
[...]

spoiler:
Makkelijkste oplossing is om gewoon geen nodes te genereren die in een muur of buiten de map bestaan, kan hij er ook geen route over zoeken. :)
Ook waar en is eigenlijk net zo makkelijk makkelijker inderdaad :)

Acties:
  • 0 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
C# Day 16

Leuke dag, dit, gewoon duidelijk, maar zeker voor deel twee even nadenken hoe op te lossen.

Die van gisteren moet ik nog oplossen, maar zoveel kleine details die je fout kan hebben. Daarbij lastig om erachter te komen waar het nu fout gaat...

Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Dag 17.. Oh shit :D

Acties:
  • 0 Henk 'm!

Anoniem: 159174

Tja, na zaterdag al twijfels, maar het is weer mooi geweest. Moet allemaal wel een beetje leuk blijven.

Acties:
  • 0 Henk 'm!

  • ZieglerNichols
  • Registratie: Mei 2015
  • Niet online
Ik heb het niet zo efficient geprogrammeerd, maar het werkt! Dag 17: https://pastebin.com/bxCUkkp4
En de visualisatie: https://imgur.com/a/6nXt1dk

spoiler:
Ik had gehoopt dat er voor Part 2 een uitbreiding zou zijn naar meerdere waterbronnen, bijvoorbeeld 100 verschillende bronnen. Als je dan per waterdeel gaat berekenen wat er moet gebeuren, dan wordt de berekening een stuk langer. Met mijn opzet blijft de rekentijd echter gelijk, aangezien ik tegelijkertijd voor alle punten in de scan uitreken wat de volgende state is, dus niet per waterdeeltje.

[ Voor 61% gewijzigd door ZieglerNichols op 17-12-2018 14:21 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Tot nu toe dit in PHP voor Dag 17: https://pastebin.com/uUkE8UTm

Het werkt voor de test input, maar niet voor mijn eigen input. Waarschijnlijk zit ik er ergens naast, maar kan niet vinden waar dat zou moeten zijn.

Dus mocht iemand die het al opgelost heeft zijn/haar input willen delen en ook het antwoord, dan kan ik misschien zoeken waar het mis gaat bij mij.

//EDIT: Ik vond het resultaat al mooi, maar dus niet goed :P

https://pastebin.com/raw/Q8YcRWv8

[ Voor 12% gewijzigd door BernardV op 17-12-2018 17:24 ]


Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
bernardV schreef op maandag 17 december 2018 @ 17:18:
Dus mocht iemand die het al opgelost heeft zijn/haar input willen delen en ook het antwoord, dan kan ik misschien zoeken waar het mis gaat bij mij.
spoiler:
klinkt hetzelfde als mijn initiële probleem, een bucket kan aan twee kanten tegelijkertijd overlopen, en daarmee twee losse buckets vullen.... Handige debug tip; print de output naar een file en scroll er rustig doorheenLet goed op dat je alleen waardes telt binnen je range, ook van bovenaf!

[ Voor 60% gewijzigd door Daanoz op 17-12-2018 17:42 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Daanoz schreef op maandag 17 december 2018 @ 17:38:
[...]


spoiler:
klinkt hetzelfde als mijn initiële probleem, een bucket kan aan twee kanten tegelijkertijd overlopen, en daarmee twee losse buckets vullen.... Handige debug tip; print de output naar een file en scroll er rustig doorheenLet goed op dat je alleen waardes telt binnen je range, ook van bovenaf!
Dank je! Helaas is dat niet het probleem lijkt het.
Ik ga verder zoeken.

Acties:
  • 0 Henk 'm!

  • ZieglerNichols
  • Registratie: Mei 2015
  • Niet online
bernardV schreef op maandag 17 december 2018 @ 17:18:
Tot nu toe dit in PHP voor Dag 17: https://pastebin.com/uUkE8UTm

Het werkt voor de test input, maar niet voor mijn eigen input. Waarschijnlijk zit ik er ergens naast, maar kan niet vinden waar dat zou moeten zijn.

Dus mocht iemand die het al opgelost heeft zijn/haar input willen delen en ook het antwoord, dan kan ik misschien zoeken waar het mis gaat bij mij.

//EDIT: Ik vond het resultaat al mooi, maar dus niet goed :P

https://pastebin.com/raw/Q8YcRWv8
Dit is mijn input: https://pastebin.com/AMDhcBiF
Met als correcte oplossingen 52800 en 45210 voor deel 1 en 2.

Als je er een visualisatie van maakt is meestal snel te zien waar het fout gaat.
spoiler:
Ik had eerst een probleem wanneer er een bak in een andere diepere bak zit. Dan stroomt eerst de ene kant vol en daarna, via de binnenste bak, ook de andere kant van de diepere bak.

[ Voor 16% gewijzigd door ZieglerNichols op 17-12-2018 18:36 ]


Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
bernardV schreef op maandag 17 december 2018 @ 17:54:
[...]

Dank je! Helaas is dat niet het probleem lijkt het.
Ik ga verder zoeken.
spoiler:
Regel 1338...

Acties:
  • 0 Henk 'm!

  • Rips10
  • Registratie: November 2008
  • Laatst online: 09-05 19:15
Anoniem: 159174 schreef op maandag 17 december 2018 @ 09:15:
Tja, na zaterdag al twijfels, maar het is weer mooi geweest. Moet allemaal wel een beetje leuk blijven.
Erg jammer inderdaad. Dat er een paar moeilijkere puzzels bij zitten is goed, maar alle puzzels zijn qua tijdsduur dit jaar een stuk langer geworden.

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Zoek de fout :o
AoC dag 17

Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
spoiler:
De extra pixel aan de onderkant? :P

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Die skip ik wel netjes in de testcase, maar het moet wel zoiets stoms zijn want het plaatje ziet er ok uit. Of ik ben ergens door een muur heen gelopen natuurlijk. Ik zal eens een overlay met de startsituatie doen. -edit- Nope, mijn gimp skills geven geen aanleiding om dat te geloven.

n - 2 werd goedgekeurd. Ik zal nog eens naar mijn boundaries gluren :)

[ Voor 25% gewijzigd door veldsla op 17-12-2018 21:03 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Dank! Ik ga kijken zometeen, nu een biertje bij vrienden :)

Acties:
  • +2 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
veldsla schreef op maandag 17 december 2018 @ 20:37:
n - 2 werd goedgekeurd. Ik zal nog eens naar mijn boundaries gluren :)
spoiler:
Mogelijk heb je er al aan gedacht, maar zeker als slechts een paar verschil is, heb je ook aan de top boundry gedacht?

To prevent counting forever, ignore tiles with a y coordinate smaller than the smallest y coordinate in your scan data or larger than the largest one.

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Daanoz schreef op maandag 17 december 2018 @ 21:08:
[...]


spoiler:
Mogelijk heb je er al aan gedacht, maar zeker als slechts een paar verschil is, heb je ook aan de top boundry gedacht?

To prevent counting forever, ignore tiles with a y coordinate smaller than the smallest y coordinate in your scan data or larger than the largest one.
Check.
spoiler:
Ik gooide alleen y=0 eraf. If it works for the testcase.....


Eigenlijk was deze best wel leuk. Wel iets te veel werk voor de maandag. Had deze graag ipv zaterdag gezien. Ook leuk kunnen spelen met ndarray-rs en een png library dus we hebben weer wat geleerd.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
Ok, nu (eindelijk) redelijk productief want de moed opgegeven met Rust en nu aan de gang met Python.
Python:
1
2
3
        return self.get_value_pt1() if len(self.children) == 0 else \
            sum(child.get_value_pt2() for child in
                [self.children[m - 1] for m in self.meta if 0 < m <= len(self.children)])

Hmmmokay .... da's het gevaar van 'productieve talen' denk ik dan maar :X

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
Daanoz schreef op maandag 17 december 2018 @ 21:08:
spoiler:
Mogelijk heb je er al aan gedacht, maar zeker als slechts een paar verschil is, heb je ook aan de top boundry gedacht?

To prevent counting forever, ignore tiles with a y coordinate smaller than the smallest y coordinate in your scan data or larger than the largest one.
Argghhhh!!! Daar heb ik ook een uur op vastgezeten. In mijn geval was het verschil 4, dus dat had ik niet echt kunnen raden.

Niet echt logisch dat het water aan de bovenkant niet meetelt, en dat was ook compleet niet duidelijk in het voorbeeld (waar alleen de eerste rij afvalt, maar die bevat alleen een '+' en geen '|', waardoor ik dacht dat het die faucet was die niet meetelde).

Verplicht plaatje van mijn oplossing:
https://github.com/maksve...r/2018/day17.png?raw=true

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
spoiler:
1338 : |||


Hij werkt! : https://pastebin.com/pFx1u0vn

Iedereen bedankt voor de hints. Uiteindelijk bleek ik -1 en +1 op de x-as te missen, waardoor mijn waardes structureel te laag waren, behalve met de testdata.

[ Voor 32% gewijzigd door BernardV op 17-12-2018 22:38 ]


Acties:
  • +1 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
ZieglerNichols schreef op maandag 17 december 2018 @ 18:34:
[...]
Dit is mijn input: https://pastebin.com/AMDhcBiF
Met als correcte oplossingen 52800 en 45210 voor deel 1 en 2.
Bij mij triggerde de input van @ZieglerNichols nog wel een bugje, maar ook die is eruit. Dag 17 in het altijd mooie Rust ;)

[ Voor 15% gewijzigd door veldsla op 17-12-2018 22:41 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Mijn input: https://pastebin.com/raw/tm3KcrmM
Mijn output: https://pastebin.com/raw/CExWdiGy

Voor degene die extra data wil, extra input heeft mij geholpen door de hint van @Daanoz te bekijken en de input van @ZieglerNichols

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Haha, nog een bugje aan de rechterkant. Nu is ie echt goed :)

Acties:
  • 0 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
Zo te horen heb ik dezelfde problemen gehad als anderen, de bovenkant, die niet gecoverd is door de testcase...

[ Voor 22% gewijzigd door DRaakje op 18-12-2018 00:08 ]


Acties:
  • 0 Henk 'm!

  • ZieglerNichols
  • Registratie: Mei 2015
  • Niet online
Zo, dag 18 was weer een stuk makkelijker!
Code: https://pastebin.com/2zZkTafc
Visualisatie: https://imgur.com/a/tYcU15j

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Inderdaad was dag 18 een stuk makkelijker. Zal mijn code zo even wat opruimen en dan plaatsen.

//EDIT: Ruwe versie, moet zeker sneller kunnen: https://pastebin.com/DF2VVnXq

[ Voor 30% gewijzigd door BernardV op 18-12-2018 10:26 ]


Acties:
  • 0 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
Jep leuk zo, 1e versie had voor deel precies 24 uur nodig om tot een antwoord te komen >_<

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
Dag 18 was een beetje zoals
spoiler:
dag 12 (planten potten), maar nu met een cykel met een periode > 1.

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Soultaker schreef op dinsdag 18 december 2018 @ 11:29:
Dag 18 was een beetje zoals
spoiler:
dag 12 (planten potten), maar nu met een cykel met een periode > 1.
Inderdaad.

spoiler:
Ik keek trouwens net naar de code van @ZieglerNichols en zie daar dat ik dezelfde cycle heb, namelijk 28.


//EDIT:
spoiler:
Ik heb net uit git even twee andere inputs gepakt en die hebben ook beiden een cycle van 28.

[ Voor 14% gewijzigd door BernardV op 18-12-2018 12:51 ]


Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Tsja, verrassend eenvoudig. Naïef zou ik over deel 2 bijna 9 ongeveer 7 uur over doen. toch maar niet dus.

[ Voor 8% gewijzigd door veldsla op 18-12-2018 14:08 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
veldsla schreef op dinsdag 18 december 2018 @ 12:56:
Tsja, verrassend eenvoudig. Naïef zou ik over deel 2 bijna 9 uur over doen. toch maar niet dus.
Toch best netjes, als ik mijn huidige tijd van 1.2s doorreken zou ik over deel 2 ongeveer 650 uur doen 8)7

Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
Bij mij zou dat ook niet opschieten, ~ 60 uur... En dan heb ik zo min mogelijk array lookups... Toch wel een beetje een zwakte punt van het taaltje denk ik.

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Pfff al een paar dagen vast op dag 15, kom ik net tot de conclusie dat ik niet goed gelezen heb. Ik doe een move of een attack, maar een attack mag dus ook na de move als je in de buurt bent 8)7

Zo dit maar even inbouwen, snapte al niet waarom ik steeds slechts een minimaal verschil had met de voorbeelden.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 22:52

Lye

Ik liep een aantal dagen achter, vandaag dagen 14, 16 en 18 (af)gemaakt (15 en 17 moeten nog).

Ik vind het jammer dat deze opdrachten zo lang duren (dag 14 duurt makkelijk 2 seconden, dag 18 1,5), Voor zover ik kan zien kan ik ook geen extra optimalisaties doen..

[ Voor 4% gewijzigd door Lye op 18-12-2018 18:58 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Veel overbodige code, veel aanpassingen en toevoegingen die achteraf helemaal niet gebruikt worden, maar geen zin het op te schonen: https://pastebin.com/sCuUD91y

Dag 15 klaar, eindelijk!

spoiler:
Ik heb uiteindelijk "Dijkstra's" algoritme gebruikt om de afstand te bepalen.

Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
Ok, ik ben echt heel benieuwd hoe andere deel 2 oplossen...
spoiler:
Uiteindelijk heb ik de 'assembly' code naar mijn eigen taal omgeschreven, en een 'kleine' optimalisatie toegevoegd.... runtime: 0.5s 😎

Acties:
  • 0 Henk 'm!

  • ppx17
  • Registratie: December 2007
  • Laatst online: 17-04 16:47
Daanoz schreef op woensdag 19 december 2018 @ 09:07:
Ok, ik ben echt heel benieuwd hoe andere deel 2 oplossen...
spoiler:
Uiteindelijk heb ik de 'assembly' code naar mijn eigen taal omgeschreven, en een 'kleine' optimalisatie toegevoegd.... runtime: 0.5s 😎
spoiler:
Heel lang met de output van de registers spelen tot het patroon zichtbaar werd, en toen een shortcut geimplementeerd. Echt snel is hij nog niet, maar ik hoop dat ie het wel gewoon met andere inputs doet. (4.5s runtime voor p1 en p2 hier.)

40D | 8 | 50 | 100 | 300


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
Re: dag 19 deel 2: beetje jammer dat dit hetzelfde is als een probleem van vorig jaar, en ik vond het toen ook al geen programmeerprobleem. Nou ja, deze hebben we dan tenminste weer gehad voor dit jaar.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 12-06 15:40
Ik heb dag 15 afgekeken, geen zin om op papier het helemaal zelf uit te vogelen.

spoiler:
Eerst wordt een initiele waarde gemaakt en da's een teller in een dubbele for-loop om alle factoren te summen. Dus na de initiele setup gewoon het programma afbreken en zelf de sum berekend.
Soultaker schreef op woensdag 19 december 2018 @ 11:04:
Re: dag 19 deel 2: beetje jammer dat dit hetzelfde is als een probleem van vorig jaar, en ik vond het toen ook al geen programmeerprobleem. Nou ja, deze hebben we dan tenminste weer gehad voor dit jaar.
Ik vind 'em ook helemaal niet leuk. Zelfde met dag 15; kost gewoon te veel tijd en het is niet echt moeilijk; je bent vooral bezig hele specifieke regeltjes te implementeren. Dat lijkt me te veel op werk ;)

[ Voor 47% gewijzigd door Hydra op 19-12-2018 11:54 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Dag 19 opgelost: https://pastebin.com/8XrUukcz
Deze code is wel specifiek voor mijn input.

spoiler:
Ik heb de loop die bij mij begint bij opcode 2 t/m opcode 12 verwijderd en "overgeslagen". Hierdoor loop ik wel gewoon door de input en lost hij beide vraagstukken op in ongeveer 6s

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Inderdaad. Vorig jaar stom. Dit jaar stom. Wel blij met mijn wristwatch implementatie. Met zo'n, 5.5 nanoseconde per instructie best een pittig ding, helaas wel te langzaam om deel 2 te brute forcen.

Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 13-06 16:57
sum is de waarde die in het begin berekend word
spoiler:
public int Solve(int sum)
{
int result = 0;
for (int i = 1; i <= sum; i++)
{
if (i * (sum / i) == sum)
{
result += i;
}
}
return result;
}

Loopt binnen ~50ms

Mess with the best, die like the rest


Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Deze doet het ook :+

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 22:44
ThaStealth schreef op woensdag 19 december 2018 @ 15:36:
sum is de waarde die in het begin berekend word
spoiler:
public int Solve(int sum)
{
int result = 0;
for (int i = 1; i <= sum; i++)
{
if (i * (sum / i) == sum)
{
result += i;
}
}
return result;
}

Loopt binnen ~50ms
spoiler:
Dat kan zonder lus en if-statement: N * (N + 1) / 2; en is waarschijnlijk sneller.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 22:52

Lye

Ik moet toch eens leren om de input te bekijken voordat ik dingen ga bouwen. Nergens in de opdracht staat dat er maar één instruction pointer declaratie aanwezig is. Ik had een heel systeem er omheen gebouwd die onderscheid maakte tussen "register bound instruction pointers" en reguliere instruction pointers. Hierbij was dus mogelijk was om de instruction pointer tijdens runtime aan andere registers te hangen. AoC kennende leek mij dit ook niet zo'n vreemde interpretatie :P Echter zorgt dit er dus wel voor dat die IP declaraties een instructie kosten, waardoor het hele programma opschuift en voor vreemde antwoorden zorgt, jammer.

Deel 2 was weer flauw, ik weet nog niet of ik de instructiepatronen ga ontleden en een optimizer ga schrijven zodat het in ieder geval unit testable is, maar ik gok van niet.

Acties:
  • +1 Henk 'm!

  • ZieglerNichols
  • Registratie: Mei 2015
  • Niet online
Daanoz schreef op woensdag 19 december 2018 @ 09:07:
Ok, ik ben echt heel benieuwd hoe andere deel 2 oplossen...
spoiler:
Uiteindelijk heb ik de 'assembly' code naar mijn eigen taal omgeschreven, en een 'kleine' optimalisatie toegevoegd.... runtime: 0.5s 😎
Mijn code: https://pastebin.com/yxGbAVmw
spoiler:
Ik was vooral lang bezig om uit te vogelen wat de instructies probeerde te doen, maar toen ik erachter kwam dat ze de som van alle divisors van een waarde in mijn register probeerde te bepalen, was het in Matlab niet zo moeilijk meer: sum(divisors(R(2))) 8)7

Acties:
  • +1 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
Ik vind dit wel mooi, part 1 was een kleine aanpassing en runnen maar.
voor part twee eerst in excel alle instructies nalopen en uitschrijven, om vervolgen om te schrijven naar c#.

spoiler:
Na een extra break conditie toegevoegd te hebben was daar het antwoord.
Daarna voor de gein gekeken of de change ook kon implenteren in elfcode. Een extra jump voorbij de code, en er 8 extra instructies ingezet, en nu runt de elfcode in een kleine 2 minuten naar het juiste antwoord.

https://docs.google.com/s...CDSzjK9c/edit?usp=sharing

[ Voor 9% gewijzigd door DRaakje op 19-12-2018 20:54 ]


  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Ja, dag 20. Ik vind leuk.

Acties:
  • +1 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Ik was eerst heel leuk bezig met ook het maken van de map, maar toen bedacht ik me dat het zonde van de tijd is, want dat heb je helemaal niet nodig.
spoiler:
Ik heb alleen een list bijgehouden van de afstanden. Ook heb ik de posities "plat geslagen", want werken in een single array is een stuk sneller dan multidimensionaal


Code dag 20 PHP: https://pastebin.com/eK8Bxx8A

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Je moet dan alleen wel de dimensies gokken (of later bijstellen). Ik heb daarom maar een hashmappie gepakt.

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Klopt, ik begon ook veel groter dan waar ik nu sta.

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Dag 21 part 1 was snel, maar deel 2 moest ik wel even over nadenken. Uiteindelijk de elf code goed gelezen en kunnen vinden hoe het werkt.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
Ik vond de vraag van dag 20 ook wel leuk, maar het is weer zo'n dag waarbij de invoer veel simpeler is dan de probleemomschrijving suggereert. De meeste deelnemers hebben waarschijnlijk een te simplistisch algoritme geïmplementeerd dat toevallig het goede antwoord geeft.

Op zich is het niet ongebruikelijk bij Advent of Code dat je naar de invoer moet kijken, en het is ook niet echt bezwaarlijk als mensen hun code op de invoer aanpassen, maar ik heb de indruk dat de meeste deelnemers hier helemaal niet over nagedacht hebben, waardoor de "slimme" deelnemers een nadeel hebben ten opzichte van de "domme" deelnemers.

(Ja, ik ben me er van bewust hoe arrogant dat klinkt.)
Compileert niet?
bernardV schreef op donderdag 20 december 2018 @ 12:51:
Ik was eerst heel leuk bezig met ook het maken van de map, maar toen bedacht ik me dat het zonde van de tijd is, want dat heb je helemaal niet nodig.
In z'n algemeenheid is dat wel nodig, maar bij de testinvoer toevallig niet.
Voorbeeld van wat ik bedoel: dit geeft al het verkeerde antwoord voor een invoer als ^(N|E)(N|E)$ (uitvoer: 1, correct: 2).

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Soultaker schreef op vrijdag 21 december 2018 @ 12:49:
Ik vond de vraag van dag 20 ook wel leuk, maar het is weer zo'n dag waarbij de invoer veel simpeler is dan de probleemomschrijving suggereert. De meeste deelnemers hebben waarschijnlijk een te simplistisch algoritme geïmplementeerd dat toevallig het goede antwoord geeft.

Op zich is het niet ongebruikelijk bij Advent of Code dat je naar de invoer moet kijken, en het is ook niet echt bezwaarlijk als mensen hun code op de invoer aanpassen, maar ik heb de indruk dat de meeste deelnemers hier helemaal niet over nagedacht hebben, waardoor de "slimme" deelnemers een nadeel hebben ten opzichte van de "domme" deelnemers.
Ik heb de reddit discussie gezien en heb inderdaad ook de naïeve versie in elkaar geknutseld.
Nieuwe projecten starten tegewoordig met Rust edition 2018. Die gebruikt een meer geavanceerde borrow-checker die wat slimmer naar de lifetimes kan kijken. Een mooi voorbeeld wat vroeger niet kon is vec.push(vec.len()); Maar ook mijn gebruikte if let / else is zo'n voorbeeld. Om het te fixen zou je de return in de if-let moeten knutselen waardoor de eerste mutable borrow eindigt en de mutable weer mag.

Overigens kan ik https://play.rust-lang.org/ aanraden om even snel wat Rust code in te plakken. Daar kun je ook alleen de test suite runnen.

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Soultaker schreef op vrijdag 21 december 2018 @ 12:49:
Voorbeeld van wat ik bedoel: dit geeft al het verkeerde antwoord voor een invoer als ^(N|E)(N|E)$ (uitvoer: 1, correct: 2).
Je hebt helemaal gelijk. Mijn boardplot code (die ik niet afgemaakt heb) doet het wel goed, heb daarbij een node list gemaakt waarbij "(|)" children worden en je dus makkelijk door alle nodes kunt lopen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
veldsla schreef op vrijdag 21 december 2018 @ 13:29:
Nieuwe projecten starten tegewoordig met Rust edition 2018.
Aha. Met rustc --edition=2018 compileert het inderdaad. Interessant genoeg wordt het bestaan van de --edition flag niet vermeld in de uitvoer van rustc --help.
Overigens kan ik https://play.rust-lang.org/ aanraden om even snel wat Rust code in te plakken. Daar kun je ook alleen de test suite runnen.
Thanks. Die komt vast nog wel van pas.

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Rustig vandaag. Flink verkeerd gelezen waardoor ik dacht dat met
Otherwise, the region's geologic index is the result of multiplying the erosion levels of the regions at X-1,Y and X,Y-1.
De geologic index van x-1 en y-1 moest gaan vermenigvuldigen. Dat overflowed natuurlijk binnen de korste keren en dus zat ik te gluren naar het co-prime zijn van 16807 en 48271 en dat had er werkelijk helemaal niks mee te maken 8)7

Toen maar weer een bfs gemaakt. Again.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
veldsla schreef op zaterdag 22 december 2018 @ 19:28:
De geologic index van x-1 en y-1 moest gaan vermenigvuldigen. Dat overflowed natuurlijk binnen de korste keren en dus zat ik te gluren naar het co-prime zijn van 16807 en 48271 en dat had er werkelijk helemaal niks mee te maken 8)7
Deed ik eerst ook (lezen is moeilijk), maar als dat de bedoeling was had je de overflow kunnen voorkomen door die geologic index al modulo 20183 te berekenen. Dat verandert niets aan de erosion levels of de geo types.
Toen maar weer een bfs gemaakt. Again.
Dat is geen BFS, dat is Dijkstra's algoritme. ;)

M'n Python code lijkt er erg op, behalve dat de grootte van m'n kaart onbeperkt is, en ik wel gewoon een heap gebruik om de dichtstbijzijnde vertex te vinden.

(In jouw geval had je een max heap kunnen gebruiken, en je tuple met -time laten beginnen.)

[ Voor 18% gewijzigd door Soultaker op 22-12-2018 21:27 ]


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Ik heb ook mijn Dijkstra implementatie van dag 15 gepakt en elke stap in een list gezet met de penalty die een toolswitch kan hebben.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 10-06 19:09

kokx

WIN

Deel 1 is lekker makkelijk en snel. Deel 2 was even lastig, tot it tot een mooie ingeving kwam:

spoiler:
Bij deel 2 kun je een SMT-solver zoals z3 gebruiken. Waar je eigenlijk alle constraints invult. En je aan z3 verteld dat die ten eerste het aantal in-range punten moet maximizen en daarna de distance met origin moet minimizen. Dan berekend z3 je antwoord voor je.

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Soultaker schreef op zaterdag 22 december 2018 @ 21:22:
Dat is geen BFS, dat is Dijkstra's algoritme. ;)
Ach natuurlijk, de nodes met distances en stoppen als je er komt met een grotere. Dat is het nadeel van geen formele informatica opleiding te hebben gedaan. Dit soort dingen zijn er te weinig ingeramd. Oh well, het werkte en ik heb het zelf bedacht :9.

In tegenstelling tot vandaag :( . Ik heb toch echt van alles geprobeerd om de search space te verkleinen, maar uiteindelijk bleef voor mijn gevoel alleen een een of andere hill-climber over. Dus ik heb maar iets van Reddit gestolen. Schijnt niet eens voor elke input te werken :-)

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Leuke dag, een paar infinite loops gehad door attacks met '0' damage, maar opgelost.

Vanavond als de vriendin 'All you need' gaat kijken dag 23 part 2 proberen op te lossen.

//EDIT: Code dag 24 PHP: https://pastebin.com/NbMMubEn

[ Voor 14% gewijzigd door BernardV op 24-12-2018 12:59 ]


Acties:
  • +1 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Pff...veel werk.

En er vanuit gaande dat de laatste dag iets eenvoudigs is is 'veel werk' ook een beetje mijn conclusie voor dit jaar. Het heeft me meer tijd gekost dan ik er eigenlijk voor over heb. Volgend jaar op 1 dec denk ik er vast anders over, maar nu weet ik nog niet zo zeker of ik editie 2019 wel wil doen.

Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 18-05 11:44
Eens, omdat het soms veel werk, merk ik bij mezelf dat ik vaak vrij gehaast probeer de oplossing te maken, wat weer tot relatief slechtere code leidt, en vaak onnodige bugs.

Ik ben voor vandaag nog steeds niet uit deel 2, alle testen werken, en het procedeert ook een mooi antwoord, alleen het is incorrect... Helaas heb ik de rest van vandaag gewoon geen tijd om er nog serieus voor te gaan zitten.

Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 13-06 15:53
Het enige wat ik bij deel 2 tegenkwam was:
spoiler:
De deadlock situatie waarbij er niet genoeg schade werd gedaan om een unit te verliezen

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
veldsla schreef op maandag 24 december 2018 @ 16:32:
Het enige wat ik bij deel 2 tegenkwam was:
spoiler:
De deadlock situatie waarbij er niet genoeg schade werd gedaan om een unit te verliezen
Herkenbaar, dit is precies wat ik zei met de infinite loops (deadlocks) waar ik tegenaan liep.

//EDIT:
@Daanoz dat gehaaste ken ik, heb hetzelfde en dat werkt vaak tegen je..

[ Voor 10% gewijzigd door BernardV op 24-12-2018 18:40 ]


Acties:
  • +1 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Soultaker schreef op vrijdag 21 december 2018 @ 12:49:
Ik vond de vraag van dag 20 ook wel leuk, maar het is weer zo'n dag waarbij de invoer veel simpeler is dan de probleemomschrijving suggereert. De meeste deelnemers hebben waarschijnlijk een te simplistisch algoritme geïmplementeerd dat toevallig het goede antwoord geeft.

Op zich is het niet ongebruikelijk bij Advent of Code dat je naar de invoer moet kijken, en het is ook niet echt bezwaarlijk als mensen hun code op de invoer aanpassen, maar ik heb de indruk dat de meeste deelnemers hier helemaal niet over nagedacht hebben, waardoor de "slimme" deelnemers een nadeel hebben ten opzichte van de "domme" deelnemers.

(Ja, ik ben me er van bewust hoe arrogant dat klinkt.)


[...]

Compileert niet?


[...]

In z'n algemeenheid is dat wel nodig, maar bij de testinvoer toevallig niet.


[...]

Voorbeeld van wat ik bedoel: dit geeft al het verkeerde antwoord voor een invoer als ^(N|E)(N|E)$ (uitvoer: 1, correct: 2).
Ik wil hier nog wel even op reageren. Het is inderdaad behoorlijk arrogant om dat zo te stellen.
Dat mensen een probleem oplossen die ze voorgelegd krijgen in dit verhaal is logisch. Dat er (meestal) niet schone code wordt geschreven is ook logisch, want het is een "oorlog winnen" in tijd.
Als ik code die ik hier plaats zou afleveren bij mijn werkgever wordt hij ook niet vrolijk, maar het zijn wel oplossingen voor een probleem.
Je wint geen oorlog door lang na te denken, maar door snel te schakelen.
De meeste code die ik zie op reddit werkt ook niet voor mijn input, maar het zijn wel mensen die daardoor een goede positie hebben behaald. Het siert dus deze mensen om de input te bekijken en een probleem op te lossen voor die input.

Ik snap je idee, maar ik snap je reactie niet. Leef en laat leven.

Als laatste wens ik je (en iedereen natuurlijk) heel fijne dagen en tot snel.

Acties:
  • +1 Henk 'm!

  • ZieglerNichols
  • Registratie: Mei 2015
  • Niet online
bernardV schreef op maandag 24 december 2018 @ 18:55:
[...]

Ik wil hier nog wel even op reageren. Het is inderdaad behoorlijk arrogant om dat zo te stellen.
Dat mensen een probleem oplossen die ze voorgelegd krijgen in dit verhaal is logisch. Dat er (meestal) niet schone code wordt geschreven is ook logisch, want het is een "oorlog winnen" in tijd.
Als ik code die ik hier plaats zou afleveren bij mijn werkgever wordt hij ook niet vrolijk, maar het zijn wel oplossingen voor een probleem.
Je wint geen oorlog door lang na te denken, maar door snel te schakelen.
De meeste code die ik zie op reddit werkt ook niet voor mijn input, maar het zijn wel mensen die daardoor een goede positie hebben behaald. Het siert dus deze mensen om de input te bekijken en een probleem op te lossen voor die input.

Ik snap je idee, maar ik snap je reactie niet. Leef en laat leven.

Als laatste wens ik je (en iedereen natuurlijk) heel fijne dagen en tot snel.
Ik ben het volledig met @bernardV eens. AoC gaat niet over wie de beste programmeur is. Het gaat er slechts om wie als eerste, met zijn/haar input, tot het juiste antwoord kan komen. Dit kan, vooral in de eerste weken van december, met sub-optimale algoritmes, soms zelfs zonder code! Dat maakt AoC juist zo leuk. In de eerste paar weken zie je soms oplossingen die de beste programmeurs verslaan. In de laatste week vallen de meeste 'amateurs' wel af en blijven de mensen over die wel weten wat recursion, BFS of A* is. Zo blijft het geheel leuk voor een grotere groep.

Fijne kerst en nieuwjaar allemaal!

Acties:
  • +1 Henk 'm!

  • Reynouts
  • Registratie: Maart 2014
  • Niet online
Ik heb er dit jaar veel meer uren in moeten steken dan vorig jaar, maar heb wel alles op kunnen lossen binnen de dag dat ze online komen. Daarna besteed ik ook nog aandacht om mijn code wat netter te maken en alternatieven te bekijken.

Het kwam denk ik vooral door de vele details in de puzzels en de testcases die niet alles afdekken, dat het me meer tijd kostte. Ik heb het idee dat dat vorig jaar beter was. Ook was er na het implementeren van de details veel te bruteforcen, wat vorig jaar ook minder mogelijk was en je slimmere keuzes moest maken. Er waren veel soortgelijke simulatie puzzels, aantal vergelijkbare pathfinding problemen en de assembly achtige puzzels. Die herhaling maakte het wat minder motiverend.

Paar keer geprobeerd het global leaderboard te halen, maar dat bleek echt kansloos, er zijn zo veel mega snelle gasten! Ongelofelijk. Is iemand hier nog in de top 100 beland?

Toch knap hoe dit zo in elkaar gedraaid wordt door iemand in zijn vrije tijd. Ik was mijn vrije tijd afgelopen 25 dagen al kwijt door de puzzels op te lossen.

Op naar volgend jaar!

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 13-06 12:49
Reynouts schreef op dinsdag 25 december 2018 @ 22:59:
... Ongelofelijk. Is iemand hier nog in de top 100 beland?
Los van de tijd waarop de challenges vrij komen, 06:00 uur wanneer ik meestal nog op bed lig, is mijn beste positie 121 geloof ik 121/222 op dag 21. De top 100 heb ik niet kunnen halen.

[ Voor 3% gewijzigd door BernardV op 27-12-2018 21:30 ]


Acties:
  • +2 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
Dag 15 deel 2 klaar nu. Bleek een dead unit nog movement te blokkeren wat blijkbaar niet relevant was voor mijn deel 1.

Denk dat ik met Pasen wel klaar ben }:|

famous last words

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Alweer een hele tijd niet meer mee bezig geweest, maar ik zit nog even te pielen met 4, volgens mij zou hij moeten werken... maar hij valideert dus niet.
Op de test-set werkt hij namelijk wel...

Wil iemand met een zet de goede richting op geven?

De paste staat hier:
https://pastebin.com/bWDhqCie

spoiler:
Wat doe ik? load_input wordt aangeroepen vanuit een heel simpel python script
Ik sorteer de inputstrings
Die parse ik een voor een naar een "event" met daarin starttijd, eindtijd en guardnr
Die gooi ik in de events lijst
Daarna wordt solve1 aangeroepen...

ik vis de meest slapende guard eruit -> ik tel per event hoeveel minuten er geslapen wordt en dat noteer ik per guard.
dan filter ik de set events op events van deze guard
dan ga ik per minuut (0,60) tellen per event of deze guard sliep, de minuut met het meeste aantal events waarin wordt geslapen neem ik.

Ik kom met de demo-set netjes op 24 en 10 uit, maar in het echt werkt het dus niet.
Ik heb mogelijk de logica in minute_in_sleep wat te complex gemaakt, maar ik wil ook dat het goed gaat als iemand van 00:55 tot 01:05 slaapt ;). En dat werkt volgens mij wel.
Ik houd er expliciet geen rekening mee dat iemand van 00:10 tot 01:11 slaapt en dan 2x op minuut '10' slaapt. Dat lijkt ook niet in de inputset te gebeuren ;) .

Iemand een hint?

ik schrijf overigens niet per se code om zo compact mogelijk te werken, dat moge duidelijk zijn. Boeit me ook minder.

[ Voor 6% gewijzigd door Boudewijn op 15-01-2019 17:38 ]

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik zie zo snel geen fouten in je code, maar mijn Python is helaas niet zo goed. Je maakt het jezelf wel onnodig moeilijk want in de tekst staat letterlijk:
spoiler:
Because all asleep/awake times are during the midnight hour (00:00 - 00:59), only the minute portion (00 - 59) is relevant for those events.


Kan je anders je input posten en je tussen uitkomsten? Dan test ik het even met mijn programma om te kijken of je guard of minuut fout is.

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Ha @Daos tuurlijk :) . Alvast dank voor het meekijken en meedenken.

Mijn input staat hier:
https://pastebin.com/s3B5deLZ

Zowel de slaperigste guard als slaperigste minuut is 32. Dat wil zeggen dat de 32e minuut de slaperigste is . De 33e minuut heeft evenveel slaap gehad (39 minuten). Zal 32*33 eens als oplossing posten.

[ Voor 28% gewijzigd door Boudewijn op 16-01-2019 16:21 ]

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Mijn oplossing denk ook dat minuut 32 de minuut is waar de guard die het meeste slaapt het vaakst op slaapt.

Mijn oplossing, globaal:
spoiler:
- parse de input naar een struct met alle info die relevant is en sorteer die
- Creeer kalender van 12 (naja, 13, want schonere code imo) maanden en 31 (naja, 32) dagen waarin een lijst van diensten kan worden opgeslagen
- Parse de input om de kalenderlijsten te vullen. Hierbij houd ik geen rekening met de uren. hierdoor is het makkelijk om diensten op te vangen die voor 00 uur beginnen
- Ga over de kalender heen en tel voor alle guards hoeveel ze op welke minuut slapen
- Gebruik het resultaat hiervan om te bekijken welke minuut gezamelijk het meest beslapen word en welke guard daar het meeste slaapt
Vervolgens heb je volgens mij alle data die je nodig hebt.


Ik denk overigens dat je met 39 minuten aan de lage kant zit met je meest geslapen minuut. Die van mij zit over de 500 heen. En ik weet niet precies wat je bedoeld met slaperigste guard, maar je hebt geen guard met ID 32, welk 2 in de 3200 maar dat is dus ook niet uniek.

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Dank voor je opmerkingen @Gropah , je hebt me een goeie bump gegeven.

Kijk daar gaat het al fout :D.

last_guard = line[26:28]


Ik doe de aanname dat een guard een id heeft van 2 characters. Faal.
Dank, ik ga dit morgen even fixen.

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

En bam dat was de oplossing, de minuten kloppen. Daadwerkelijk dit vervangen:
code:
1
last_guard = line[26:28]

Door:

code:
1
                last_guard = line[26:].split()[0]

En toen het veel hogere ID van de meest-slapende guard vermenigvuldigd met 32 ....

Dank @Daos en @Gropah

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Boudewijn schreef op woensdag 16 januari 2019 @ 17:10:
Dank voor je opmerkingen @Gropah , je hebt me een goeie bump gegeven.

Kijk daar gaat het al fout :D.

last_guard = line[26:28]


Ik doe de aanname dat een guard een id heeft van 2 characters. Faal.
Dank, ik ga dit morgen even fixen.
Als je dat doet zou ik de opdracht ook nog even goed lezen, want het antwoord word berekend oa door een vermeningvuldiging met het guard ID. Als je die weggooit, tja... dan kom je ook niet bij het goede antwoord uit :P

edit: en toen was de oplossing al gepost voor mijn suggestie :X

[ Voor 5% gewijzigd door Gropah op 16-01-2019 17:14 ]


Acties:
  • 0 Henk 'm!

  • Reynouts
  • Registratie: Maart 2014
  • Niet online
Boudewijn schreef op woensdag 16 januari 2019 @ 17:10:
Dank voor je opmerkingen @Gropah , je hebt me een goeie bump gegeven.

Kijk daar gaat het al fout :D.

last_guard = line[26:28]


Ik doe de aanname dat een guard een id heeft van 2 characters. Faal.
Dank, ik ga dit morgen even fixen.
Ik was net bezig met je code en vond dezelfde fout en hoopte je van dienst te kunnen zijn. Maar helaas.. net te laat.
Met de aanpassing vindt jouw code in elk geval de meest luie guard, ook met mijn input ;-)

Wat ik in mijn eigen oplossing gedaan heb, is de input te parsen naar een dictionary van guardnumber als key en een list van minutes op welke de guard sliep. Deze kan je sorteren, je kan de most_frequent_minute er makkelijk uithalen met de module Counter van collections, etc. Dat is net een andere aanpak dan alle events opslaan met een guard als property. Uiteindelijk zal er hetzelfde uitkomen.

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Hoe doen jullie bij 10 de detectie van of er tekst wordt afgebeeld? Ik heb nu een script gemaakt dat '.' en 'X' plot, dat schiet echt niet op om te bekijken. Ik zat te overwegen om losse pixels te gaan outputten... maar dat is alsnog een resolutie van 100.000*100.000 pixels.

Mijn lompe approach is nu alles outputten voor de eerste 100 stappen en dan te greppen op minstens 4 'X'en achter elkaar. Maar dat klinkt eigenlijk ook niet als een heel briljant plan :X.


offtopic:
Had eerst het ding stateful geschreven, dat werkt prima op de testcode van 20*20 ofzo, maar niet op de echte code. Nu is het gewoon wegschrijven en vergeten. werkt veel beter :P . Alleen hoe slim de output bekijken...



offtopic:
Offtopic2: damn ik merk wel dat ik al een tijd minder technisch bezig ben geweest zeg :X.

[ Voor 22% gewijzigd door Boudewijn op 20-01-2019 13:37 ]

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Boudewijn schreef op zondag 20 januari 2019 @ 13:28:
Hoe doen jullie bij 10 de detectie van of er tekst wordt afgebeeld? Ik heb nu een script gemaakt dat '.' en 'X' plot, dat schiet echt niet op om te bekijken. Ik zat te overwegen om losse pixels te gaan outputten... maar dat is alsnog een resolutie van 100.000*100.000 pixels.


offtopic:
Had eerst het ding stateful geschreven, dat werkt prima op de testcode van 20*20 ofzo, maar niet op de echte code. Nu is het gewoon wegschrijven en vergeten. werkt veel beter :P . Alleen hoe slim de output bekijken...
spoiler:
Ik heb een aantal aannames gedaan waaruit ik dacht te kunnen bepalen wanneer er iets stond en heb vervolgens de oplossing gelezen.

Ja, ik had ook string literals kunnen comparen, of een OCR kunnen maken, maar dit was makkelijker.

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

@Gropah
spoiler:
Bedoel je daarmee zoiets als dat je hebt zitten greppen? (zoals ik in de edit hierboven zelf ook al suggereer)

i3 + moederbord + geheugen kopen?


Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Boudewijn schreef op zondag 20 januari 2019 @ 13:38:
@Gropah
spoiler:
Bedoel je daarmee zoiets als dat je hebt zitten greppen? (zoals ik in de edit hierboven zelf ook al suggereer)
spoiler:
Ik heb losse pixels geprint. ' ' voor geen ster, 'x' voor wel een ster.

Ik heb de aanname gemaakt dat de bounding box van de sterren het kleinste is wanneer het bericht er staat. Ik laat het programma lopen zolang de bounding box kleiner word en zodra hij groter word stopt het en word de staat van het programma bij de stap met de kleinste bounding box afgedrukt. De code is klein genoeg om in een terminal afgedrukt te worden en anders had ik het opgeslagen in een txt, geopend in een texteditor en de view kleiner gemaakt. In beide gevallen kun je makkelijk zelf de code uitlezen

[ Voor 4% gewijzigd door Gropah op 20-01-2019 13:41 ]


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Ah dat is best een slimme aanpak. Dank voor de tip :).

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Ik zit weer even vast, nu bij 14b. Als iemand een goeie hint wil geven... :)
Het stomme is dat de testcases goed werken, dus je zou dan een foutje verwachten met indexes/lengtes etc.

Het interessante is dat als ik op mijn 'winnend' getal de laatste 100 karakters print ik inderdaad mijn gezochte string voor het eerst vind.
Dat is dan ook '290431' (mijn puzzle input)


Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class ChocolateMachine():
    def __init__(self):
        self.elf_locations = [0, 1]
        self.recipes = [3, 7]
        self.cycles = 0


    def cycle(self):
        combination = self.recipes[self.elf_locations[0]] + self.recipes[self.elf_locations[1]]
        if combination >= 10:
            new_recipe1, new_recipe2 = int(str(combination)[0]), int(str(combination)[1])
            self.recipes.append(new_recipe1)
            self.recipes.append(new_recipe2)
        else:
            self.recipes.append(combination)

        if self.cycles >= 1:
            self.elf_locations[0] = (self.elf_locations[0] + 1 + self.recipes[self.elf_locations[0]]) % (
                len(self.recipes))
            self.elf_locations[1] = (self.elf_locations[1] + 1 + self.recipes[self.elf_locations[1]]) % (
                len(self.recipes))

        self.cycles += 1



def solve14b():
    c = ChocolateMachine()
    #pattern = [5,1,5,8,9]
    #pattern = [0,1,2,4,5]
    #pattern = [9,2,5,1,0]
    #pattern = [5,9,4,1,4]
    pattern = [2,9,0,4,3,1]
    while len(c.recipes) < len(pattern):
        c.cycle()

    while True:
        c.cycle()
        if c.recipes[-len(pattern):] == pattern:
            print(c.recipes[-100:])
            print(len(c.recipes[:-len(pattern)]))
            break

solve14b()


De hele code staat hier mocht iemand het interessant vinden:
https://pastebin.com/ZfeAWigH

De output van dat script is:
code:
1
2
3
johns-MacBook-Pro:14 john$ pypy3 14.py
[1, 1, 8, 4, 7, 1, 1, 0, 3, 3, 0, 4, 1, 1, 3, 3, 5, 9, 8, 1, 2, 3, 8, 5, 1, 1, 2, 4, 8, 1, 5, 1, 2, 2, 1, 0, 1, 0, 7, 5, 2, 2, 3, 3, 5, 1, 2, 2, 2, 8, 5, 4, 1, 1, 0, 3, 1, 3, 1, 3, 1, 3, 2, 7, 9, 5, 1, 0, 3, 5, 3, 1, 0, 2, 1, 6, 1, 2, 6, 1, 2, 7, 3, 5, 1, 0, 4, 2, 1, 4, 7, 3, 8, 1, 2, 9, 0, 4, 3, 1]
20696327

[ Voor 9% gewijzigd door Boudewijn op 25-01-2019 17:26 ]

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 04-06 10:55
Ik zit weer even vast, nu bij 14b. Als iemand een goeie hint wil geven... :)
Je vergeet rekening te houden dat er per cycle meer dan 1 recept kan worden toegevoegd.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
@Soultaker Ik zit naar je oplossing van dag 23 pt 2 te kijken (omdat ik geen idee heb hoe ik dit zou moeten implementeren als er voor de volgende ijstijd nog een antwoord uit moet komen) maar ik ben volledig baffled: Wat is het achterliggende idee van je aanpak?


Ik sta wederom versteld van de schoonheid van je code....held :Y)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Klaasvaak schreef op vrijdag 25 januari 2019 @ 19:03:
[...]
Je vergeet rekening te houden dat er per cycle meer dan 1 recept kan worden toegevoegd.
Dit is inderdaad wat er bij @Boudewijn fout gaat als ik zo snel kijk. Heb dezelfde input als hem en scheelt bijna 2.5%

Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:20
farlane schreef op zondag 17 februari 2019 @ 22:37:
@Soultaker Ik zit naar je oplossing van dag 23 pt 2 te kijken (omdat ik geen idee heb hoe ik dit zou moeten implementeren als er voor de volgende ijstijd nog een antwoord uit moet komen) maar ik ben volledig baffled: Wat is het achterliggende idee van je aanpak?
Dit is de enige oplossing die ik niet zelf bedacht heb; de implementatie is gebaseerd op het idee dat hier wordt uitgelegd: https://raw.githack.com/y...ter/aoc2018day23/vis.html

(Ik kan die aanpak in meer detail toelichten als je nog vragen hebt.)

Mijn code verschilt in een implementatiedetail: in plaats van elke kubus in 8 delen te splitsen, zoals op bovenstaande pagina besproken wordt, gebruik ik een balkvormige regio (dus niet per se een kubus: de hoogte, breedte en diepte kunnen verschillen) en splits ik die steeds in tweeën, over de langste zijde van de balk.

Dus als je begint met een balk van 10x10x10, splits je die eerst over de eerste dimensie in twee delen van 5x10x10. Elk deel daarvan kun je dan splitsen over de tweede dimensie in 5x5x10, enzovoorts. Een balk als 5x5x5 wordt gesplitst in helften van 2x5x5 and 3x5x5 (ongelijke afmetingen vanwege afronden). `k` op regel 43 is de dimensie waarop gesplitst wordt.

Het principe is verder hetzelfde maar dit leek me eenvoudiger te implementeren. Je kunt dan gewoon de bounding box van de bots als begingebied nemen.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
Soultaker schreef op donderdag 21 februari 2019 @ 18:58:
[...]

Dit is de enige oplossing die ik niet zelf bedacht heb; de implementatie is gebaseerd op het idee dat hier wordt uitgelegd: https://raw.githack.com/y...ter/aoc2018day23/vis.html

(Ik kan die aanpak in meer detail toelichten als je nog vragen hebt.)

Mijn code verschilt in een implementatiedetail: in plaats van elke kubus in 8 delen te splitsen, zoals op bovenstaande pagina besproken wordt, gebruik ik een balkvormige regio (dus niet per se een kubus: de hoogte, breedte en diepte kunnen verschillen) en splits ik die steeds in tweeën, over de langste zijde van de balk.

Dus als je begint met een balk van 10x10x10, splits je die eerst over de eerste dimensie in twee delen van 5x10x10. Elk deel daarvan kun je dan splitsen over de tweede dimensie in 5x5x10, enzovoorts. Een balk als 5x5x5 wordt gesplitst in helften van 2x5x5 and 3x5x5 (ongelijke afmetingen vanwege afronden). `k` op regel 43 is de dimensie waarop gesplitst wordt.

Het principe is verder hetzelfde maar dit leek me eenvoudiger te implementeren. Je kunt dan gewoon de bounding box van de bots als begingebied nemen.
Ah ok dat verduidelijkt een boel. Hier kan ik wat mee .. d:)b

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • +2 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
Soultaker schreef op donderdag 21 februari 2019 @ 18:58:
[...]
Dit is de enige oplossing die ik niet zelf bedacht heb; de implementatie is gebaseerd op het idee dat hier wordt uitgelegd: https://raw.githack.com/y...ter/aoc2018day23/vis.html
Pfew, heb 'em klaar, maar voel me wel een beetje vies omdat ik de online solver die je (indirect) linkte heb gebruikt om te checken waar ik heen moest. Nogmaals bedankt, ik slaap weer rustig vannacht ... :z

Jouw versie lijkt voor mijn input niet het correcte resultaat op te leveren trouwens....geen idee wat er fout gaat.
Tab weggevallen bij copy-paste.... :X

Nou in ieder geval gered voor pasen, ik ben tevreden. (Valt me op dat maar een klein deel van de tweakers die er aan beginnen het ook afmaken... O-) )

[ Voor 12% gewijzigd door farlane op 26-02-2019 00:38 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • +1 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

farlane schreef op dinsdag 26 februari 2019 @ 00:14:


Nou in ieder geval gered voor pasen, ik ben tevreden. (Valt me op dat maar een klein deel van de tweakers die er aan beginnen het ook afmaken... O-) )
Hehe ik ben er nog mee bezig maar doe het er heel erg bij, voor de lol.
Waardeer dan ook des te meer de hulp van mensen als Gropah enzo. Heb bij 2016 nu 27 sterren bij elkaar, ga die eerst afronden en dan weer verder naar 2017 of 2018.

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

farlane schreef op dinsdag 26 februari 2019 @ 00:14:
[...] (Valt me op dat maar een klein deel van de tweakers die er aan beginnen het ook afmaken... O-) )
Ik was rond opdracht 15 er wel een beetje klaar mee. Veel programmeerwerk, zonder dat het veel denk werk was. En toen ik eenmaal die dag had geskipped ben ik niet meer verder gegaan, omdat ladderanxiety en drukte met andere dingen.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 12-06 15:40
farlane schreef op dinsdag 26 februari 2019 @ 00:14:
(Valt me op dat maar een klein deel van de tweakers die er aan beginnen het ook afmaken... O-) )
Ben best een eind gekomen maar vond het eigenlijk op een gegeven moment te frustrerend worden. De hoeveelheid tijd die ik kwijt was t.o.v. het plezier dat ik er aan had, was niet meer in balans. Wil het nog wel 'es afmaken, maar sommige opdrachten vond ik echt ruk.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 18:48
Hydra schreef op dinsdag 5 maart 2019 @ 09:55:
[...]


Ben best een eind gekomen maar vond het eigenlijk op een gegeven moment te frustrerend worden. De hoeveelheid tijd die ik kwijt was t.o.v. het plezier dat ik er aan had, was niet meer in balans. Wil het nog wel 'es afmaken, maar sommige opdrachten vond ik echt ruk.
Same, heb voorgaande jaren helemaal gedaan, maar afgelopen jaar bij dag 15 oid afgehaakt, kostte gewoon teveel tijd.

A software developer is someone who looks both left and right when crossing a one-way street.


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Hydra schreef op dinsdag 5 maart 2019 @ 09:55:
[...]


Ben best een eind gekomen maar vond het eigenlijk op een gegeven moment te frustrerend worden. De hoeveelheid tijd die ik kwijt was t.o.v. het plezier dat ik er aan had, was niet meer in balans. Wil het nog wel 'es afmaken, maar sommige opdrachten vond ik echt ruk.
Dat, sommige dingen zijn iets meer werk dan even een paar uurtjes. Denk aan zoiets: https://adventofcode.com/2018/day/17

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 01:04
Boudewijn schreef op dinsdag 5 maart 2019 @ 17:39:
[...]

Dat, sommige dingen zijn iets meer werk dan even een paar uurtjes. Denk aan zoiets: https://adventofcode.com/2018/day/17
Ik vond 'em wel cool. Het resultaat printen in ASCII art maakt je helemaal een baas :P

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1 2 3 4 5 Laatste