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 ... 4 ... 11 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Remcoder schreef op dinsdag 5 december 2023 @ 19:11:
spoiler:
Hoe krijgen mensen een runtime met een resultaat in minuten?

Mijn eerste poging vrat in no time al het geheugen op. Alle seeds maken en in het geheugen proppen was blijkbaar niet zo snugger.

Mijn tweede poging zou vast nu nog aan het lopen zijn.

En mijn derde poging was klaar binnen 8 seconden, wat ik al veel vind. Daarbij begin ik met location 0, die reken ik terug naar een seed en dat net zo lang ophogen tot ik een seed in range vond.

Zonder parallelisatie, dus mijn machine stond lekker single threaded te stampen.

Dus, hoe kom je tot een runtime die realistisch in minuten kan tellen?
spoiler:
Geen daadwerkelijke lists maar ranges / progressions gebruiken scheelt al enorm in het geheugen.
Als je dan vervolgens door je ranges heen loopt doe je een reduce operatie waardoor je niet de mapping of het resultaat in het geheugen houdt, maar enkel de tot dan bekende minimale waarde. Je loopt dus wel idioot veel "seeds" door, maar je geheugen klapt er niet uit.

"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!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:05
Voor deel 2 ben ik voor de brute-force methode gegaan en was verbaasd dat hij al in enkele minuten met een antwoord kwam :D

spoiler:
Om geheugenproblemen te voorkomen heb ik enkel 1 variabel bijgehouden genaamd 'lowest'. En dan gewoon met een basic for-loop door de hele range lopen zonder er eerst een lange array van te maken.

Binnen de for-loop checken of de locatie hoger of lager is dan de huidige lower en updaten als de waarde lager is.


Oplossing in TypeScript: https://github.com/WernerLDev/AOC2023/blob/main/day5/day5.ts

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


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Mugwump schreef op dinsdag 5 december 2023 @ 19:21:
spoiler:
Geen daadwerkelijke lists maar ranges / progressions gebruiken scheelt al enorm in het geheugen.
Als je dan vervolgens door je ranges heen loopt doe je een reduce operatie waardoor je niet de mapping of het resultaat in het geheugen houdt, maar enkel de tot dan bekende minimale waarde. Je loopt dus wel idioot veel "seeds" door, maar je geheugen klapt er niet uit.
Wat is hier het praktisch voordeel van t.o.v.
spoiler:
elk punt 1 voor 1 naar de eindlocatie mappen? Je moet in beide gevallen toch elk punt met alle ranges vergelijken? Dan lijkt het me strict simpeler en net zo snel (of sneller) om punt voor punt te werken.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Soultaker schreef op dinsdag 5 december 2023 @ 20:12:
[...]

Wat is hier het praktisch voordeel van t.o.v.
spoiler:
elk punt 1 voor 1 naar de eindlocatie mappen? Je moet in beide gevallen toch elk punt met alle ranges vergelijken? Dan lijkt het me strict simpeler en net zo snel (of sneller) om punt voor punt te werken.
spoiler:
Ook in mijn geval loop je er gewoon 1 voor 1 doorheen. Wat je niet doet is een lijstje opbouwen van alle gemapte eindlocaties en daar aan het einde het minimum van bepalen. Dat betekent namelijk dat het hele lijstje in je geheugen moet.

"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: 22:47
Dit kun je nog verder optimaliseren
spoiler:
door ranges en map entries eerst te sorteren, waarna je in lineaire tijd door beide heen kunt lopen.
.

spoiler:
Je huidige oplossing is O(NM) per map, waarbij N het aantal ranges is en M het aantal triples in de map. Als je zowel de ranges als de map entries sorteert wordt dat O(N log N + M log M). Is overigens niet strict beter: als N óf M heel klein is is O(NM) sneller, maar ik denk dat het bij de gegeven invoer wel uit kan.

Zie m'n Python oplossing voor details.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 21:19
part 1 appeltje eitje.. part 2.. ik krijg met R de interval-intersections en differences niet goed voor elkaar.... daar ga ik morgen nog even verder mee stoeien..
Conceptueel heb ik het wel scherp, maar krijg het niet vertaald :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Mugwump schreef op dinsdag 5 december 2023 @ 20:37:
spoiler:
Ook in mijn geval loop je er gewoon 1 voor 1 doorheen. Wat je niet doet is een lijstje opbouwen van alle gemapte eindlocaties en daar aan het einde het minimum van bepalen. Dat betekent namelijk dat het hele lijstje in je geheugen moet.
Ik geloof niet dat ik helemaal begrijp wat je bedoelt. Heb je dit idee geïmplementeerd?

spoiler:
Je kunt niet per map een minimum bijhouden want de seed die uiteindelijk op de minimumlocatie terecht komt kan tussendoor allerlei verschillende tussenwaarden gehad hebben. Je kunt om dezelfde reden niet alleen het minimum van een range bijhouden.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op dinsdag 5 december 2023 @ 20:45:
[...]

Dit kun je nog verder optimaliseren
Joh, maar met <1ms is de noodzaak daarvoor een beetje weg ;). En ik vraag me serieus af of het sneller is in dit geval.

[ Voor 12% gewijzigd door .oisyn op 05-12-2023 20: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!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Soultaker schreef op dinsdag 5 december 2023 @ 20:51:
[...]

Ik geloof niet dat ik helemaal begrijp wat je bedoelt. Heb je dit idee geïmplementeerd?

spoiler:
Je kunt niet per map een minimum bijhouden want de seed die uiteindelijk op de minimumlocatie terecht komt kan tussendoor allerlei verschillende tussenwaarden gehad hebben. Je kunt om dezelfde reden niet alleen het minimum van een range bijhouden.
spoiler:
Ja we praten langs elkaar heen.
Ik heb het erover dat je één iteratie doet van seed door de hele keten naar een locatie. Dan pak je de volgende seed en doe je hetzelfde, maar aan het eind behoud je de laagste waarde van de twee en zo door.

Als mensen tegen geheugenproblemen aan lopen is dat doorgaans vanwege grote data structuren in je geheugen, dus b.v. het resultaat van elke mapping van seed naar location bijhouden in een lijstje en pas aan het eind de minimale waarde uit dat lijstje selecteren oid

"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: 22:47
Mugwump schreef op dinsdag 5 december 2023 @ 21:10:
spoiler:
Ja we praten langs elkaar heen.
Ik heb het erover dat je één iteratie doet van seed door de hele keten naar een locatie. Dan pak je de volgende seed en doe je hetzelfde, maar aan het eind behoud je de laagste waarde van de twee en zo door.
Aha, dat is precies de oplossing waar ik ook op doelde. Ik had je verkeerd begrepen.

Acties:
  • 0 Henk 'm!

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

P_Tingen

omdat het KAN

Remcoder schreef op dinsdag 5 december 2023 @ 19:11:
spoiler:
Hoe krijgen mensen een runtime met een resultaat in minuten?

Mijn eerste poging vrat in no time al het geheugen op. Alle seeds maken en in het geheugen proppen was blijkbaar niet zo snugger.

Mijn tweede poging zou vast nu nog aan het lopen zijn.

En mijn derde poging was klaar binnen 8 seconden, wat ik al veel vind. Daarbij begin ik met location 0, die reken ik terug naar een seed en dat net zo lang ophogen tot ik een seed in range vond.

Zonder parallelisatie, dus mijn machine stond lekker single threaded te stampen.

Dus, hoe kom je tot een runtime die realistisch in minuten kan tellen?
spoiler:
Nou... Om te beginnen een taal kiezen die niet voor dit soort dingen gemaakt is. Ik werk in Progress 4GL en dat is een vre-se-lijk trage taal als je het vergelijkt met andere talen als c# en python.

Een van mijn pogingen was ook om achterstevoren de laagste locatie te berekenen. Dus met 0 begonnen en uiteindelijk op 11 miljoen nog wat uitgekomen. Dat duurt dus iets van 20 minuten.

Latere verfijning zorgde voor een tijd van 2 msec overigens, maar dat was geen brute force meer

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


Acties:
  • 0 Henk 'm!

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 22:36
Leuk om weer mee te doen aan AoC. Alhoewel ik professioneel developer ben, is het snel oplossen van dit soort puzzels wel even andere koek. Ik kom er wel uit, en t/m vandaag waren de antwoorden die ik in de AoC-site heb ingevoerd ook direct correct, maar het duurt vaak relatief lang voor ik een werkend geheel heb. Waarschijnlijk een kwestie van veel oefenen van dit soort puzzels en minder focussen op patterns/leesbare code :)

