Advent of Code 2023 Vorige deel Overzicht Laatste deel

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

Pagina: 1 ... 5 ... 11 Laatste
Acties:

Acties:
  • +3 Henk 'm!

  • Joran
  • Registratie: December 2005
  • Laatst online: 10-09 16:57

Joran

<3 natalee

Geinig, ik zag dit topic toevallig en ben er ook aan begonnen (beetje laat maar ja).
Hopelijk kan ik bijkomen en het dan volhouden.


Mijn repo: https://github.com/Jorann/AdventOfCode2023
In Node.js TypeScript

Send me your gameboys


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
BernardV schreef op donderdag 7 december 2023 @ 15:54:
spoiler:
Ik geef de hands geen flags als threeOfAKind, FullHouse, pair etc.

Als je de occurrences hebt, deze vermenigvuldigd met zichzelf en dan de som van de hand pakt kun je goed sorteren.

8822A -> 2 2 1 -> 2*2 2*2 1*1 -> 4 4 1 -> 9
18222 -> 1 1 3 -> 1*1 1*1 3*3 -> 1 1 9 -> 11

etc..
Ik doe iets soortelijk, maar dan leesbaarder.
spoiler:
Ik tel per kaart het aantal occurrences. Dan loop ik over deze set en sommeer 100^(occurrences). Dus
5 dezelfde is 10000000000,
4 dezelfde is 00100000000,
full house is 00000101000, etc.
Voor de ties zet ik alle volgnummers van de kaarten achter elkaar, dus AA245 wordt 14020405 (eigenlijk doe ik weer een 100^).
Dit samen geeft een getal (of string) die ik sorteer.

Strikt gezien kan de eerste helft in base 3 (want max twee pairs) en de tweede helft in base 14 (want 14 kaarten). Maar in base honderd kan je zien wat er gebeurt.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10-09 18:35

TrailBlazer

Karnemelk FTW

KabouterSuper schreef op donderdag 7 december 2023 @ 17:06:
[...]

Ik doe iets soortelijk, maar dan leesbaarder.
spoiler:
Ik tel per kaart het aantal occurrences. Dan loop ik over deze set en sommeer 100^(occurrences). Dus
5 dezelfde is 10000000000,
4 dezelfde is 00100000000,
full house is 00000101000, etc.
Voor de ties zet ik alle volgnummers van de kaarten achter elkaar, dus AA245 wordt 14020405 (eigenlijk doe ik weer een 100^).
Dit samen geeft een getal (of string) die ik sorteer.

Strikt gezien kan de eerste helft in base 3 (want max twee pairs) en de tweede helft in base 14 (want 14 kaarten). Maar in base honderd kan je zien wat er gebeurt.
spoiler:
Ik kwam eerder deze week ergens de Python Counter tegen uit collections en dit leek me wel handig om te gebruiken. Ik tel eerst het aantal kaarten per type. Daarna kan op basis van het aantal kaarten per type bepalen of het 5 dezelfde, 4 of a kind etc is. Vervolgens sorteer ik per type en plak daarna al deze types aan elkaar. Er is geen enkele reden om bij het sorteren te kijken of de waarde van een 4 of a kind beter is dan triple.

Acties:
  • +1 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
@TrailBlazer @KabouterSuper @BernardV
Nog een manier om de categorie vast te stellen in c#:
https://controlc.com/f2f8...toolbar=true&linenum=true

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

P_Tingen schreef op donderdag 7 december 2023 @ 10:10:
Pff, heel wat regels nodig gehad (~200) waarmee het eigenlijk een beetje te veel op werk gaat lijken. Maar goed, toch weer opgelost en eigenlijk ook best elegant. Al kijk ik met verbazing (en afgunst) naar Python oplossingen met 10-20 regels. Hoe dan??
Ik had eerst 154 regels Java. Dit heb ik teruggeddrongen naar 97 door een handige representatie van een set kaarten te maken, die gewoon alfabetisch te sorteren is. Er zijn dan geen ifjes meer nodig om aantallen paren te tellen en dat soort dingen.

[ Voor 4% gewijzigd door Varienaja op 07-12-2023 18:05 ]

Siditamentis astuentis pactum.


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Met alle respect, dat is veul meer code dan ik heb (en het kan nog korter, mooier, pythonischer en sneller)
spoiler:
def rank(cards, part2=False):
C=Counter(list(cards))
if part2:
C=processJ(C)
rank=990*100**5
for c in C:
rank+=100**C[c]

rank=(rank*100+99)*(100**5)
for i,c in enumerate(list(cards)[::-1]):
rank+=(100**i)*card2num(c,part2)
return rank

[ Voor 3% gewijzigd door KabouterSuper op 07-12-2023 18:28 ]

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 21:35
* WernerL is zoals voorgaande dagen weer voor de meest straightforward oplossing gegaan. Oplossing voor beide delen komt eruit in 12milliseconden dus goed genoeg. :+

https://github.com/WernerLDev/AOC2023/blob/main/day7/day7.ts

Voor deel 2 kon ik niet echt een elegante oplossing bedenken behalve met een rits if-else statements iedere mogelijkheid gaan checken. Vast dat iemand hier daar wel iets beters op gevonden heeft dus zometeen maar eens andere oplossingen bekijken.

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • +1 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10-09 18:35

TrailBlazer

Karnemelk FTW

@WernerL
spoiler:
als je bij het kaarttype waarvan er de meest zijn de jokers bijtelt zit je altijd goed.

Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Optimize doorgevoerd, nu 180µs, en 36ms op de set van @Soultaker
spoiler:
Eerst telde ik per kaart het aantal, dus van een array van 5 card indices ging ik naar een array van 13 counts, en daar pakte ik de maximum en de op-een-na-max uit, vervolgens deed ik een match op (5, _), (4, _), (3, 2), (2, 2), etc. voor een rank van 0 t/m 6.

Die array van 13 counts heb ik nog steeds, maar daarnaast heb ik nog een totale rankcounter. Elke keer als ik een van de counts ophoog, dan tel ik de waarde van die count bij de rankcounter.

In pseudo-code:
for c in cards {
  rank += ++counts[c];
}


Bij 5-of-a-kind krijg je 1+2+3+4+5 = 15
Bij 4-of-a-kind krijg je 1+2+3+4+1 = 11
Full house: 1+2+3+1+2 = 9
3-of-a-kind: 1+2+3+1+1 = 8
Two pair: 1+2+1+2+1 = 7
Pair: 1+2+1+1+1 = 6
High card: 1+1+1+1+1 = 5

En net als voorheen vermenigvuldig ik de rank met 135 en dat tel ik bij de waarde van de hand op, wat feitelijk een base-13 representatie van de hand is.

In het geval van jokers hou ik daarnaast nog bij wat de maximale count is voor een niet-joker. Dan vermenigvuldig ik het aantal jokers met de maximale count en tel ik dat bij de rank op. Dan krijg je uiteindelijk dezelfde resultaten als hierboven.

Bijvoorbeeld: 333JJ
1+2+3+1+2 = 9
2 jokers, 3 max count, dus 9+2*3 = 15: 5 of a kind

2JJJ7
1+1+2+3+1 = 8
3 jokers, 1 max count, dus 8+1*3 = 11: 4 of a kind

[ Voor 17% gewijzigd door .oisyn op 07-12-2023 21:54 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Pfff.. vanochtend voor het werk nog snel geprobeerd deel 1 te doen, maar toen had ik over de sortering van gelijke ranking van kaarten heen gelezen. En na het werk moest ik haasten om bij een schoolcollege te zijn, dus nu eindelijk tijd gehad om de oplossing uit te werken. :O

Gezien de opmerkingen in de thread zijn er nog allerlei optimalisaties te doen, maar het draait prima binnen ene paar milliseconden, dus ik laat de code voor wat het is.

https://github.com/realma...de.Y2023/Solvers/Day07.cs

There's no place like 127.0.0.1


Acties:
  • +2 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 20:54
Afgelopen dagen druk geweest, vooral in de nachten.. Kom dan niet echt aan lekker coden toe..
En als ik wel even tijd heb, geldt vooral het volgende:
Afbeeldingslocatie: https://tweakers.net/i/-W2LfsCIYCaLaKPtdlQo4LY9KrI=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/F41rjNJodRkcPRQD2amWKWIY.png?f=user_large

herkenbaar?
lekker laten lopen/loopen en ondertussen koffie halen :+

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

Deel 1 was goed te doen. Deel 2 was wat meer werk
spoiler:
Type bepalen per hand en dan daarop sorteren. Bij gelijk de index bepalen van de kaarten en daarop sorteren. Bij deel 2 een bak met ifjes extra om zo het juiste type te bepalen.
Voor nu goed genoeg. Deel 2 is "traag" (lees 2 x keer traag als deel 1, maar 1ms is prima wat mij betreft).

"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


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 18:50
spoiler:
Ik tel eerst hoe vaak elk getal voorkomt.
Dan per getal n*n zodat ik een getal heb waarmee ik de eerste sortering kan doen.
Pas bij gelijke waardes ga ik de kaarten los af.
Er zit namelijk ook geen verschil in tussen de waardes van de kaarten waarmee je wint. Een Pair K is niet groter dan een Pair 4.

Ik kan dat doen wanneer ik de Hand aanmaak, maar dat zit nu in de compare functie.
Dus die wordt bij elke vergelijking uitgevoerd ipv eenmalig.
Soit. Het is niet bedrijfskritisch. :)

[ Voor 14% gewijzigd door SPee op 07-12-2023 23:43 ]

let the past be the past.


Acties:
  • 0 Henk 'm!

  • Lisper
  • Registratie: September 2015
  • Laatst online: 05-09 20:26

Acties:
  • 0 Henk 'm!

  • CrossProd
  • Registratie: November 2014
  • Laatst online: 08-09 16:33
Dag 8 in Swift. Doet er ~30 ms over.

spoiler:
Gelukkig was ik al bekend met LCM door vorige jaren anders had dit me veel meer tijd gekost.

[ Voor 9% gewijzigd door CrossProd op 08-12-2023 09:16 ]


Acties:
  • +1 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Dag 8 deed me denken aan dag 12 van 2019 :-P

Daardoor ben ik vlug op het goede idee gekomen.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:41

Dido

heforshe

Varienaja schreef op vrijdag 8 december 2023 @ 06:56:
Daardoor ben ik vlug op het goede idee gekomen.
Ik had geen deja vu, daarom duurde het bij mij iets langer. Maar een keer dat ik hem doorhad ging het ook vrij vlotjes.
Ik had niet eerst 10 minuten moeten wachten om te kijken of brute-force misschien per ongeluk in een enigszins acceptabele tijd een antwoord gaf |:(

* Dido zou beter moeten weten bij AoC :X

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
Day 8 in Python

spoiler:
En daar issie dan, de LCM/GCD puzzel van AoC dit jaar

Acties:
  • +1 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
Dido schreef op vrijdag 8 december 2023 @ 07:11:
[...]

Ik had geen deja vu, daarom duurde het bij mij iets langer. Maar een keer dat ik hem doorhad ging het ook vrij vlotjes.
Ik had niet eerst 10 minuten moeten wachten om te kijken of brute-force misschien per ongeluk in een enigszins acceptabele tijd een antwoord gaf |:(

* Dido zou beter moeten weten bij AoC :X
Brute force even aangezet, vaatwasser gaan uitruimen, koffie gepakt en toen ik terugkwam maar besloten dat dit waarschijnlijk niet ging werken. :P

spoiler:
Jetbrains heeft twee dagen geleden ook hun AI assistant gereleased en die heb ik mijn code even laten uitleggen. Dat doet ie best goed:

This Kotlin code defines a class called Instruction which represents an instruction set of some kind. It appears to be related to navigating a network of nodes, as represented by the Node data class which includes a key and references to a left and right node. The Instruction class itself has a directions string, and a map representing the network of nodes.

The Instruction class contains a companion object called Factory which provides two key methods for creating an Instruction object:
The create method takes a list of Strings as input and constructs an Instruction object from it. It uses the first String (trimmed of whitespace) as the directions string and then constructs a nodes network from the remaining strings in the list.
The getNode method, which is a helper method used by create. It takes a String and splits it into parts to create a Node object.

The Instruction class also includes several methods to solve certain problems:
The solve1 method navigates the nodes network starting from a node labeled "AAA". It keeps going left or right depending on the current step and the directions string until it hits a node labeled "ZZZ". It then returns the number of steps it took to reach the target node.

The solve2 method calculates the least common multiple (LCM) of steps needed to reach node from any starting node that ends with 'A' to any target node that ends with 'Z'. The lowestCommonMultiplier overloads facilitate this calculation.

The getStepsForNode is a common helper function used in both solve1 and solve2 to move through the nodes and reach the target based on the provided lambda function.


Als je wilt mierenneuken dan wordt de lambda functie parameter in getStepsForNode niet gebruikt om het doel te bereiken, maar om te bepalen of het doel bereikt is. Maar goed, een kniesoor die daar op let.


Dag 8 in Kotlin

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Varienaja schreef op vrijdag 8 december 2023 @ 06:56:
Dag 8 deed me denken aan dag 12 van 2019 :-P

Daardoor ben ik vlug op het goede idee gekomen.
Yep, dat had ik ook gelijk door.
spoiler:
Maar ik was even bang dat het iets ingewikkelder was, omdat er meerdere Z-nodes zijn. Het had kunnen zijn dat je van de ene Z-node naar de andere hopt, dat het even duurt voordat je in een loop komt of dat er iets vervelend in de map zit. Voorbeeld:

Ghost 1 begint in 11A en gaat in 1 stap naar 11Z
Ghost 2 begint in 22A en gaat in 2 stappen naar 11Z (via 22B oid)
11Z gaat naar 11B, naar 11C, naar 11D, naar 22Z, naar 22B naar 11Z

Omdat ze achter elkaar aanlopen, gaat dit sowieso fout. Maar zelfs als dat niet zo was, duurt het even voordat de ghosts in de loop zitten (11A, 22A en 22B zitten niet in de loop).
En tenslotte komen de ghosts om en om na 2 en 4 stappen op een Z.

When life gives you lemons, start a battery factory


Acties:
  • +3 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lol @ chrome
Afbeeldingslocatie: https://tweakers.net/i/20NcnbfcZRUUiuLhDX4gzv6xQ6U=/800x/filters:strip_icc():strip_exif()/f/image/XhGVlAInKFsOhB1cw22o2WTx.jpg?f=fotoalbum_large

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
_O-

De eerlijkheid gebied te zeggen dat Welsh ook wel zo ongeveer leest als deze set aan nodes. :P

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Litpho
  • Registratie: Juni 2003
  • Laatst online: 22-08 10:47
DIt had ik vermoedelijk zonder eerdere AoC ervaring niet zo snel op kunnen lossen. Ongeoptimaliseerd 2.5ms in Rust, I'll take it.

Acties:
  • +1 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-09 15:20
Voor mij ook door mijn eerdere ervaring snel de gelijkenis gezien met eerdere puzzels. Even een quick search in mijn codebase gedaan voor het algoritme, snel gevonden, en die maar in mijn library gestopt aangezien het een terugkerend probleem is. :)

Wel eerst even brute force geprobeerd in de ijdele hoop dat dat snel een oplossing zou geven. :P

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Eerst snel geprobeerd of brute-force werkt, maar het moest toch echt anders opgelost worden.

spoiler:
Toevallig recentelijk ggd/kgv gehad tijdens de studie, meteen maar in een library gegooid, AoC kennende wordt het nog wel vaker gebruikt in andere jaren.

https://github.com/realma...de.Y2023/Solvers/Day08.cs

There's no place like 127.0.0.1


Acties:
  • +1 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 22:22

P_Tingen

omdat het KAN

Varienaja schreef op vrijdag 8 december 2023 @ 06:56:
Dag 8 deed me denken aan dag 12 van 2019 :-P

Daardoor ben ik vlug op het goede idee gekomen.
Ik had hem niet herkend en zat al te wachten tot hij klaar was met rekenen. Toen het na een seconde of 10 nog niet klaar was had ik al het vermoeden dat brute force niet de weg te gaan was.

spoiler:
en terecht, want mijn oplossing voor deel 2 was 10.371.555.451.871 en met zo'n 10.000 iteraties per seconde zou ik nog iets van 32 jaar op het antwoord hebben moeten wachten.

Nu kon ik mijn gcd en lcm functies van 2019 weer hergebruiken en is hij in 400 ms klaar

Code in Progress 4GL:
https://github.com/patric...ter/2023/Day-08/day-08b.p

... en gaat over tot de orde van de dag


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Even voor mijn eigen sanity, maar als je voor stap 2 slechts een enkele node volgt (ipv alles wat eindigt op A tegelijk), dan zou je toch wel binnen een redelijke tijd een eindpunt moeten vinden, toch?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
.oisyn schreef op vrijdag 8 december 2023 @ 09:56:
Even voor mijn eigen sanity, maar als je voor stap 2 slechts een enkele node volgt (ipv alles wat eindigt op A tegelijk), dan zou je toch wel binnen een redelijke tijd een eindpunt moeten vinden, toch?
ja. ;)

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja dat was mijn gedachte ook. Dus ik heb een bug maar ik zie 'm niet 8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
.oisyn schreef op vrijdag 8 december 2023 @ 09:58:
[...]