Vandaag begint het wel echt interessant te worden. Deel 1 was na het parsen van de file best eenvoudig om het antwoord te berekenen, maar deel 2 moet ik toch echt even beter m'n best voor doen. Voor deel 2 heb ik in eerste instantie een naieve brute-force oplossing gebouwd, maar die duurt echt vreselijk lang: ruim een kwartier. Aangezien ik hier tijden voorbij zie komen van minder dan een seconde, heb ik ondertussen na zitten denken of ik dit op een andere manier kan oplossen.

spoiler:
In plaats van alle seed ranges bij langs te crossen en door meerdere mappers heen te duwen, ben ik van plan om op basis van de boundaries van de huidige ranges en de volgende map ranges te berekenen welke nieuwe ranges ontstaan uit een input range. Dan hoef je maar een aantal waarden met elkaar te vergelijken i.p.v. een paar miljard :x. Ik denk dat dat al een enorme verbetering is. Ik zal later even in jullie spoilers kijken of het nog slimmer kan :)

Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
spoiler:
Bij deel 1.

Weet niet of anderen dit ook gevonden hebben, maar toen ik ermee bezig was viel me de relatie tussen de drie getallen op en de "beweging" die daarmee gecreëerd word.

Source = range start;
Source + Range lengte = Range einde
Destination - Source = Het verschil dat wordt opgeteld bij de het voortgaande getal. Kan ook negatief zijn.

bv.: 50 98 2
Start: 98
End: 100 (start + lengte)
Diff: -48 (Dst - src)

Zo kun je alle entries van de secties omrekenen.

Vervolgens (beginnend met het seed getal) doorloop je een sectie totdat je een Start en End vind waarbinnen het getal ligt. Bij het voortgaande getal (seed) wordt dan Diff opgeteld.

Met dat getal doe je de volgende sectie.

Dan alleen nog de laagste waarde bijhouden als alle secties doorlopen zijn.

In C#:
Inlezen en voorbereiden van de data ca. 0.3 ms.
Alleen de tijd die wordt besteed aan het zoeken (alle seeds verwerken) naar het laagste nummer gaat in ca. 0.01 ms

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
Zo, weer een dagje klaar! Heel naïef begonnen met pandas dataframes, en het plan om die te joinen... :+
Uiteindelijk toch een relatief snelle oplossing in elkaar weten te draaien, en (voor deel 2) de top 1000 gehaald!

Hier de code: dag 5, en voor de liefhebbers ook nog dag 4.

Acties:
  • +1 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 20:32
Mugwump schreef op dinsdag 5 december 2023 @ 21:10:
[...]
spoiler:
Als mensen tegen geheugenproblemen aan lopen is dat doorgaans vanwege grote data structuren in je geheugen, dus b.v. het resultaat van elke mapping van seed naar location bijhouden in een lijstje en pas aan het eind de minimale waarde uit dat lijstje selecteren oid
spoiler:
Ja, dat had ik bij mijn eerste poging.
Daarna had ik deze herschreven naar een iterator/stream, waardoor het geheugen drastisch naar beneden ging. Je houdt immer dan niet meer het volledige lijstje in geheugen. Dus ik ging van 20GB naar 5MB.
Alleen de snelheid ging niet omhoog, omdat ik werkte met de losse waardes.
(dat heb ik dus nog wel voor de oplossing van deel 1)

Ik merkte toen ook die "beweging" op en dacht dat ik het op kon lossen door alle secties te comprimeren tot 1 getal. Maar die samenvoeging werd me te complex.

Pas daarna ben ik begonnen om met ranges te werken en die te verwerken (lijst met ranges in -> lijst met bijgewerkte ranges uit).
En daarmee werd de snelheid en geheugenverbruik ook ok.
Enkel met alleen het startgetal van een seed rekening houden heb ik niet gedaan. Het leek me dat het voor kan komen dat ranges gesplitst kunnen worden en het ene deel lager uitkomt dan de andere. Maar mogelijk hebben ze dat scenario niet in de testdata gezet.

let the past be the past.


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
.oisyn schreef op dinsdag 5 december 2023 @ 20:53:
Joh, maar met <1ms is de noodzaak daarvoor een beetje weg ;).
Dat hield je in het verleden niet tegen ;)
En ik vraag me serieus af of het sneller is in dit geval.
Ik heb het voor de grap nog eens geïmplementeerd in C++ en het lijkt wel iets sneller te zijn op de officiële testdata:
Parsing took 141082 ns
part1 Solve1() took 4529 ns/run (100000 runs)
part1 Solve2() took 3615 ns/run (100000 runs)
240320250
part2 Solve1() took 8948 ns/run (100000 runs)
part2 Solve2() took 5634 ns/run (100000 runs)
28580589

Alleen jammer dat de solve-tijd gedomineerd wordt door de parse-tijd.

Acties:
  • 0 Henk 'm!

  • Mschamp
  • Registratie: April 2014
  • Laatst online: 22:18
Puzzel van vandaag was wel heel goed te doen

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Dag 6
spoiler:
was gewoon te bruteforcen :/


Hier wat interessantere invoeren (voor 31-bit, 63-bit en 127-bit respectievelijk):

Time:               6074001000
Distance:  9223372036854775807


Antwoord eindigt op ...123.

Time:               2878053387
Distance:  1661589816380250885


Antwoord eindigt op ...366.

Time:                        16107645505445695488
Distance:  64856007359523503909674096462042349751


Antwoord eindigt op ...377.

En een grote:

Time: 942 952 879 579 439 716 41 863 672 758 528 535 560 153 302 21 54 825 153 289 705 973 442 333 168 999 367 234 632 435 51 293 69 544 616 628 540 755 620 444 827 50 155 78 745 712 796 554 840 656 753 450 382 188 741 399 700 250 402 835 930 19 994 1000 809 44 305 231 351 20 704 721 814 426 432 902 116 216 738 337 910 178 163 963 211 842 819 659 637 156 608 405 38 135 52 897 609 344 765 552
Distance: 89127 76021 135371 51132 47001 47639 377 176076 973 113909 30127 10947 65832 5791 16326 2 189 62416 1438 4972 6934 158395 19677 5785 5512 93405 20410 5896 91086 14413 111 2355 793 49942 86437 82740 2350 134755 13471 6812 121661 511 408 914 16242 32058 10848 44489 90655 76682 12890 13931 26028 4992 59719 22206 120495 14144 3100 134076 56529 40 164397 211741 143772 439 3742 308 14890 44 29613 87001 116541 7337 36803 42677 1733 1562 52054 25174 76647 5313 1346 27753 263 21555 106686 5562 8227 1231 42203 1039 317 1575 331 76109 47959 7283 14132 24485


Eerste antwoord begint met 233404...
Tweede antwoord eindigt met ...909131

Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17

Acties:
  • 0 Henk 'm!

  • rengeltje
  • Registratie: September 2005
  • Laatst online: 19-07 07:52
Mschamp schreef op woensdag 6 december 2023 @ 06:52:
Puzzel van vandaag was wel heel goed te doen
Zeker, geeft me wat tijd om deel 2 van gisteren nog af te maken :-)

Oplossing voor deel 2 was zelfs heel makkelijk:
spoiler:
Ik heb letterlijk gewoon alle spaties uit de invoer weggehaald en verder precies dezelfde oplossing als deel 1 gebruikt :P. Moest alleen mijn debug statement om de tussenwaardes af te drukken even weghalen, omdat dat langer duurde dan ik geduld had om op te wachten.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Soultaker schreef op woensdag 6 december 2023 @ 06:59:
Dag 6
spoiler:
was gewoon te bruteforcen :/


Hier wat interessantere invoeren (voor 31-bit, 63-bit en 127-bit respectievelijk):

Time:               6074001000
Distance:  9223372036854775807


Antwoord eindigt op ...123.

Time:               2878053387
Distance:  1661589816380250885


Antwoord eindigt op ...366.

Time:                        16107645505445695488
Distance:  64856007359523503909674096462042349751


Antwoord eindigt op ...377.

En een grote:

Time: 942 952 879 579 439 716 41 863 672 758 528 535 560 153 302 21 54 825 153 289 705 973 442 333 168 999 367 234 632 435 51 293 69 544 616 628 540 755 620 444 827 50 155 78 745 712 796 554 840 656 753 450 382 188 741 399 700 250 402 835 930 19 994 1000 809 44 305 231 351 20 704 721 814 426 432 902 116 216 738 337 910 178 163 963 211 842 819 659 637 156 608 405 38 135 52 897 609 344 765 552
Distance: 89127 76021 135371 51132 47001 47639 377 176076 973 113909 30127 10947 65832 5791 16326 2 189 62416 1438 4972 6934 158395 19677 5785 5512 93405 20410 5896 91086 14413 111 2355 793 49942 86437 82740 2350 134755 13471 6812 121661 511 408 914 16242 32058 10848 44489 90655 76682 12890 13931 26028 4992 59719 22206 120495 14144 3100 134076 56529 40 164397 211741 143772 439 3742 308 14890 44 29613 87001 116541 7337 36803 42677 1733 1562 52054 25174 76647 5313 1346 27753 263 21555 106686 5562 8227 1231 42203 1039 317 1575 331 76109 47959 7283 14132 24485


Eerste antwoord begint met 233404...
Tweede antwoord eindigt met ...909131
spoiler:
Nou weet ik niet helemaal hoe je brute forcen interpreteert, maar ik deed gewoon in eerste instantie zoeken naar de eerste waarde in de range 1 <= .. <= time waarvoor a * (time - a) > distance en dan loopt het aantal geldige altijd van a tot time - a, dus dan is het totaal aantal oplossingen time - it * 2 +1. Of 0 als het onmogelijk is.

Beginnen bij distance / time +1 in plaats van bij 1 als startwaarde voor a schaaft er bij mij nog 2ms vanaf, maar het duurde sowieso maar 20ms. Dat is nog traag, maar ik merk wel dat ik nog wel echt wat 'Kotlin fundamentals' moet leren, want filter(filterexpressie).first() vs firstOrNull(filterexpressie) betekent 1s vs 20ms.

DIt is gewoon ook een heel triviaal wiskundig vraagstuk in de vorm min(a) where a + b = time and a*b > distance.
Daar is vast nog een elegantere wiskundige oplossing voor te verzinnen, maar met 18ms voor deel 2 vind ik het verder wel best. :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:
  • +1 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19-07 14:09

Dido

heforshe

rengeltje schreef op woensdag 6 december 2023 @ 07:06:
Oplossing voor deel 2 was zelfs heel makkelijk:
spoiler:
Ik heb letterlijk gewoon alle spaties uit de invoer weggehaald en verder precies dezelfde oplossing als deel 1 gebruikt :P. Moest alleen mijn debug statement om de tussenwaardes af te drukken even weghalen, omdat dat langer duurde dan ik geduld had om op te wachten.
spoiler:
Dat had ik ook gedaan om de ster te halen. Maar toch, 330 ms vond ik te lang. Daarom maar even een hele simpele optimalisatie doorgevoerd.
Vanaf 0 proberen hoe lang de distance te laag is, en daarna vanaf de top naar beneden hetzelfde, scheelt toch tientallen miljoenen berekeningen :P

Ik ga het deel 2 na de koffie misschien nog wel even in een eenvoudige formule gieten zonder loopjes O-)

[ Voor 6% gewijzigd door Dido op 06-12-2023 07:16 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Dido schreef op woensdag 6 december 2023 @ 07:14:
[...]

spoiler:
Dat had ik ook gedaan om de ster te halen. Maar toch, 330 ms vond ik te lang. Daarom maar even een hele simpele optimalisatie doorgevoerd.
Vanaf 0 proberen hoe lang de distance te laag is, en daarna vanaf de top naar beneden hetzelfde, scheelt toch tientallen miljoenen berekeningen :P

Ik ga het deel 2 na de koffie misschien nog wel even in een eenvoudige formule gieten zonder loopjes O-)
spoiler:
vanaf 0 is zinloos want 0*iets = 0, dus kleiner dan 1 zal de oplossing nooit zijn.
De stap om vanaf de top naar beneden te gaan is ook zinloos, want door vanaf onder te tellen weet je het antwoord al. vanaf onder krijg je a * b en vanaf boven b * a waarbij a het aantal ms is dat je het knopje ingedrukt houdt en b het aantal ms dat je vaart. Als je weet dat a de ondergrens is, dan is de bovengrens simpelweg time - a.

"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: 22:47
Mugwump schreef op woensdag 6 december 2023 @ 07:12:
Nou weet ik niet helemaal hoe je brute forcen interpreteert
Elk algoritme wat tijd proportioneel aan het aan antwoord nodig heeft is wat mij betreft brute force. Prima voor deel 1; voor deel 2 had het wat mij betreft wel iets uitdagender gemogen.

Acties:
  • +1 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17
Soultaker schreef op woensdag 6 december 2023 @ 07:22:
[...]

Elk algoritme wat tijd proportioneel aan het aan antwoord nodig heeft is wat mij betreft brute force. Prima voor deel 1; voor deel 2 had het wat mij betreft wel iets uitdagender gemogen.
Jammer idd, dat brute force nog werkte voor deel 2 :),
spoiler:
closed form oplossing is triviale middelbare school wiskunde.

Acties:
  • 0 Henk 'm!

  • FCA
  • Registratie: April 2000
  • Laatst online: 22:01

FCA

Het is weer een even dag, dus blijkbaar makkelijk....
spoiler:
voor mij zat de moeilijkheid hem in het goed afronden (naar beneden of naar boven), van de gevonden ondergrens en bovengrens. Uiteindelijk na 3 pogingen de juiste gevonden

Verandert z'n sig te weinig.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
MrHaas schreef op woensdag 6 december 2023 @ 07:25:
spoiler:
closed form oplossing is triviale middelbare school wiskunde.
spoiler:
De kwadratische formule oplossen is inderdaad een standaard probleem maar ik zat te pielen met de afronding. Ik heb het uiteindelijk maar met binary search opgelost, wat simpel genoeg is.
FCA schreef op woensdag 6 december 2023 @ 07:35:
spoiler:
voor mij zat de moeilijkheid hem in het goed afronden (naar beneden of naar boven), van de gevonden ondergrens en bovengrens. Uiteindelijk na 3 pogingen de juiste gevonden
spoiler:
Dit dus precies. Staat je code ergens online? Ben wel benieuwd hoe je 't opgelost hebt.

Acties:
  • +1 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
@Soultaker Daar heb ik ook een tijdje mee zitten stoeien, maar volgens mij is dit correct.

Acties:
  • +5 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:21

Reptile209

- gers -