Ja dat was mijn gedachte ook. Dus ik heb een bug maar ik zie 'm niet 8)7
Voor jouw beeld, in Kotlin heb ik de gehele oplossing in 32.9ms.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
.oisyn schreef op vrijdag 8 december 2023 @ 09:56:
spoiler:
Even voor mijn eigen sanity, maar als je voor stap 2 slechts een enkele node volgt (ipv alles wat eindigt op A tegelijk), dan zou je toch wel binnen een redelijke tijd een eindpunt moeten vinden, toch?
spoiler:
Dat kun je eenvoudig berederen. Noem het aantal instructies (de lengte van regel 1 van het input bestand) |I|, en het aantal vertices in de graaf |V| (het aantal volgende regels). Waar je heen stapt hangt af van twee dingen: op welke vertex je nu staat, en de huidige instructie (L/R). De huidige instructie wordt bepaald door hoeveel stappen je al gedaan hebt modulo |I|. Kortom, het maximaal aantal unieke toestanden is |V| × |I|, wat een redelijk klein getal is.
.oisyn schreef op vrijdag 8 december 2023 @ 09:58:
Ja dat was mijn gedachte ook. Dus ik heb een bug maar ik zie 'm niet 8)7
spoiler:
Begin je alleen bij nodes die op 'A' eindigen? Als je de lengte van het pad van élk beginpunt probeert te vinden kun je in een oneindige lus terecht komen. Bijvoorbeeld XXX -> (XXX, XXX) is perfect geldig in de invoer.

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
.oisyn schreef op vrijdag 8 december 2023 @ 09:56:
Even voor mijn eigen sanity, maar als je voor stap 2 slechts een enkele node volgt (ipv alles wat eindigt op A tegelijk), dan zou je toch wel binnen een redelijke tijd een eindpunt moeten vinden, toch?
Hoe bedoel je dat precies? Je hoeft niet alle nodes tegelijkertijd te doorlopen, maar je moet wel alle A-nodes doorlopen. Het netwerk zou wel eens kunnen bestaan uit twee separate grafen.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op vrijdag 8 december 2023 @ 10:03:
spoiler:
Begin je alleen bij nodes die op 'A' eindigen? Als je de lengte van het pad van élk beginpunt probeert te vinden kun je in een oneindige lus terecht komen. Bijvoorbeeld XXX -> (XXX, XXX) is perfect geldig in de invoer.
Ja, maar momenteel pak ik als test gewoon even de eerste node die op A eindigt, en dan blijft ie al oneindig lang doorgaan :). Zo lijkt het althans.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
.oisyn schreef op vrijdag 8 december 2023 @ 10:04:
[...]

Ja, maar momenteel pak ik als test gewoon even de eerste node die op A eindigt, en dan blijft ie al oneindig lang doorgaan :)
spoiler:
sanity check, check je of je op ZZZ uitkomt of op een node die eindigt op Z?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat laatste

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
.oisyn schreef op vrijdag 8 december 2023 @ 10:04:
[...]

Ja, maar momenteel pak ik als test gewoon even de eerste node die op A eindigt, en dan blijft ie al oneindig lang doorgaan :). Zo lijkt het althans.
Ik kan alleen bedenken dat je iets heel lulligs doet als per ongeluk case sensitive checks op de 'z' ofzo.

spoiler:
Of zoals in mijn geval per ongeluk een variable in een loop herdeclareren waardoor de waarde niet geupdate werd. Oeps. :P

[ Voor 16% gewijzigd door Mugwump op 08-12-2023 10:06 ]

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Visitor.q
  • Registratie: Augustus 2006
  • Laatst online: 17:12
Ik ben gisteren pas laat begonnen aan deel 7, maar het was wel een leuke leercurve om met sort keys te werken!
spoiler:
Het bepalen van het type hand is een hele zooi if-elif-elses met wat nestings en was niet zo'n probleem. De relatieve positie bepalen van een lijstje hands van hetzelfde type heb ik aangevlogen door een eigen sort key te maken alsof het een 13-tallig stelsel is. Bleek dat ik achteraan de hand moest beginnen met tellen (least significant bit). Toen ik dat doorhad werkte het.
Voor part 2 gekeken hoeveel J's ik heb in een hand, en de counter voor de meest voorkomende kaart (niet J) daarmee aangevuld. Voor de sort key moet dan de J naar het eind van de reeks, kun je de rest hetzelfde houden.


Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen

Acties:
  • 0 Henk 'm!

  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