Hilarisch dit! In een half uurtje met pen en papier aan de ontbijttafel opgelost.
spoiler:
Algemene vergelijking opgesteld voor de distance als functie van t en tmax. Die met de abc-formule omgeschreven naar de 2 vergelijkingen voor t. Laagste t naar boven afronden, hoogste naar beneden, verschil plus 1 geeft het aantal opties.

Met de Android calculator (die gelukkig ook voldoende precisie had voor deel 2) op het handje uitgerekend. :)

Zo scherp als een voetbal!


Acties:
  • +1 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17
Soultaker schreef op woensdag 6 december 2023 @ 07:45:
[...]

spoiler:
De kwadratische formule oplossen is inderdaad een standaard probleem maar ik zat te pielen met de afronding. Ik heb het uiteindelijk maar met binary search opgelost, wat simpel genoeg is.



[...]

spoiler:
Dit dus precies. Staat je code ergens online? Ben wel benieuwd hoe je 't opgelost hebt.
Ook ff mee zitten puzzelen, maar ik heb 'm zo: https://github.com/arjand...oc_2023/day06/solution.py

Acties:
  • 0 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-07 08:33
Soultaker schreef op woensdag 6 december 2023 @ 07:45:
[...]

spoiler:
De kwadratische formule oplossen is inderdaad een standaard probleem maar ik zat te pielen met de afronding. Ik heb het uiteindelijk maar met binary search opgelost, wat simpel genoeg is.
spoiler:
Ik zat ook binary search te overwegen, misschien dat ik het daarmee later vandaag nog ga oplossen.

Voor nu zoek ik de lowerbound door met een hold van 1 te beginnen en die op te hogen tot ik een winnende distance krijg, en hetzelfde voor de upperbound, maar dan begin ik met een hold van de racetime - 1.

Daarna is het antwoord (upperbound - lowerbound) + 1 :)

Voor nu runt dat al in een acceptabele tijd, en ik vraag me af of een binary search het echt substantieel zal versnellen met deze kleine search space, de meeste tijd wordt toch gespendeerd aan de file I/O bij mij. Maar het is zeker een goede oefening om weer eens een binary search te implementeren :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Friits schreef op woensdag 6 december 2023 @ 08:12:
@Soultaker Daar heb ik ook een tijdje mee zitten stoeien, maar volgens mij is dit correct.
Ah ja, dit is de juiste manier inderdaad (jullie hebben feitelijk precies dezelfde formule, wat natuurlijk ook logisch is). Mijn probleem was dat ik
spoiler:
de expressie (t**2 - 4*d)**0.5 direct probeerde af te ronden en dat werkt steeds nét niet.

Overigens heeft deze aanpak weer als nadeel dat het floating point math gebruikt waardoor 'ie niet correct werkt voor grotere invoer. Dan zou je eigenlijk isqrt() moeten gebruiken. Maakt voor de officiële testdata gelukkig niet uit.
Remcoder schreef op woensdag 6 december 2023 @ 08:50:
spoiler:
Voor nu runt dat al in een acceptabele tijd, en ik vraag me af of een binary search het echt substantieel zal versnellen met deze kleine search space, de meeste tijd wordt toch gespendeerd aan de file I/O bij mij. Maar het is zeker een goede oefening om weer eens een binary search te implementeren :)
spoiler:
I/O valt bij dit probleem toch wel mee?

En als je de limieten van je huidige aanpak wil ervaren kun je de grotere test inputs hier proberen.

Acties:
  • +2 Henk 'm!

  • FCA
  • Registratie: April 2000
  • Laatst online: 22:01

FCA

Soultaker schreef op woensdag 6 december 2023 @ 07:45:
[...]

spoiler:
De kwadratische formule oplossen is inderdaad een standaard probleem maar ik zat te pielen met de afronding. Ik heb het uiteindelijk maar met binary search opgelost, wat simpel genoeg is.



[...]

spoiler:
Dit dus precies. Staat je code ergens online? Ben wel benieuwd hoe je 't opgelost hebt.
spoiler:
door de verschillende mogelijkheden in te vullen :X :X. Volgens mij zou het gewoon goed moeten gaan met:
[code]
int(math.floor(bovengrens)) - int(math.ceil(ondergrens)) +1[/code]
(De laatste +1 omdat je een een beide zijde inclusieve range bekijkt), maar op 1 of andere manier werden mijn beide grenzen negatief, waardoor je dus moet omdraaien, en ik had er om kwart over 6 even geen zin meer in om dat te debuggen, ontbijt moest nog worden klaargezet.

Verandert z'n sig te weinig.


Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 18-07 20:52

MadEgg

Tux is lievvv

spoiler:
Ze hadden het probleem iets groter moeten maken om mij uit te dagen het algebraïsch op te lossen.

Brute force FTW in dit geval. Met 1.4 seconde geen onacceptabele tijd


Dag 6 - Kotilin

Tja


Acties:
  • +2 Henk 'm!

  • bakkerjangert
  • Registratie: Februari 2012
  • Laatst online: 08-07 14:53
Makkelijk voor mij als Engineer vandaag.

spoiler:
Je hoeft slechts 1 punt te bepalen, het andere kun je dan makkelijk berekenen. Afbeeldingslocatie: https://tweakers.net/i/KLrGbYf0DP5CRDhXwpTSsAUsbEI=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/WvKsTBsfhDY3fA0nSBNIbTbf.png?f=user_large

Acties:
  • +1 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-07 08:33
Soultaker schreef op woensdag 6 december 2023 @ 09:09:
[...]


[...]

Ah ja, dit is de juiste manier inderdaad (jullie hebben feitelijk precies dezelfde formule, wat natuurlijk ook logisch is). Mijn probleem was dat ik
spoiler:
de expressie (t**2 - 4*d)**0.5 direct probeerde af te ronden en dat werkt steeds nét niet.

Overigens heeft deze aanpak weer als nadeel dat het floating point math gebruikt waardoor 'ie niet correct werkt voor grotere invoer. Dan zou je eigenlijk isqrt() moeten gebruiken. Maakt voor de officiële testdata gelukkig niet uit.



[...]

spoiler:
I/O valt bij dit probleem toch wel mee?

En als je de limieten van je huidige aanpak wil ervaren kun je de grotere test inputs hier proberen.
Voor de 63 bits variant heeft die 830 ms nodig.

Voor de 127 bits variant en groter moet ik gaan werken met BigIntegers, en die geven toch wel een riante performance hit in Java...

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:11

MueR

Admin Tweakers Discord

is niet lief

spoiler:
Na de toch wel stevige opdracht gisteren (iig om het een beetje performant te krijgen), was dit echt een eitje..

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • htca
  • Registratie: November 2001
  • Laatst online: 22:39
spoiler:
Tweede graadsvergelijking opstellen.... was redelijk snel geluk

Acties:
  • 0 Henk 'm!

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

spoiler:
In eerste instantie brute force vanaf t=1 en t=time - 1, dan het sommetje tussen deze twee punten. p2 runde in ~3s dus toch maar een binary search geïmplementeerd. Had ook geen zin om de vergelijking op te lossen, wel benieuwd naar de oplossing!

[ Voor 6% gewijzigd door Diderikdm op 06-12-2023 10:43 ]


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
MadEgg schreef op woensdag 6 december 2023 @ 09:13:
spoiler:
Ze hadden het probleem iets groter moeten maken om mij uit te dagen het algebraïsch op te lossen.

Brute force FTW in dit geval. Met 1.4 seconde geen onacceptabele tijd


Dag 6 - Kotilin
spoiler:
Zelfs "brute force" kan nog veel sneller. :P

(0..race.first).map { race.first * it - (it * it) }.count { it > race.second }

vervangen door iets als:

(1..time).firstOrNull { it * (time - it) > distance }?.let { (time - it * 2) + 1 } ?: 0

"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: 18-07 20:52

MadEgg

Tux is lievvv

Mugwump schreef op woensdag 6 december 2023 @ 10:34:
[...]

spoiler:
Zelfs "brute force" kan nog veel sneller. :P

(0..race.first).map { race.first * it - (it * it) }.count { it > race.second }

vervangen door iets als:

(1..time).firstOrNull { it * (time - it) > distance }?.let { (time - it * 2) + 1 } ?: 0
spoiler:
Dat is toch geen brute force meer? Hierbij zoek je de eerste die matched in de wetenschap dat het symmetrisch is en alles tussen die offset en die offset van het einde dus een oplossing is. Hangt een beetje van je definitie van brute force af, maar goed. Wat mij betreft is brute force domweg elke mogelijkheid proberen, dat is wat mijn stukje code doet :)

Tja


Acties:
  • +1 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
MadEgg schreef op woensdag 6 december 2023 @ 10:36:
[...]


spoiler:
Dat is toch geen brute force meer? Hierbij zoek je de eerste die matched in de wetenschap dat het symmetrisch is en alles tussen die offset en die offset van het einde dus een oplossing is. Hangt een beetje van je definitie van brute force af, maar goed. Wat mij betreft is brute force domweg elke mogelijkheid proberen, dat is wat mijn stukje code doet :)
spoiler:
Nou ja, er zit inderdaad het handigheidje van de symmetrie in, maar het schaalt natuurlijk nog steeds mee met de grootte van time en distance.

Feitelijk zoek je de minimale waarde voor x * (time -x ) > distance en dat kun je oplossen met de kwadratische formule zoals anderen al aangeven. Dan hoef je slechts een berekening te doen waar je beide waarden ingooit. Met mijn oplossing moet je nog steeds vanaf 1 door het lijstje heen lopen totdat je de eerste a tegenkomt waarvoor a * (time - a) > distance geldt.

"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: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op woensdag 6 december 2023 @ 00:11:
Ik heb het voor de grap nog eens geïmplementeerd in C++ en het lijkt wel iets sneller te zijn op de officiële testdata:
Parsing took 141082 ns
part1 Solve1() took 4529 ns/run (100000 runs)
part1 Solve2() took 3615 ns/run (100000 runs)
240320250
part2 Solve1() took 8948 ns/run (100000 runs)
part2 Solve2() took 5634 ns/run (100000 runs)
28580589

Alleen jammer dat de solve-tijd gedomineerd wordt door de parse-tijd.
Oh cool.
De grap is dat ik meer variantie heb tussen verschillende runs dan dat je wint met die optimalisatie :D
Vorig jaar gebruikte ik een AVX string to int parser die met een paar instructies een int kon parsen. Ben wel benieuwd hoeveel dat zou schelen.

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!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-07 08:33
Remcoder schreef op woensdag 6 december 2023 @ 09:26:
[...]

Voor de 63 bits variant heeft die 830 ms nodig.

Voor de 127 bits variant en groter moet ik gaan werken met BigIntegers, en die geven toch wel een riante performance hit in Java...
Hij staat al sinds de post te stampen met BigIntegers en heeft nog geen resultaat, ik vermoed dat het niet helemaal lekker schaalt. :P

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

day6
Time spent: 166.9µs
Soultaker schreef op woensdag 6 december 2023 @ 07:45:
[...]

spoiler:
De kwadratische formule oplossen is inderdaad een standaard probleem maar ik zat te pielen met de afronding. Ik heb het uiteindelijk maar met binary search opgelost, wat simpel genoeg is.
spoiler:
min = floor(min) + 1
max = ceil(max) - 1

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: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Reptile209 schreef op woensdag 6 december 2023 @ 08:22:
Hilarisch dit! In een half uurtje met pen en papier aan de ontbijttafel opgelost.
spoiler:
Algemene vergelijking opgesteld voor de distance als functie van t en tmax. Die met de abc-formule omgeschreven naar de 2 vergelijkingen voor t. Laagste t naar boven afronden, hoogste naar beneden, verschil plus 1 geeft het aantal opties.

Met de Android calculator (die gelukkig ook voldoende precisie had voor deel 2) op het handje uitgerekend. :)
FCA schreef op woensdag 6 december 2023 @ 09:12:
[...]

spoiler:
door de verschillende mogelijkheden in te vullen :X :X. Volgens mij zou het gewoon goed moeten gaan met:
[code]
int(math.floor(bovengrens)) - int(math.ceil(ondergrens)) +1[/code]
(De laatste +1 omdat je een een beide zijde inclusieve range bekijkt), maar op 1 of andere manier werden mijn beide grenzen negatief, waardoor je dus moet omdraaien, en ik had er om kwart over 6 even geen zin meer in om dat te debuggen, ontbijt moest nog worden klaargezet.
spoiler:
Die van jullie gaan beide fout wanneer de vergelijking een integer oplevert. Dan zit je precies op het record en die voldoet dus niet.

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!

  • Kazu
  • Registratie: Juni 2004
  • Laatst online: 16-07 18:04
spoiler:
Erg makkelijk vandaag, inderdaad. Gewoon brute force gedaan, al was het opstellen van een vergelijking een stuk logischer :+

https://github.com/Unreal...n/day6-second/src/main.rs

Ik merk sinds gisteren dat ik eindelijk wat in Rust begin te raken. Minder gestoei, dus dat is fijn :D

Nu nog even de tijd vinden om naar deel 2 van gisteren kijken. Ik had alleen tijd voor deel 1, en in de wandeling van het station naar huis deel 2 in m'n hoofd opgelost. Nu nog daadwerkelijk implementeren.

PS5 PSN: UnrealKazu


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:21

Reptile209

- gers -

.oisyn schreef op woensdag 6 december 2023 @ 13:11:
[...]


[...]


spoiler:
Die van jullie gaan beide fout wanneer de vergelijking een integer oplevert. Dan zit je precies op het record en die voldoet dus niet.
Klopt. Maar die zat bij mij alleen in het voorbeeld, niet in de echte opgave. En met de hand corrigeer je dat makkelijk :). Is wel een leuke edge-case idd.

Zo scherp als een voetbal!


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Reptile209 schreef op woensdag 6 december 2023 @ 13:18:
[...]

Klopt. Maar die zat bij mij alleen in het voorbeeld, niet in de echte opgave. En met de hand corrigeer je dat makkelijk :). Is wel een leuke edge-case idd.
spoiler:
Maar dus makkelijk op te lossen door ipv omhoog af te ronden, naar beneden af te ronden en dan +1, en vice versa :)

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!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19-07 14:09

Dido

heforshe

Mugwump schreef op woensdag 6 december 2023 @ 07:19:
[...]


spoiler:
vanaf 0 is zinloos want 0*iets = 0, dus kleiner dan 1 zal de oplossing nooit zijn.
De stap om vanaf de top naar beneden te gaan is ook zinloos, want door vanaf onder te tellen weet je het antwoord al. vanaf onder krijg je a * b en vanaf boven b * a waarbij a het aantal ms is dat je het knopje ingedrukt houdt en b het aantal ms dat je vaart. Als je weet dat a de ondergrens is, dan is de bovengrens simpelweg time - a.
spoiler:
Ik had het over deel twee. Daar gaat het om "iets" meer mogelijkheden, waarvan je alleen de kleinste en de grootste nodig hebt. Die zijn prima te vinden door vanaf 0 (of vanaf 1, kniesoor die daar op let) te zoeken, resp vanaf de bovenkant naar beneden te gaan. Daarmee skip je tientallen miljoenen berekeningen die nergens voor nodig zijn.
Edit: en nog makkelijker is inzien dat eea symmetrisch is, natuurlijk :X


Maar goed, uiteindelijk loopt ook deel twee in minder dan 1 ms
spoiler:
de minimum en maximumtijd zijn gewoon de oplossingen van een simpele kwadratisch vergelijking, dus kun je in 1 keer berekenen zonder ook maar een enkele loop voor deel twee, en voor deel1, 1 heel klein loopje.