Werkt het stuk code wat je hebt wel voor AAA?

Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh jezus. Vec::shrink_to() doet niet wat ik dacht dat het deed |:( (past de capacity aan, niet de size)

[ Voor 26% gewijzigd door .oisyn op 08-12-2023 10:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het kan aan mij liggen maar dit probleem lijkt me extreem veel complexer dan dat we tot nu toe hebben gezien

spoiler:
Ja, ggd/kgv is ook het eerste waar ik aan dacht, maar het probleem van cycles is niet zo simpel. Je zit niet alleen met nodes, maar ook met een herhalende set aan richtingen. Voor een enkele cycle heb je dus een mogelijk unieke aanloop, waar je mogelijk al langs 1 of meerdere Z-nodes komt, dan kom je in de lus met mogelijk 1 of meerdere Z-nodes. En dit hele verhaal dus meerdere keren, dus je moet op zoek naar het moment dat ze allemaal tegelijk bij een Z-node aankomen. En lus-detectie kan niet puur op nodes, want je kunt meerdere keren bij dezelfde node aankomen maar op verschillende punten in het pad.

Zeker niet onoplosbaar, maar ik vraag me af of ik nu niet gewoon veel te ingewikkeld denk.


Vanavond maar mee aan de slag, nu eerst aan het werk.

[ Voor 15% gewijzigd door .oisyn op 08-12-2023 10:56 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
.oisyn schreef op vrijdag 8 december 2023 @ 10:21:
Het kan aan mij liggen maar dit probleem lijkt me extreem veel complexer dan dat we tot nu toe hebben gezien
spoiler:
Het algemene probleem is inderdaad een stuk complexer, maar de input heeft een paar eigenschappen waardoor alles eenvoudig wordt.

[ Voor 43% gewijzigd door Friits op 08-12-2023 10:24 ]


Acties:
  • +7 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
Deel 8 was echt zo'n typische dag waarbij het probleem eigenlijk veel moeilijker is, maar als je een aantal onbezonnen aannames doet over de invoer kun je toch op het goede antwoord komen. Zoals bekend ben ik geen fan van dat soort problemen, maar ja, het hoort een beetje bij AoC.

Voorbeeld van hoe het ingewikkelder kan:
spoiler:
als je ergens midden in de eerste regel de substring "RRRR" toevoegt, geven al jullie oplossingen het verkeerde antwoord (en de mijne ook).


Wat ik dan wel weer leuk vond is om uit te vogelen hoe de invoer precies geconstrueerd is. Het is helemaal niet zo eenvoudig om met de relatief kleine invoer een grote uitvoer te garanderen. Hier is hoe het werkt:

spoiler:
Om te beginnen de string met instructies. Die lijkt random maar dat is 'ie niet: hij eindigt op "RRRR" (bij mij tenminste) en bevat verder nooit meer dan 3 R's op een rij! Toeval? Nee. Dat wordt gebruikt om een lange periode te garanderen.

De invoergraaf bestaat uit verschillende componenten: precies één voor elk begin- en eindpunt. De component bestaat uit een cykel van paren van vertices. Hier een illustratie:

Afbeeldingslocatie: https://i.imgur.com/2t4QOs3.png

(Je moet er wraparound bij denken: de uitgaande edges aan de rechterkant zijn verbonden aan de edges aan de linkerkant.)

Een paar saillante details:
  1. Voor een component met een cykellengte n heb je precies 2n+1 vertices nodig (de vertices aan de rechterkant kun je copy-pasten naar behoeven).
  2. De begin- en eindvertex hebben dezelfde uitgaande edges. Daardoor werkt de lcm() truc: als je het eerste eindpunt vindt op tijdstip t, dan vind je het ook weer op 2t, 3t, 4t, etc. (@KabouterSuper merkte al op dat dat niet per se zo hoeft te zijn.)
  3. Vlak voor het einde zit een R-detectie sequence! Dit is wat er voor zorgt dat de lengte van de cykel wordt vermenigvuldigd met de lengte van de instructies: je kunt alleen op ZZZ terecht komen als de laatste vier instructies RRRR waren, wat alleen het geval is aan het einde van de instructies.
Deze combinatie garandeert dat het antwoord zo groot mogelijk is. Bijvoorbeeld, mijn invoer heeft een lengte van 271, en de componenten hebben cykellengtes van 79, 53, 59, 61, 71, 73. De periode voor het vinden van een einde zijn door de graafconstructie dus 271×79, 271×53, etc. en aangezien alle getallen in de invoer priemgetallen zijn, is het grootste gemene veelvoud simpelweg het product 271×79×53×59×61×71×73.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Friits schreef op vrijdag 8 december 2023 @ 10:23:
[...]


spoiler:
Het algemene probleem is inderdaad een stuk complexer, maar de input heeft een paar eigenschappen waardoor alles eenvoudig wordt.
spoiler:
Ah ja, ik zie het al. Geen aanloop, je zit meteen in de lus, en de Z-node zit altijd als laatste node in de lus.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
.oisyn schreef op vrijdag 8 december 2023 @ 10:21:
Het kan aan mij liggen maar dit probleem lijkt me extreem veel complexer dan dat we tot nu toe hebben gezien

spoiler:
Ja, ggd/kgv is ook het eerste waar ik aan dacht, maar het probleem van cycles is niet zo simpel. Je zit niet alleen met nodes, maar ook met een herhalende set aan richtingen. Voor een enkele cycle heb je dus een mogelijk unieke aanloop, waar je mogelijk al langs een Z-node komt, dan kom je in de lus met mogelijk meerdere (en zelfs dezelfde) Z-nodes. En dit hele verhaal dus meerdere keren, dus je moet op zoek naar het moment dat ze allemaal tegelijk bij een Z-node aankomen.

Zeker niet onoplosbaar, maar ik vraag me af of ik nu niet gewoon veel te ingewikkeld denk.


Vanavond maar mee aan de slag, nu eerst aan het werk.
spoiler:
De data is ook hier inderdaad erg schoon.

Met cycli e.d. zou ik verwachten dat je iets doet als:
- Bereken eerst voor elke beginnode de minimale steps berekent.
- Pak de node met het max van het aantal steps uit dat lijstje. Voor elke andere node bereken je nu een lijstje met opties waarbij steps < steps van de node met het langste pad
- Vervolgens zoek je het minimum van de LCM van alle combinaties van opties

Of denk ik dan te simpel?

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 22:18

DataGhost

iPL dev

.oisyn schreef op vrijdag 8 december 2023 @ 10:30:
[...]


spoiler:
Ah ja, ik zie het al. Geen aanloop, je zit meteen in de lus, en de Z-node zit altijd als laatste node in de lus.
Ik heb hiervoor een check gedaan, zodat ik verder ook geen aannames over de input hoefde te maken.
spoiler:
Mijn loop-functie heeft een argument "times" waarmee ik bijv. kan doorlopen totdat ik twee keer een eindnode heb gezien. Als de eerste en tweede loop een verschillend aantal steps hebben gooi ik een exception. Aangezien dat niet gebeurd is, bevestigt dat dat alle routes direct in de loop beginnen zonder aanloop en daarom kan je veilig lcm gebruiken.

Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

DataGhost schreef op vrijdag 8 december 2023 @ 11:08:
[...]

Ik heb hiervoor een check gedaan, zodat ik verder ook geen aannames over de input hoefde te maken.
spoiler:
Mijn loop-functie heeft een argument "times" waarmee ik bijv. kan doorlopen totdat ik twee keer een eindnode heb gezien. Als de eerste en tweede loop een verschillend aantal steps hebben gooi ik een exception. Aangezien dat niet gebeurd is, bevestigt dat dat alle routes direct in de loop beginnen zonder aanloop en daarom kan je veilig lcm gebruiken.
spoiler:
Die assumptie klopt niet. Je kunt op stap N en op stap 2N een eindnode tegenkomen, terwijl je lus mogelijk nog niet eens begonnen is

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • bakkerjangert
  • Registratie: Februari 2012
  • Laatst online: 16:19
.oisyn schreef op vrijdag 8 december 2023 @ 11:14:
[...]


spoiler:
Die assumptie klopt niet. Je kunt op stap N en op stap 2N een eindnode tegenkomen, terwijl je lus mogelijk nog niet eens begonnen is
Als aanvulling daarop

spoiler:
zelfs als je al 2x dezelfde eind node hebt gevonden op 2N zou je ook nog moeten checken of je op dezelfde positie in de instructie zit. Het zou zomaar kunnen dat je al 2x de eind node hebt gevonden voor het einde van de instructies en dat ie daarna een ander pad gaat volgen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
bakkerjangert schreef op vrijdag 8 december 2023 @ 11:21:

spoiler:
zelfs als je al 2x dezelfde eind node hebt gevonden op 2N zou je ook nog moeten checken of je op dezelfde positie in de instructie zit. Het zou zomaar kunnen dat je al 2x de eind node hebt gevonden voor het einde van de instructies en dat ie daarna een ander pad gaat volgen.
Dit is precies wat ik doe :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

bakkerjangert schreef op vrijdag 8 december 2023 @ 11:21:
[...]


Als aanvulling daarop

spoiler:
zelfs als je al 2x dezelfde eind node hebt gevonden op 2N zou je ook nog moeten checken of je op dezelfde positie in de instructie zit. Het zou zomaar kunnen dat je al 2x de eind node hebt gevonden voor het einde van de instructies en dat ie daarna een ander pad gaat volgen.
Idd, dat merkte ik hier ook al op :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • mbe81
  • Registratie: Juni 2008
  • Laatst online: 22:09
Ik had vandaag wat meer tijd nodig en eerlijk gezegd ook jullie hints... Ik had eerst de brute force-aanpak geprobeerd maar daar komt natuurlijk niets uit, althans niet in een redelijke termijn.

spoiler:
Op basis van jullie hints krijg ik onder de douche het idee hoe het probleem met de loops op te lossen. Het duurde daarna ook nog wel even om uit te zoeken hoe de 'least common multiple' te bepalen want als ik alle tussenresultaten met elkaar vermenigvuldigde kwam ik natuurlijk vee te hoog uit.

In Go: https://github.com/mbe81/advent-of-code/tree/main/2023/day08

Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Was vandaag ZO blij dat ik hem opgelost had 😅

C# code voor de mensen die dat leuk vinden.

[ Voor 46% gewijzigd door CMG op 08-12-2023 11:43 . Reden: code link toegevoegd ]

NKCSS - Projects - YouTube


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mugwump schreef op vrijdag 8 december 2023 @ 10:42:
[...]


spoiler:
De data is ook hier inderdaad erg schoon.

Met cycli e.d. zou ik verwachten dat je iets doet als:
- Bereken eerst voor elke beginnode de minimale steps berekent.
- Pak de node met het max van het aantal steps uit dat lijstje. Voor elke andere node bereken je nu een lijstje met opties waarbij steps < steps van de node met het langste pad
- Vervolgens zoek je het minimum van de LCM van alle combinaties van opties

Of denk ik dan te simpel?
spoiler:
Ik denk dat je te simpel denkt.
Voor elke startnode kun je een lijstje bepalen met het aantal tussenstappen tot elke eindnode op de weg tot aan de eerste eindnode in de lus. Vanaf dan heb je een lijstje met tussenstappen tot elke eindnode binnen de lus. Als je dit gedaan hebt, heb je de graaf zelf niet meer nodig.

Vervolgens kun je deze allemaal nalopen totdat je voor allemaal in de lus zit.

Een relatief naïeve implementatie zal steeds het minimaal aantal stappen tot een van de paden bij de volgende eindnode uitkomt, en dan kijken of alle paden op een eindnode zitten. Een efficiente implementatie moet denk ik de lussen gaan combineren. Twee lussen A en B kunnen worden omgezet in een grotere lus AB, met als tussenstappen elk moment dat zowel A en B op een startnode uitkomen. Deze lus heeft dan maximaal de lengte van de LCM van A en B. Voor het bepalen van de tussenstappen kun je kijken hoeveel stappen lus B opschuift als je voor lus A een volledige lus afloopt. Op basis daarvan kun je bepalen hoe vaak een eindnode van B valt op een eindnode van A.

Met deze grotere lus AB kun je het zelfde doen icm C om een nog grotere lus ABC te maken, net zolang tot je alle lussen met elkaar gecombineerd hebt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

P_Tingen schreef op donderdag 30 november 2023 @ 08:14:
Pff, gelukkig zijn de eerste AoC opgaven wat simpeler om er "in" te komen.....
🤣🤣 I was de thread terug aan het lezen... this did not age well 🤣🤣

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
.oisyn schreef op vrijdag 8 december 2023 @ 11:53:
[...]


spoiler:
Ik denk dat je te simpel denkt.
Voor elke startnode kun je een lijstje bepalen met het aantal tussenstappen tot elke eindnode op de weg tot aan de eerste eindnode in de lus. Vanaf dan heb je een lijstje met tussenstappen tot elke eindnode binnen de lus. Als je dit gedaan hebt, heb je de graaf zelf niet meer nodig.

Vervolgens kun je deze allemaal nalopen totdat je voor allemaal in de lus zit.

Een relatief naïeve implementatie zal steeds het minimaal aantal stappen tot een van de paden bij de volgende eindnode uitkomt, en dan kijken of alle paden op een eindnode zitten. Een efficiente implementatie moet denk ik de lussen gaan combineren. Twee lussen A en B kunnen worden omgezet in een grotere lus AB, met als tussenstappen elk moment dat zowel A en B op een startnode uitkomen. Deze lus heeft dan maximaal de lengte van de LCM van A en B. Voor het bepalen van de tussenstappen kun je kijken hoeveel stappen lus B opschuift als je voor lus A een volledige lus afloopt. Op basis daarvan kun je bepalen hoe vaak een eindnode van B valt op een eindnode van A.

Met deze grotere lus AB kun je het zelfde doen icm C om een nog grotere lus ABC te maken, net zolang tot je alle lussen met elkaar gecombineerd hebt.
spoiler:
Mijn tentamen grafentheorie is ruim 20 jaar geleden geweest en sindsdien heb ik er te weinig mee gedaan om hier nog fatsoenlijke oplossingen voor te verzinnen. :P

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 22:01

MadEgg

Tux is lievvv

Ook eerst weer met bruteforce gegaan. Nope.

Beetje wiskunde ophalen en toen ging het wel weer.

Dag 8 - Kotlin

Tja


Acties:
  • +1 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:41

Dido

heforshe

.oisyn schreef op vrijdag 8 december 2023 @ 10:21:
Het kan aan mij liggen maar dit probleem lijkt me extreem veel complexer dan dat we tot nu toe hebben gezien
Er knaagde ook van alles aan me toen ik de "simpele" oplossing zat te implementeren, inderdaad.

Had het gevoel dat het feit dat ik het juiste antwoord bleek te hebben gevonden meer geluk dan wijsheid was.

Maar is dus waarschijnlijk by design. En da's dan wel jammer, aangezien je dus eigenlijk impliciet heel belangrijke aannames moet doen om een sterk vereenvoudigde versie op te lossen van het daadwerkelijk geschetste probleem. Alsof we over een paar dagen een gecompliceerd lulverhaal over de betekenis van het leven, het universum en alles krijgen, met de vraag om het travelling-salesmanprobleem op te lossen. En dat dan het antwoord gewoon 42 is omdat de input daarop is ingericht 8)7

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Dido schreef op vrijdag 8 december 2023 @ 12:18:
[...]

Er knaagde ook van alles aan me toen ik de "simpele" oplossing zat te implementeren, inderdaad.

Had het gevoel dat het feit dat ik het juiste antwoord bleek te hebben gevonden meer geluk dan wijsheid was.

Maar is dus waarschijnlijk by design. En da's dan wel jammer, aangezien je dus eigenlijk impliciet heel belangrijke aannames moet doen om een sterk vereenvoudigde versie op te lossen van het daadwerkelijk geschetste probleem. Alsof we over een paar dagen een gecompliceerd lulverhaal over de betekenis van het leven, het universum en alles krijgen, met de vraag om het travelling-salesmanprobleem op te lossen. En dat dan het antwoord gewoon 42 is omdat de input daarop is ingericht 8)7
Eens. Maar voor hetzelfde geld komt er een vervolg op de vraag waar het wel belangrijk is dat je het netjes geïmplementeerd hebt. De intcode-opdrachten zijn meestal ook verdeeld over meerdere dagen.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

@Dido Idd. En daarbij vraag ik me af hoeveel mensen met een oplossing die aanname bewust hebben gemaakt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 22:22

P_Tingen

omdat het KAN

Ik ben opgehouden met vooruitdenken; deel 2 is toch negen van de tien keer anders dan wat ik denk dat het gaat worden en de kans is groot dat die "nette" oplossing niet nodig is. Ik probeer het wel netjes te doen in de zin van dat het leesbare code moet opleveren, maar ik probeer niet vooruit te plannen, oftewel de First Rule Of Program Optimization

... en gaat over tot de orde van de dag


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
Dido schreef op vrijdag 8 december 2023 @ 12:18:
En da's dan wel jammer, aangezien je dus eigenlijk impliciet heel belangrijke aannames moet doen om een sterk vereenvoudigde versie op te lossen van het daadwerkelijk geschetste probleem.
Klopt, ik beklaag me daar hier ook over, maar dat doe ik eigenlijk elk jaar; het hoort een beetje bij Advent of Code.

Overigens kon je een deel van de constraints wel uit de invoer aflezen, bijvoorbeeld:
spoiler:
AAA = (MPF, VMM)
ZZZ = (VMM, MPF)

Dan zie je dat het begin- en eindpunt dezelfde uitgangspunten hebben, dus dan kun je als hypothese opstellen dat het eindpunt aan het einde van de lus ligt. Dan kijk je verder:

MPF = (MNK, LTH)
VMM = (MNK, LTH)

Hm, die hebben weer dezelfde uitgangspunten. Dan kun je gaan beredeneren dat de graaf bestaat uit een cykel van paren van nodes etc.
.oisyn schreef op vrijdag 8 december 2023 @ 11:53:
Een efficiente implementatie moet denk ik de lussen gaan combineren.
Ik zie niet direct hoe dit worst case beter is. Je zegt zelf al dat de gecombineerde lengte worst case gelijk is aan het kleinste gemene veelvoud van de lengte van de invoerlussen. Dan creëer je worst case dus een lus van de lengte die gelijk is aan het antwoord, maar dan had je net zo goed kunnen simuleren.

Voor het specifieke geval waarin elke lus afzonderlijk precies 1 eindpunt heeft (maar in tegenstelling tot de opgave, niet per se aan het eind van de lus) dan kun je de Chinese reststelling gebruiken om efficiënt een oplossing te bepalen (wat ook al niet heel eenvoudig is). Maar ik zie niet zo 1-2-3 hoe je een efficiënte oplossing genereert als meerdere geldige eindposities binnen een lus mogelijk zijn.
P_Tingen schreef op vrijdag 8 december 2023 @ 12:26:
Ik ben opgehouden met vooruitdenken; deel 2 is toch negen van de tien keer anders dan wat ik denk dat het gaat worden en de kans is groot dat die "nette" oplossing niet nodig is.
Dit is ook mijn strategie. Zo snel mogelijk deel 1 eruit rammen, maakt niet uit hoe lelijk het is, en dan eventueel opschonen voor deel 2 als dat nuttig lijkt. En pas nadat ik beide oplossingen correct heb probeer ik ze te integreren in één script.

[ Voor 12% gewijzigd door Soultaker op 08-12-2023 12:36 ]


Acties:
  • +1 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:41

Dido

heforshe

KabouterSuper schreef op vrijdag 8 december 2023 @ 12:22:
Eens. Maar voor hetzelfde geld komt er een vervolg op de vraag waar het wel belangrijk is dat je het netjes geïmplementeerd hebt. De intcode-opdrachten zijn meestal ook verdeeld over meerdere dagen.
Tsja, 's ochtends ga ik voor zo snel mogelijk twee sterren, hoe lelijk, brute force of langzaam (binnen bepaalde grenzen!) het ook is. Daarna gaat de hond naar buiten en ga ik werken. Later maak ik het wel mooi en optimaliseer ik wel.
Vooruitdenken naar deel 2 tijdens deel 1 doe ik eigenlijk juist door "naief" te coden. Dan hoef ik tenminste niet een half uur later een Linq-expressie van 6 regels te reverse-engineeren omdat ik er op twee plekken een aanpassing in moet maken voor deel 2 :P
.oisyn schreef op vrijdag 8 december 2023 @ 12:23:
@Dido Idd. En daarbij vraag ik me af hoeveel mensen met een oplossing die aanname bewust hebben gemaakt.
Ik denk dat zeker bij degenen die binnen 10 minuten beiden delen afhadden, bijna niemand bewust die aannames gemaakt heeft. Die zien cijfers, (mogelijke) cycles, "iets" gemeenschappelijks en trekken de bibliotheek open.
Dat zijn vaak ook niet degenen die het beste kunnen uitleggen wat hun software nou precies doet en waarom - maar ze zijn wel snel :P
P_Tingen schreef op vrijdag 8 december 2023 @ 12:26:
Ik ben opgehouden met vooruitdenken; deel 2 is toch negen van de tien keer anders dan wat ik denk dat het gaat worden en de kans is groot dat die "nette" oplossing niet nodig is. Ik probeer het wel netjes te doen in de zin van dat het leesbare code moet opleveren, maar ik probeer niet vooruit te plannen, oftewel de First Rule Of Program Optimization
Dit!
Ik besteed hooguit wat meer tijd aan mooi maken en herbruikbaar maken als ik vrij hoge verwachtingen heb dat wat ik net geschreven heb in volgende dagen weer de kop opsteekt . Dat is ook waarom ik ooit (zoals velen?) begonnen ben met unit tests op alle opdrachten, om te voorkomen dat mijn intcode-interpeter de opdracht van vandaag wel goed uitvoert, maar die van eergisteren opeens verkloot :P

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
P_Tingen schreef op vrijdag 8 december 2023 @ 12:26:
Ik ben opgehouden met vooruitdenken; deel 2 is toch negen van de tien keer anders dan wat ik denk dat het gaat worden en de kans is groot dat die "nette" oplossing niet nodig is. Ik probeer het wel netjes te doen in de zin van dat het leesbare code moet opleveren, maar ik probeer niet vooruit te plannen, oftewel de First Rule Of Program Optimization
Ik heb de hoop ook opgegeven dat ik kan voorspellen wat men wil. :P

Al moet ik zeggen dat ik deze keer een redelijk herbruikbare oplossing had uit deel 1.

spoiler:
De kern was prima herbruikbaar en te parameterizeren met een startLocation en een string -> boolean functie die aangeeft wanneer de bestemming is bereikt.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • +2 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 22:22

P_Tingen

omdat het KAN

Dido schreef op vrijdag 8 december 2023 @ 12:37:
[...]
Ik besteed hooguit wat meer tijd aan mooi maken en herbruikbaar maken als ik vrij hoge verwachtingen heb dat wat ik net geschreven heb in volgende dagen weer de kop opsteekt . Dat is ook waarom ik ooit (zoals velen?) begonnen ben met unit tests op alle opdrachten, om te voorkomen dat mijn intcode-interpeter de opdracht van vandaag wel goed uitvoert, maar die van eergisteren opeens verkloot :P
Aaaaah, talk me not from de IntCode interpreter. Ik kreeg ergens op de tweede dag of zo in dat ding iets niet goed waardoor de uitkomst van niet alleen die dag niet goed was, maar ik ook met de volgende dagen niet verder kon. Bijzonder frustrerend |:(

... en gaat over tot de orde van de dag


Acties:
  • +5 Henk 'm!

  • Lisper
  • Registratie: September 2015
  • Laatst online: 05-09 20:26
Voor wie vast zit met day 8 is hier een een hint:

spoiler:
het kan helpen om de input to visualizeren.
Ik heb met graphviz een svg gemaakt van transities. (groen = start, rood = end, blauw = r, paars = l)
Afbeeldingslocatie: https://chrisblom.net/img/day8-v2.svg

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Ik steek vooral moeite in het net parsen van de data, over het algemeen heb je die in beide delen nodig. En een beetje copy-paste van deel 1 naar deel 2 ben ik ook niet vies van voor de initiële oplossing.

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • Lisper
  • Registratie: September 2015
  • Laatst online: 05-09 20:26
Soultaker schreef op vrijdag 8 december 2023 @ 12:29:
[...]
dan kun je de Chinese reststelling gebruiken om efficiënt een oplossing te bepalen
Spoiler voor eerdere jaren:

spoiler:
Ik krijg flashbacks naar 2020 day 13

[ Voor 9% gewijzigd door Lisper op 08-12-2023 13:29 ]


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Lisper schreef op vrijdag 8 december 2023 @ 13:28:
[...]


Ik krijg flashbacks naar 2020 day 13
Dat had ik dus ook, en even daar spieken bleek wel een handige zet. Het is niet 1 op 1 hetzelfde probleem vanwege de eigenschappen van de input (die van 2020d3 mocht je iets in vergeten wat nu wel nodig was).

Voor de rest dan weer ruim te lang over deel 2 gedaan omdat ik een typfoutje had gemaakt in
spoiler:
mijn functie voor de gcd. Die viel pas op nadat ik al wat hints over de structuur van de input gelezen had, en er toch wel akelig lage oplossingen uit de versimpelde oplossing met lcm kwamen

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
Lisper schreef op vrijdag 8 december 2023 @ 13:23:
Voor wie vast zit met day 8 is hier een een hint:

spoiler:
het kan helpen om de input to visualizeren.
Ik heb met graphviz een svg gemaakt van transities. (groen = start, rood = end, blauw = r, paars = l)
[Afbeelding]
Nice! Hoe heb je dat voor elkaar gekregen met GraphViz? Ik probeerde 'm ook te visualiseren maar de graaf was te groot om te layouten met dot. Heb je een andere tool gebruikt of specifieke opties?

(Je ziet wel mooi de structuur die ik hier beschrijf.)

Acties:
  • +1 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Python

Hoewel ik het nu niet zo makkelijk kan testen;

spoiler:
Zou mijn code rekening moeten houden met de mogelijkheid op meerdere verschillende "..Z" tijdens loops, verschillende instructions (index) per "..Z" per loop en de mogelijkheid dat de eerste occurrence van een "..Z" en instruction combo een offset kan hebben welke niet gelijk is aan cycle (CRT). Misschien doorgeschoten in overengineering, maar vond het wel jammer dat elke "..Z" precies 1x voorkomt per loop op dezelfde cycle-afstand en A -> Z gelijk is aan (Z -> Z) - 1

Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op vrijdag 8 december 2023 @ 12:29:
Ik zie niet direct hoe dit worst case beter is. Je zegt zelf al dat de gecombineerde lengte worst case gelijk is aan het kleinste gemene veelvoud van de lengte van de invoerlussen. Dan creëer je worst case dus een lus van de lengte die gelijk is aan het antwoord, maar dan had je net zo goed kunnen simuleren.
Misschien begrijp ik je verkeerd, maar volgens mij is dat is niet waar? De simulatie kan veel meer stappen bevatten dan het in 1x combineren van de lus met idd de Chinese reststelling*.

Bijvoorbeeld: lus A heeft 100 stappen, met een oplossing op stap 1. Lus B heeft 101 stappen, met een oplossing op stap 50. Dan kun je dus ofwel 98 keer itereren om een oplossing te vinden, of je rekent gewoon uit dat na 49 lussen van B, de oplossingen van A en B overlappen. En dat dat zich herhaalt na LCM(100,101) stappen. Dus AB is een nieuwe lus met 10100 stappen, en een oplossing na 4999 stappen.

Bij m oplossingen in A en n oplossingen in B heb je maximaal nm overlappende oplossingen in AB. Dus voor elke oplossing in A reken je uit hoeveel stappen het kost om te overlappen met elke oplossing in B, waar mogelijk.

*edit: Wacht, is het wel de Chinese reststelling? Volgens mij wil je het omgekeerde. De oplossingen ai van A kun je schrijven als
  n = ai (mod |A|)
En de oplossingen bj van B als
  n = bj (mod |B|)

Dan dan zoek je alle nij die voldoen voor elke combinatie van ai en bj

edit2: Ah, brainfart, dat is precies de Chinese reststelling, maar die geldt alleen als gcd(|A|, |B|) = 1, wat geen gegeven is. Maar goed, een stelsel van lineaire congruenties is natuurlijk ook oplosbaar als gcd(|A|, |B|) ≠ 1 :)

[ Voor 31% gewijzigd door .oisyn op 09-12-2023 01:48 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • gedonie
  • Registratie: Januari 2011
  • Laatst online: 09-09 10:31
Na wat zoeken en puzzelen op hoe deel 2 te berekenen dan toch eindelijke de oplossing voor dag 8 in Java.

spoiler:
Deel 1 kon nog makkelijk, maar bij deel 2 had ik eerst de fout gemaakt om met bruteforce te doen, Later kwam ik pas tot de realisatie dat je net zo goed de kortste oplossing voor elk start punt kon pakken en dan lcm toe te passen daarop.

Acties:
  • +1 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-09 15:20
MatHack schreef op vrijdag 8 december 2023 @ 13:25:
Ik steek vooral moeite in het net parsen van de data, over het algemeen heb je die in beide delen nodig. En een beetje copy-paste van deel 1 naar deel 2 ben ik ook niet vies van voor de initiële oplossing.
Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-

Ik heb zelfs ooit de moeite genomen om een zeer rudimentaire OCR in te bouwen omdat we ook vaak een tekstwaarde moeten lezen op basis van pixels die aan of uit staan.

Of een Grid waar ik met behulp van een Coordinate heel makkelijk waardes kan ophalen. Waarbij de Coordinate dan ook weer een zwik methodes bevat om neighbours te bepalen.

Of een generieke Dijkstra implementatie waar ik alleen maar een Node implementatie aan mee hoef te geven voor het vinden van een korste pad.

Acties:
  • 0 Henk 'm!

  • CrossProd
  • Registratie: November 2014
  • Laatst online: 08-09 16:33
Remcoder schreef op vrijdag 8 december 2023 @ 14:58:
[...]

Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-
Nee dat denk ik niet. Zelf probeer ik ook zoveel mogelijk in een tools framework te zetten. Grootste uitdaging is elke december weer herinneren wat er al allemaal in zit.

Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Remcoder schreef op vrijdag 8 december 2023 @ 14:58:
Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-
Ik heb (lang) niet zoveel als jij. Alleen wat dingen, die serieus tijdbesparend zijn. Het komt erop neer, dat ik eigenlijk alleen een Point class heb. Dat ding wordt steeds weer gebruikt bij AoC. Tot nu toe waren bijvoorbeeld de Dijkstra-implementaties steeds zo verschillend, dat ik nog geen nut heb gezien om het kleine beetje overlap eruit te refactoren.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
.oisyn schreef op vrijdag 8 december 2023 @ 14:03:
Bijvoorbeeld: lus A heeft 100 stappen, met een oplossing op stap 1. Lus B heeft 101 stappen, met een oplossing op stap 50. Dan kun je dus ofwel 98 keer itereren om een oplossing te vinden, of je rekent gewoon uit dat na 49 lussen van B, de oplossingen van A en B overlappen. En dat dat zich herhaalt na LCM(100,101) stappen. Dus AB is een nieuwe lus met 10100 stappen, en een oplossing na 4999 stappen.
Ja, maar in z'n algemeenheid kan er in die lus meer dan 1 toestand een eindtoestand zijn. Super simpel voorbeeld:

RLRRLRR

AAA -> AAA, ZZZ
ZZZ -> AAA, ZZZ


De cykel beginnend met AAA heeft periode 7 en is in de eindtoestand wanneer t=1, 3, 4, 6, 7 (mod 7).

Als je dan twee cykels hebt met meerdere eindtoestanden en de lengtes zijn copriem, dan is de lengte van de gecombineerde cykel het product van de twee cykels, en het aantal eindtoestanden het product van het aantal eindtoestanden van de twee cykels.

En je kunt niet simpelweg alleen de eerste waarde behouden. Bijvoorbeeld als je bovenstaande cykel combineert met een cykel met periode 2 en eindtoestand op t=2, dan is de eerste tijd dat ze beiden in een eindtoestand zijn op t=4; als je alleen t=1 had behouden kom je op t=8 (8 = 1 mod 7 en 8 = 2 mod 2).

Je kunt het probleem reduceren naar het volgende: gegeven N bitstrings s1, s2, .., sN van verschillende lengte, wat is de laagste index i zodat 1 == s1[i % len(s1)] == s2[i % len(s2)] == .. == sN[i % len(sN)]? Dit is algemener dan de AoC probleemstelling, maar ik zie ook niet zo 1-2-3 hoe de AoC versie het probleem fundamenteel eenvoudiger maakt.

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Remcoder schreef op vrijdag 8 december 2023 @ 14:58:
[...]

Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-
Ik heb ook een Coords class, want die wordt in zoveel opgaven gebruikt. En daarnaast nog wat parse helpers oa voor splitten in secties (2 newlines) en lines en daarom nog wat boilerplate classes. Heb nog wel zitten nadenken of ik nog iets voor grafen wil bouwen (Node/Edge classes oid) en daar dan evt. bovenop algoritmes (Dijkstra/AStar/etc.). Wie weet dat ik na deze ronde wel weer eens kijk of ik nog meer wil abstraheren (ook uit oudere opgaves).

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op vrijdag 8 december 2023 @ 15:15:
Als je dan twee cykels hebt met meerdere eindtoestanden en de lengtes zijn copriem, dan is de lengte van de gecombineerde cykel het product van de twee cykels, en het aantal eindtoestanden het product van het aantal eindtoestanden van de twee cykels.
Dat zei ik toch al in mijn vorige post?

Bij m oplossingen in A en n oplossingen in B heb je maximaal nm overlappende oplossingen in AB. Dus voor elke oplossing in A reken je uit hoeveel stappen het kost om te overlappen met elke oplossing in B, waar mogelijk.

Je moet dus nm oplossingen berekenen. Maar jij stelt dat dat niet slechter is dan simulaties doen. Waarbij ik simuleren zie als het springen naar de eerstvolgende oplossing, en dan kijken of dat punt ook een oplossing is voor de andere lus, misschien dat jij daar andere gedachten over hebt.

De mogelijke oplossingen zijn dan (met |A|<|B| en |AB| = lcm(|A|,|B|):
  nij = (bj - ai) / gcd(|A|,|B|) * |B| + bj) (mod |AB|)
Waarbij er geen oplossing is als (bj - ai) ≠ 0 (mod gcd(|A|,|B|))

Nvm, dit klopt niet.

[ Voor 26% gewijzigd door .oisyn op 08-12-2023 16:28 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
.oisyn schreef op vrijdag 8 december 2023 @ 15:20:
Dat zei ik toch al in mijn vorige post?

Bij m oplossingen in A en n oplossingen in B heb je maximaal nm overlappende oplossingen in AB. Dus voor elke oplossing in A reken je uit hoeveel stappen het kost om te overlappen met elke oplossing in B, waar mogelijk.
Okee, daar zijn we het dus over eens.
Maar jij stelt dat dat niet slechter is dan simulaties doen. Waarbij ik simuleren zie als het springen naar de eerstvolgende oplossing, en dan kijken of dat punt ook een oplossing is voor de andere lus, misschien dat jij daar andere gedachten over hebt.
Misschien verschillen we over wat we verstaan onder “efficiënte oplossing”?

Vergeleken met simpelweg simuleren is het samenvoegen van cykels inderdaad sneller. De simulatie doet er ongeveer O(N × antwoord) over, waarbij antwoord worst case lcm(|A|,|B|,|C|, ...) is. Stel dat in een slechte case ongeveer de helft van alle posities eindposities zijn. Dan reduceert de methode die je beschrijft de complexiteit tot iets als O(antwoord / 2N). Dat is aanzienlijk beter: een speedup van een factor 2N×N. Maar bedenk dat N klein is (N=6 in de officiële testinvoer) dus dan praat je over een speedup van ongeveer 400 (constante factoren negerend).

Dan kun je aan de ene kant zeggen: dat bijna 400 keer zo snel! Aan de andere kant, het is nog steeds niet heel efficient. In de officiële testinvoer was het antwoord ruim 20.000 miljard; als je dat deelt door een factor 400 dan is het nog steeds 50 miljard.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zie niet in hoe je op 50 miljard evaluaties komt, als het eerste antwoord van de lus ABCDEF op 20.000 miljard ligt. Dan moet er ergens een lus zijn die het aantal mogelijke oplossingen drastisch vermindert.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 18:50
spoiler:
20.000 miljard? Ik kwam maar aan 7309 miljard.
Ik stopte overigens na de eerste Z. Na die getallen in een online LCM calculator te stoppen kreeg ik dat antwoord. Dat werd berekende een priemgetal van 283 en adhv 43, 47, 53, 59, 61, 67, 283.
Remcoder schreef op vrijdag 8 december 2023 @ 14:58:
[...]
Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-
Vorig jaar heb ik het grootste deel gemaakt met Java en enkele met Rust.
Nu ben ik vanaf het begin bezig in Rust. Dus ik heb nog geen library opgebouwd. ;)

let the past be the past.


Acties:
  • +1 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10-09 18:35

TrailBlazer

Karnemelk FTW

Ben ik de enige die licht teleurgesteld was dat deel 2 niet een klassiek pathfinding ding was.

spoiler:
Geen idee hoe je een lcm uitrekent maae even googlen gaf me de oplossing zo

Acties:
  • +1 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 21:35
Deel 1 was simpel, maar deel 2 was ik zelf nooit uitgekomen zonder de spoilers in dit topic.

spoiler:
Zodra ik er via een spoiler achter kwam dat het herhalende loops zijn was het met wiskunde (LCM) makkelijk, maar dat is iets waar je maar net achter moet komen... Ik had dat zelf niet gezien of getest.


Oplossing: https://github.com/WernerLDev/AOC2023/blob/main/day8/day8.ts

Ik hoop niet dat dit het niveau gaat zijn vanaf nu want denk niet dat ik het dan tot dag 25 ga halen..

[ Voor 11% gewijzigd door WernerL op 08-12-2023 19:18 ]

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • +1 Henk 'm!

  • Lisper
  • Registratie: September 2015
  • Laatst online: 05-09 20:26
Soultaker schreef op vrijdag 8 december 2023 @ 13:54:
[...]

Nice! Hoe heb je dat voor elkaar gekregen met GraphViz? Ik probeerde 'm ook te visualiseren maar de graaf was te groot om te layouten met dot. Heb je een andere tool gebruikt of specifieke opties?

(Je ziet wel mooi de structuur die ik hier beschrijf.)
Uiteindelijk met neato plus wat opties, zie: https://github.com/ChrisB...023/day08.clj#L104-L121C7
Meestal probeer ik grote grafen eerst met sfdp, daar is dot te langzaam voor.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

https://github.com/CodeEn...23/blob/main/days/Day8.go

Deel 1 was snel gefixt.
spoiler:
Deel 2 was eerste bruteforce maar dat werkte uiteraard niet. Eerste LCM algo die ik bouwde deed er 22 seconden over en toen ik ergens een optimaal algo vandaan haalde was het minder dan 1ms nog.

"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


Acties:
  • 0 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 22:22

P_Tingen

omdat het KAN

TrailBlazer schreef op vrijdag 8 december 2023 @ 17:23:
Ben ik de enige die licht teleurgesteld was dat deel 2 niet een klassiek pathfinding ding was.

spoiler:
Geen idee hoe je een lcm uitrekent maae even googlen gaf me de oplossing zo
Ik had ook iets verwacht in de trend van "hoeveel mogelijke paden zijn er" of zo, maar deze deel 2 leek uiteindelijk ook bedrieglijk eenvoudig

... en gaat over tot de orde van de dag


Acties:
  • +1 Henk 'm!

  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
TrailBlazer schreef op vrijdag 8 december 2023 @ 17:23:
Ben ik de enige die licht teleurgesteld was dat deel 2 niet een klassiek pathfinding ding was.

spoiler:
Geen idee hoe je een lcm uitrekent maae even googlen gaf me de oplossing zo
Don't worry, we krijgen vast nog wel een Dijkstra/DFS/BFS

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik heb ben ook maar even voor de lelijke non-generieke oplossing gegaan :r

Time spent: 326.8µs

day8 in Rust

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

Remcoder schreef op vrijdag 8 december 2023 @ 14:58:
[...]

Ben ik dan echt de enige die een zeer uitgebreide library heeft? -O-

Ik heb zelfs ooit de moeite genomen om een zeer rudimentaire OCR in te bouwen omdat we ook vaak een tekstwaarde moeten lezen op basis van pixels die aan of uit staan.

Of een ....

Of een generieke ...
Ik probeer eigenlijk er een sport van te maken alles vanaf 0 te maken elk jaar. Dit jaar ook een andere taal (go ipv java) gepakt. Het zijn leuke opdrachten en je leert er weer van. Ja ik heb zojuist echt niet voor het eerst
spoiler:
LCM
geimplementeerd. Maar who cares. zit dat weer vers in m'n hoofd ;) Gaat vast met
spoiler:
Dijkstra
of een
spoiler:
A*
ook weer gebeuren.

"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


Acties:
  • +6 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
Woei! Binnen 5 minuten klaar en een plaats in de top 100 :) Maar hij was dan ook wel erg makkelijk vandaag.

Acties:
  • 0 Henk 'm!

  • CrossProd
  • Registratie: November 2014
  • Laatst online: 08-09 16:33
Zit je dan om 6:00 klaar op zaterdagochtend met de verwachting een eerste echte moeilijke puzzel te krijgen want weekend krijg je een van de meest simpele tot nu toe...

Dag 9 in Swift

[ Voor 26% gewijzigd door CrossProd op 09-12-2023 06:41 ]


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:41

Dido

heforshe

Nee, de echt lastige opgaven worden bewaard voor werkdagen waarop je vroeg moet beginnen 8)7

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Pfff... dat was inderdaad wel heel makkelijk.

https://github.com/realma...de.Y2023/Solvers/Day09.cs

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10-09 18:35

TrailBlazer

Karnemelk FTW

hmm ik snap het niet sample zonder problemen maar mijn input geeft verkeerde antwoord. Alles wat ik met de hand conroleer lijkt in orde te zijn. Negatieve getallen ook geen probleem :(

Aah oplossing al op reddit gevonden stom van me

spoiler:
Nog een major fuckup. De eerste waardes in een rij zijn niet unique gebruikte ze al key voor een dict dus miste er nogal wat
samengevat ik ben een enorme prutser die eerste kolom is gewoon een meetwaarde geen idee waarom ik dacht dat het een speciaal ding was.

[ Voor 51% gewijzigd door TrailBlazer op 09-12-2023 13:25 ]


Acties:
  • +1 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 21:35
Was weer een makkelijke inderdaad.
Mijn oplossing: https://github.com/WernerLDev/AOC2023/blob/main/day9/day9.ts

En heb bij deze mijn persoonlijk record verbroken. Ik heb nu één ster meer dan de vorige keer dat ik mee deed aan Advent of code. :+

[ Voor 39% gewijzigd door WernerL op 09-12-2023 08:51 ]

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 16:25
Ik zag de opdracht en dacht:

spoiler:
Ah, hier moet vast iets slims gedaan worden met afgeleiden omdat brute forcing weer minuten gaat duren.

Maar nee, gewoon dom brute forcen is ook nog steeds een kwestie van milliseconden.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:28
Okee, omdat hij vandaag zo makkelijk was, hier een iets grotere invoer: aoc-2023-day-09-challenge-1.zip

Ik heb een Python-oplossing die dit in 500 ms uitrekent. De correcte antwoorden zijn van de vorm: 37557...60469 en 10610...69740 respectievelijk.

Let op: de antwoorden zijn grote getallen. Als je een taal gebruikt zonder BigInt library of iets dergelijks, maak ik de uitdaging iets anders: bereken alleen de laatste 9 cijfers van elk antwoord. Als straf vermenigvuldig ik je oplossingstijd dan mentaal met 10 :P

Acties:
  • +4 Henk 'm!

  • torx
  • Registratie: Oktober 2006
  • Laatst online: 22:14
Ik heb de code voor deel 2
spoiler:
niet bijgewerkt, maar gewoon de invoerwaarden omgedraaid voor elke regel.

Ik had niet gelijk verwacht dat dit zou werken, maar gewoon geprobeerd en het was het juiste antwoord :)

Honda CB750 Hornet :: Yamaha Fazer FZ6 SA (2011 - 2023) | F1Pool.net


Acties:
  • +1 Henk 'm!

  • FCA
  • Registratie: April 2000
  • Laatst online: 10:47

FCA

Wat een verschil zeg, dag 8 en dag 9. Dag 8 was de eerste waarbij de prive laptop naar werk mee ging voor AoC, dag 9 lekker liggend in bed met de laptop op schoot.
spoiler:
Voor dag 8 deel 2: ik zat, net als anderen hier, eerst te denken hoe de lus + offset van elk startpunt te detecteren. Uiteindelijk toch maar even de eerste 10x dat ie van een startpunt een eindpunt bereikte uitgeprint, gerealiseerd dat het allemaal simpele korte loops waren, en voor de quick and dirty oplossing gegaan...

Voor dag 9 deel 2 bestond de helft van de tijd de beschrijving nog een paar keer lezen, op zoek naar het addertje onder het gras wat er niet zat 8)7 . Wel voor het eerst met numpy aan de slag, maakt de differencing toch net weer iets korter.
Geen goede score, want in het weekend sta ik niet om 6 uur hiervoor op :+

Verandert z'n sig te weinig.


Acties:
  • 0 Henk 'm!

  • FCA
  • Registratie: April 2000
  • Laatst online: 10:47

FCA

Soultaker schreef op zaterdag 9 december 2023 @ 09:02:
Okee, omdat hij vandaag zo makkelijk was, hier een iets grotere invoer: aoc-2023-day-09-challenge-1.zip

Ik heb een Python-oplossing die dit in 500 ms uitrekent. De correcte antwoorden zijn van de vorm: 37557...60469 en 10610...69740 respectievelijk.

Let op: de antwoorden zijn grote getallen. Als je een taal gebruikt zonder BigInt library of iets dergelijks, maak ik de uitdaging iets anders: bereken alleen de laatste 9 cijfers van elk antwoord. Als straf vermenigvuldig ik je oplossingstijd dan mentaal met 10 :P
Deze voldoet strikt genomen niet aan de omschrijving van de puzzel volgens mij:
If that sequence is not all zeroes, repeat this process
en de eerste regel heeft niet genoeg elementen om alles tot 0 te reduceren als ik het goed heb (je houd 1 niet-0 element over aan het einde).

Voor wat het waard is: mijn numpy implementatie krijgt de correcte antwoorden als ik afbreek bij lengte 1 (met "int objects" in de array, zodat we arbitrary length integers hebben) en doet 10.8 sec over deze input.

[ Voor 9% gewijzigd door FCA op 09-12-2023 10:48 ]

Verandert z'n sig te weinig.


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
torx schreef op zaterdag 9 december 2023 @ 09:23:
Ik heb de code voor deel 2
spoiler:
niet bijgewerkt, maar gewoon de invoerwaarden omgedraaid voor elke regel.

Ik had niet gelijk verwacht dat dit zou werken, maar gewoon geprobeerd en het was het juiste antwoord :)
Haha, briljant.
spoiler:
Deel 1 was bij mij een gewone sommatie van de laatste waarden, deel 2 een alternerende som van de eerste waarden.

When life gives you lemons, start a battery factory

Pagina: 1 ... 5 ... 11 Laatste