[ Voor 5% gewijzigd door Dido op 06-12-2023 16:24 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:05
Wow vandaag was wel erg makkelijk. Zelfs met simpele bruteforce binnen enkele milliseconden de juiste antwoorden.

In slechts een kwartiertje dit in elkaar geprutst: https://github.com/WernerLDev/AOC2023/blob/main/day6/day6.ts

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


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:22

Creepy

Tactical Espionage Splatterer

Dag 6 was weer erg makkelijk idd: https://github.com/CodeEn...23/blob/main/days/Day6.go

Nu verder prutsen met deel 2 van gisteren..... ik heb een idee maar dat werkt nog niet helemaal.

"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!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:22

Creepy

Tactical Espionage Splatterer

En dag 5 deel 2 ook af. Ik was gisteren echt te gaar om die off by one error te spotten :P

spoiler:
for mapI := len(maps) - 1; mapI > 0; mapI-- {

vs

for mapI := len(maps) - 1; mapI >= 0; mapI-- {

"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!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Na een lange dag op het werk was ik wel blij met hoe simpel deze was, qua tijd benodigd (brute-force met een loop, niet met algebra). Had wel een dag 1 vraag kunnen zijn...

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

There's no place like 127.0.0.1


Acties:
  • +1 Henk 'm!

  • gedonie
  • Registratie: Januari 2011
  • Laatst online: 17-07 19:38
MatHack schreef op woensdag 6 december 2023 @ 20:07:
Na een lange dag op het werk was ik wel blij met hoe simpel deze was, qua tijd benodigd (brute-force met een loop, niet met algebra). Had wel een dag 1 vraag kunnen zijn...

https://github.com/realma...de.Y2023/Solvers/Day06.cs
De brute force had nog iets korter gekund door pas vanaf de helft van time te beginnen. En dan te kijken hoeveel er verder komen om vervolgens het aantal × 2 te doen. Moet je voor even tijden nog 1 er van af en klaar ben je.

Acties:
  • 0 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 20:06

TrailBlazer

Karnemelk FTW

kon me er niet eens toe zetten om de input voor task 2 vandaag netjes in code te schrijven gewoon direct
in mijn functie aanroep gezet met het handje

Acties:
  • 0 Henk 'm!

  • Visitor.q
  • Registratie: Augustus 2006
  • Laatst online: 18-07 11:27
spoiler:
ik heb de parabolische ongelijkheid naar een vergelijking omgezet en je kunt het in principe doen met pen en papier, maar numpy.roots is een prima routine om alle nulpunten van een polynoom te bepalen, een als je de uitkomsten floor'ed ben je er al. Wel even rekening houden met het feit dat je strict onder de record tijd moet zitten, en niet precies er op.

Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen

[ Voor 16% gewijzigd door Visitor.q op 07-12-2023 00:28 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Dag 7:
spoiler:
Vooral een kwestie van het niet al te mooi willen doen. Ik heb bij deel 2 dus gewoon lekker brute force alle mogelijke combinaties uitgeprobeerd. Dat kan in theorie sneller maar dat was hier niet eens nodig.

Mijn Python code

Acties:
  • 0 Henk 'm!

  • CrossProd
  • Registratie: November 2014
  • Laatst online: 07-07 20:14
Vandaag gewoon implementeren zonder al te veel nadenken:

Dag 7 in Swift

Acties:
  • 0 Henk 'm!

  • FCA
  • Registratie: April 2000
  • Laatst online: 22:01

FCA

Dag 7:
spoiler:
Pff... moest even opzoeken hoe je ook alweer een custom comparator schreef in Python :X.

Maar goed, met onderbreking door ontbijt voor de kantoorganger toch redelijk snel opgelost
en deel 2 was bijna automatisch, moest alleen mijn Counter vervangen door even snel een dict opbouwen, en dan het aantal jokers optellen bij de meest-voorkomende.
Wel grappige edge case, blijkbaar kan 5 jokers ook. Stelletje jokers die elfjes :+

Verandert z'n sig te weinig.


Acties:
  • +4 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
Leuk puzzeltje vandaag; deel 1 lekker eenvoudig, deel 2 een leuke twist!

Mijn oplossing (Python)

Acties:
  • 0 Henk 'm!

  • Mschamp
  • Registratie: April 2014
  • Laatst online: 22:18
Dag 7 in C#
Leuke puzzel vandaag

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

CrossProd schreef op donderdag 7 december 2023 @ 07:16:
Vandaag gewoon implementeren zonder al te veel nadenken:
Inderdaad. Dag 7 in Java.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Friits schreef op donderdag 7 december 2023 @ 07:38:
Leuk puzzeltje vandaag; deel 1 lekker eenvoudig, deel 2 een leuke twist!

Mijn oplossing (Python)
Oh, damn! Ik heb het echt vééééél te ingewikkeld gemaakt vandaag 8)7

(Maar toch was ik de eerste op het Tweakers leaderboard, dus misschien is snel maar dom soms toch beter dan slim.)

Acties:
  • 0 Henk 'm!

  • rengeltje
  • Registratie: September 2005
  • Laatst online: 19-07 07:52
Friits schreef op donderdag 7 december 2023 @ 07:38:
Leuk puzzeltje vandaag; deel 1 lekker eenvoudig, deel 2 een leuke twist!

Mijn oplossing (Python)
Zo, dat is lekker compact. Weer wat geleerd vandaag, over Counter. Nu nog wennen aan enumerate, ik ben nog te veel van for i in range(len(xxx)). Dat is wel het leukste aan deze wedstrijd, nieuwe dingen leren uit de taal die je al kent en er mee experimenteren.

Acties:
  • 0 Henk 'm!

  • Litpho
  • Registratie: Juni 2003
  • Laatst online: 14-12-2024
Mijn oplossing lijkt in lengte en structuur redelijk op de Swift oplossing van CrossProd (formele enums en alles). Hands met cards, rank en score met zelf geimplementeerde Ord en een rank die bepaald wordt tijdens Hand creatie op basis van de cards (en voor deel twee herbepaald wordt om de parsing niet ingewikkelder te maken).

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.

Correcte antwoorden eindigen op 8053 en 5512 voor deel 1 en deel 2 respectievelijk.

Acties:
  • +1 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
Soultaker schreef op donderdag 7 december 2023 @ 07:41:
(Maar toch was ik de eerste op het Tweakers leaderboard, dus misschien is snel maar dom soms toch beter dan slim.)
Ja, zo weinig code schrijven kost best veel tijd :P

Acties:
  • +1 Henk 'm!

  • CrossProd
  • Registratie: November 2014
  • Laatst online: 07-07 20:14
Soultaker schreef op donderdag 7 december 2023 @ 08:15:
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.

Correcte antwoorden eindigen op 8053 en 5512 voor deel 1 en deel 2 respectievelijk.
0.9 seconden inc parsen (75% van de tijd) met Swift.

Acties:
  • 0 Henk 'm!

  • bakkerjangert
  • Registratie: Februari 2012
  • Laatst online: 08-07 14:53
Veels te lang op deel 2 vast gezeten, totdat ..

De set van @Soultaker doet er bij mij ook circa 5 seconden over in python.

spoiler:
ik de opdracht nog eens goed las en merkte dat ik 'To balance this, J cards are now the weakest individual cards, weaker even than 2. The other cards stay in the same order: A, K, Q, T, 9, 8, 7, 6, 5, 4, 3, 2, J.' helemaal niet had gezien |:( . Daarna in 1x het goede antwoord.

[ Voor 19% gewijzigd door bakkerjangert op 07-12-2023 09:22 ]


Acties:
  • 0 Henk 'm!

  • mbe81
  • Registratie: Juni 2008
  • Laatst online: 00:09
Ik had voor vandaag wat meer regels code nodig:

https://github.com/mbe81/.../main/2023/day07/day07.go

Wel een redelijk snelle oplossing blijkbaar, ook met de input van @Soultaker is deze met +/- 380 ms klaar (per deel, de input wordt bij mij 2x geparsed)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
Bijzonder dat je hand.replace(r, '0') doet in plaats van hand.replace('0', r) wat even kort maar intuïtiever is (joker vervangen door een kaart, i.p.v. kaart door een joker).

Oh, en de list() op de laatste regel is onnodig. Scheelt toch weer 6 karakters.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Pff, veel te lang met deel 2 bezig geweest. Zat ergens een slordigheidje in m'n oorspronkelijke aanpak.

spoiler:
Ik was voor deel 1 begonnen met simpelweg kijken naar de max matches
en dan een switch case met voor de 3 en 2 nog een extra check op respectievelijk de full house en de two pair.

Die had ik uitgebreid met een joker count waardoor je nog meer extra checks kreeg waar ik volgens mij ergens een case over het hoofd had gezien. Wegens tijdgebrek maar even een domme joker replace gedaan voor de bepaling van het type en dat werkte gelijk.

"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!

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

P_Tingen

omdat het KAN

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??

https://github.com/patric...e/tree/master/2023/Day-07

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


Acties:
  • 0 Henk 'm!

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

spoiler:
Als JJJJJ, dan zijn er natuurlijk geen 5 x 5-pairs, maar 1 x 5-pair 8)7 8)7

Acties:
  • 0 Henk 'm!

  • htca
  • Registratie: November 2001
  • Laatst online: 22:39
spoiler:
aaargh.... H != K

Acties:
  • 0 Henk 'm!

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

P_Tingen

omdat het KAN

spoiler:
Ik heb deel 2 opgelost door via een loopje alle kaarten 1 voor 1 te vervangen door een joker. Dan de score te laten berekenen en de hoogste score daarvan te hanteren als de echte score. Aanpassing was in een paar minuten klaar

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


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Day7: Time spent: 280.6µs

En ook geleerd dat als ik het in de VS Code embedded terminal run, dat er dan ongeveer 70µs bij de tijd bij komt 8)7. Dus ik kan dat aftrekken van de tijden die ik tot nu toe gepost heb :Y)

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
Day 6 in Python

Even inhalen want was gisteren te druk.

spoiler:
Lekker brute force gehouden. Had wel door dat ik alleen maar het punt hoef op te zoeken waarop het boven de goal komt. 650ms voor deel 2 kan ik prima mee leven


Day 7 in Python

spoiler:
Voor dag 7 heb ik de kaarten eerst omgezet naar een 13-based systeem, daarna geteld hoevaak welke letter voorkomt. Gekeken welk profiel daar bij hoort, 3x letter, 1x letter, 1x letter is bijvoorbeeld een three of a kind. Daar een ranking aan gekoppeld zodat de beste hand de hoogste rang krijgt. Deze rang heb ik daarna aan de voorkant van de 13-based vertaling geplakt.

Door dit te doen kan ik nu de resulterende 13-base vertaling converteren naar een 10-based int en hoef ik enkel te sorteren op dat nummer en te vermenigvuldigen met de rang
Soultaker schreef op donderdag 7 december 2023 @ 08:15:
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.

Correcte antwoorden eindigen op 8053 en 5512 voor deel 1 en deel 2 respectievelijk.
Beide delen draaien in ~1 seconde per stuk inc parsen :D

[ Voor 20% gewijzigd door FrankMennink op 07-12-2023 11:47 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op donderdag 7 december 2023 @ 08:15:
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.

Correcte antwoorden eindigen op 8053 en 5512 voor deel 1 en deel 2 respectievelijk.
Time spent: 63023.0µs
FYI: Die set voldoet niet aan het de facto format (hij eindigt op een newline) ;)

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:
  • +2 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
Soultaker schreef op donderdag 7 december 2023 @ 09:56:
[...]

Bijzonder dat je hand.replace(r, '0') doet in plaats van hand.replace('0', r)
Ah ja, dat was nog een overblijfseltje van de opdracht verkeerd lezen. Ik dacht dat alle kaarten van de "joker-waarde" niets waard waren. Heeft me vanochtend wel een paar minuutjes gekost :X
Oh, en de list() op de laatste regel is onnodig. Scheelt toch weer 6 karakters.
Thanks, over het hoofd gezien!

Na nog wat refactoren kom ik uiteindelijk op deze code.

[ Voor 30% gewijzigd door Friits op 07-12-2023 12:24 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:47
.oisyn schreef op donderdag 7 december 2023 @ 11:28:
En ook geleerd dat als ik het in de VS Code embedded terminal run, dat er dan ongeveer 70µs bij de tijd bij komt 8)7.
Enig idee hoe dat komt? Iets met output flushen naar de terminal, of wordt dat niet meegeteld in de timing?
.oisyn schreef op donderdag 7 december 2023 @ 11:43:
FYI: Die set voldoet niet aan het de facto format (hij eindigt op een newline) ;)
Volgens mij eindigen alle officiële invoerbestanden ook op een newline? (Zoals het overigens ook hoort!)
Friits schreef op donderdag 7 december 2023 @ 12:19:
Na nog wat refactoren kom ik uiteindelijk op deze code.
Wow, die implementatie van type() is lekker obscuur 8)7 Eventueel kun je '23456789ABCDE' nog vervangen door hand.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op donderdag 7 december 2023 @ 12:56:
[...]

Enig idee hoe dat komt? Iets met output flushen naar de terminal, of wordt dat niet meegeteld in de timing?
Ik denk het ja.
Volgens mij eindigen alle officiële invoerbestanden ook op een newline? (Zoals het overigens ook hoort!)
Oh lol je hebt gelijk. Ik save die dingen nooit, want Chrome opent ze gewoon in een tab. En dan doe ik CTRL+A en copy/paste ik 'm naar een file. Maar dan neemt ie de laatste newline dus niet mee 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:
  • +1 Henk 'm!

  • Friits
  • Registratie: December 2023
  • Laatst online: 24-06 08:21
Soultaker schreef op donderdag 7 december 2023 @ 12:56:
Wow, die implementatie van type() is lekker obscuur 8)7
Nog obscuurder, maar ook heel elegant (al zeg ik het zelf):
spoiler:
def type(hand): return sum(map(hand.count, hand))
Eventueel kun je '23456789ABCDE' nog vervangen door hand.
Good catch! En ik dacht nog wel dat ik "perfecte" code had geschreven!

[ Voor 4% gewijzigd door Friits op 07-12-2023 13:18 ]


Acties:
  • 0 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 11-07 08:33
Soultaker schreef op donderdag 7 december 2023 @ 08:15:
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.

Correcte antwoorden eindigen op 8053 en 5512 voor deel 1 en deel 2 respectievelijk.
Mijn implementatie doet er nog geen 500 millisecondes over met zowel deel 1 als deel 2 als ik mijn Stream parallel maak. Zonder parallellisatie doet die het in minder dan een seconde.

spoiler:
Ik heb mijn objecten Comparable gemaakt en sorteer tijdens het inlezen van de file gelijk de Hands op de juiste volgorde. Daarna moet ik er nog een keer overheen loopen om te bepalen welke positie elke Hand heeft. Helaas kan dat niet tijdens de verwerken van de stream.


Zie hier.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
Remcoder schreef op donderdag 7 december 2023 @ 13:23:
[...]

Mijn implementatie doet er nog geen 500 millisecondes over met zowel deel 1 als deel 2 als ik mijn Stream parallel maak. Zonder parallellisatie doet die het in minder dan een seconde.

spoiler:
Ik heb mijn objecten Comparable gemaakt en sorteer tijdens het inlezen van de file gelijk de Hands op de juiste volgorde. Daarna moet ik er nog een keer overheen loopen om te bepalen welke positie elke Hand heeft. Helaas kan dat niet tijdens de verwerken van de stream.


Zie hier.
spoiler:
Ik compare ze ook, maar gewoon op basis van (voor part 2) "J23456789TQKA".indexOf(char), scheelt de 23 ifjes in je compare method ;)

En wat betreft het opnieuw loopen is mapIndexed in Kotlin echt een gigantische verbetering t.o.v. Java. Daarmee doe je gewoon de map methode van een java stream, maar ipv van dat je alleen de value tot je beschikking hebt, heb je dan (index, value) tot je beschikking in de map.

"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: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

@Soultaker Interessant gegeven, ik heb (offline) een tabel gegenereerd met alle 135 handen en hun rank (×2, met en zonder jokers), zodat ik alleen maar een lookup hoef te doen naar de 'waarde' van een hand. Met jouw dataset is ie 2x zo snel (34ms), met de standaard input 2x zo langzaam 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!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Iets te lang met deel 2 bezig geweest. Ik had het goed idee (
spoiler:
tel occurances. Aan de hand daarvan kun je kijken wat voor hand je hebt. Bij jokers kijk je hoeveel jokers er zijn en tel die bij de max op, waarna je voor de nieuwe occurance counts kunt bepalen wat voor hand je hebt.
) Maar goed, dan moet je wel met de goede dingen rekenen... Daar toch zeker een half uur aan verkloot voor ik doorhad wat er mis ging. Toen was het rap gedaan.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 21:46
Ik kom er niet uit, er zit ergens een edge case in die niet in de testdata zit waardoor de uitkomst van deel 2 niet klopt. Vanavond maar eens verder bestuderen :/

https://github.com/ysmild...ter/pkg/2023/day7/day7.go

Acties:
  • 0 Henk 'm!

  • Mschamp
  • Registratie: April 2014
  • Laatst online: 22:18
ProAce schreef op donderdag 7 december 2023 @ 15:04:
Ik kom er niet uit, er zit ergens een edge case in die niet in de testdata zit waardoor de uitkomst van deel 2 niet klopt. Vanavond maar eens verder bestuderen :/

https://github.com/ysmild...ter/pkg/2023/day7/day7.go
spoiler:
toevallig een kaart met 5 keer een joker?

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 17:45
ProAce schreef op donderdag 7 december 2023 @ 15:04:
Ik kom er niet uit, er zit ergens een edge case in die niet in de testdata zit waardoor de uitkomst van deel 2 niet klopt. Vanavond maar eens verder bestuderen :/

https://github.com/ysmild...ter/pkg/2023/day7/day7.go
spoiler:
Ik zat naar dit stukje te kijken:
for _, v := range cards {
if useJokers {
v += jokers
}
switch v {
case 5:
cardStrength = fiveOfAKind
break
case 4:
cardStrength = fourOfAKind
break
case 3:
threeOfAKindFound = true
case 2:
pairs++
}
}

Misschien interpreteer ik het verkeerd, maar gaat dit nu wel goed met pairs?
Als je b.v. J2345 hebt, dan krijg je hier toch 4 pairs in plaats van 1 als ik het goed zie?

"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!

  • mbe81
  • Registratie: Juni 2008
  • Laatst online: 00:09
ProAce schreef op donderdag 7 december 2023 @ 15:04:
Ik kom er niet uit, er zit ergens een edge case in die niet in de testdata zit waardoor de uitkomst van deel 2 niet klopt. Vanavond maar eens verder bestuderen :/

https://github.com/ysmild...ter/pkg/2023/day7/day7.go
Hé leuk, nog iemand met Go!

spoiler:
Geef jij je jokers niet dubbel uit? Je telt het aantal jokers op bij het aantal kaarten op de score te bepalen. Als ik snel naar je loop kijk (regel 95) denk ik dat bijvoorbeeld bij een hand als "8822J" twee keer de waarde threeOfAKindFound op true zet maar zie ik niet hoe je het pair telt. (v is in beide gevallen 3 geworden)

Acties:
  • +2 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 12-07 09:19
Soultaker schreef op donderdag 7 december 2023 @ 08:15:
Hier nog een grotere invoer voor dag 7, voor wie z'n oplossing wil benchmarken. M'n python oplossing doet het in 5 seconde en dat is 99% input parsen.
nom vreet 'm in 100ms (inclusief het 2x scoren van de set bedenk ik mij nu, 22ms zonder):
code:
1
2
3
4
5
$ ./target/release/aoc2023 --input aoc-2023-day-07-challenge-1.txt 
run day 7 for aoc-2023-day-07-challenge-1.txt
Day 7 parsed (98.747238ms)
Day 7 part 1: ****8053 (103.434332ms)
Day 7 part 2: ****5512 (110.0438ms)

[ Voor 4% gewijzigd door veldsla op 07-12-2023 16:06 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 21:46
Mschamp schreef op donderdag 7 december 2023 @ 15:10:
spoiler:
toevallig een kaart met 5 keer een joker?
Mugwump schreef op donderdag 7 december 2023 @ 15:15:
spoiler:
Ik zat naar dit stukje te kijken:
for _, v := range cards {
if useJokers {
v += jokers
}
switch v {
case 5:
cardStrength = fiveOfAKind
break
case 4:
cardStrength = fourOfAKind
break
case 3:
threeOfAKindFound = true
case 2:
pairs++
}
}

Misschien interpreteer ik het verkeerd, maar gaat dit nu wel goed met pairs?
Als je b.v. J2345 hebt, dan krijg je hier toch 4 pairs in plaats van 1 als ik het goed zie?
mbe81 schreef op donderdag 7 december 2023 @ 15:23:
spoiler:
Geef jij je jokers niet dubbel uit? Je telt het aantal jokers op bij het aantal kaarten op de score te bepalen. Als ik snel naar je loop kijk (regel 95) denk ik dat bijvoorbeeld bij een hand als "8822J" twee keer de waarde threeOfAKindFound op true zet maar zie ik niet hoe je het pair telt. (v is in beide gevallen 3 geworden)
Alle drie correct, ik heb nog wat werk te doen O-)

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 18-07 21:47
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..

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

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..
spoiler:
Hoe maak jij het onderscheid tussen 12233 en 12323?

.edit: oh wacht, ik dacht even dat je een totale waarde voor elke hand gaf, maar dat getal wat je berekent maakt alleen onderscheid van het soort hand :)

[ Voor 13% gewijzigd door .oisyn op 07-12-2023 15:59 ]

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!

  • gedonie
  • Registratie: Januari 2011
  • Laatst online: 17-07 19:38
Dag 7 in Java toch nog opgelost. Had eerst een aantal fouten zitten in hoe jokers goed toe te passen op de score die een hand heeft.

Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 18-07 21:47
.oisyn schreef op donderdag 7 december 2023 @ 15:58:
[...]

spoiler:
Hoe maak jij het onderscheid tussen 12233 en 12323?
spoiler:
Ik check nog wel bij gelijke waarden, dit is niet alles wat ik heb, maar doelde meer op dat ik geen flags gebruik en de multiply->sum de hand sterkte bepaald.

Acties:
  • +1 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 20:06

TrailBlazer

Karnemelk FTW

Heb al veel mooiere python oplossingen gezien.
Maar om de mindere Python goden een hart onder de riem te steken mijn oplossing

dag 7 python

Acties:
  • 0 Henk 'm!

  • MadEgg
  • Registratie: Februari 2002
  • Laatst online: 18-07 20:52

MadEgg

Tux is lievvv

Was wel weer even iets pittiger.

spoiler:
Ik had eerst even over het hoofd gezien dat de joker niet een extra kaart was maar in plaats van de Jack kwam, dat gaf wat onverwachte resultaten


Kan duidelijk nog wel wat korter maar heeft wel weer lang genoeg geduurd :)

Dag 7 - Kotlin

Tja

Pagina: 1 ... 4 ... 11 Laatste