Advent of Code 2022 Vorige deel Overzicht Volgende deel Laatste deel

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

Pagina: 1 ... 10 ... 12 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • _mike_
  • Registratie: December 2022
  • Laatst online: 17-12-2022
_mike_ schreef op woensdag 14 december 2022 @ 12:59:
Rust

Op de naieve manier, maar snel genoeg lijkt me:

day-14: total: 6.120005ms
Nu nog een keer op de niet-naïeve manier (dank Cor :) ):

day-14: parsing: 109.937µs
day-14: part1: 17.847µs
day-14: part2: 467.34µs
day-14: finishing: 6.6µs
day-14: total: 602.41µs

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

corbosman schreef op woensdag 14 december 2022 @ 16:48:
Ik heb even een online json validator gepakt en die zegt dit, maar geen idee of dat klopt want ik weet niet wat die precies doet. Een 2e zegt hetzelfde.
Ja het hele bestand zelf is geen valide JSON, da's nogal wiedes. Het zijn meerdere losse arrays.

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!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
.oisyn schreef op woensdag 14 december 2022 @ 02:30:
@Soultaker Ik zie dat de paren voor jouw grotere sets wel redelijk identiek zijn kwa string. Misschien een idee om wat willekeurige nestings toe te voegen voor de afzonderlijke getallen. Want 2 matcht immers met [[[[[[[2]]]]]]].
Klopt ja, ze zijn met opzet heel erg hetzelfde zodat je relatief diep moet zoeken om het verschil te vinden. Maar je hebt gelijk dat ik wel random haakjes om getallen kan toevoegen zonder dat ze verschillen introduceren. Daar had ik niet aan gedacht.

Ik heb een extra set toegevoegd met extra veel haakjes: aoc_2022_day13_large.zip

(Note: interessant om te zien dat de download link hetzelfde blijft als je een bestand overschrijft in Google Drive. Ik kan de zip file dus updaten zonder de share-link te breken.)

$ ./solve < aoc_2022_day13_large-3.txt 
***239
***402
Time: 21462 us

Acties:
  • 0 Henk 'm!

  • corbosman
  • Registratie: December 2014
  • Laatst online: 16-07 10:10
.oisyn schreef op woensdag 14 december 2022 @ 16:57:
[...]


Ja het hele bestand zelf is geen valide JSON, da's nogal wiedes. Het zijn meerdere losse arrays.
Ah doh, je hebt gelijk, ik had de verkeerde file naar die validators gestuurd. Per regel lijkt ie valid maar de php json decoder vindt em niet valid. Naja, blijft toch php :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
corbosman schreef op woensdag 14 december 2022 @ 17:20:
Ah doh, je hebt gelijk, ik had de verkeerde file naar die validators gestuurd. Per regel lijkt ie valid maar de php json decoder vindt em niet valid. Naja, blijft toch php :)
PHP ondersteunt niet zo'n diepte nesting

Python:
1
2
3
4
5
# gen-json.py
import sys

n = int(sys.argv[1])
print('['*n + '1' + ']'*n)


PHP:
1
2
3
4
5
<?php
$stdin = fopen('php://stdin', 'r');
$line = fgets(STDIN);
echo count(json_decode($line, false, 999999999, JSON_THROW_ON_ERROR)), PHP_EOL;
?>


$ python3 gen-json.py 4998 | php parse-json.php 
1
$ python3 gen-json.py 4999 | php parse-json.php 
PHP Fatal error:  Uncaught JsonException: Syntax error in parse-json.php:4


Het lijkt er dus op dat de maximale nesting depth 4998 is (of 4999 afhankelijk van hoe je het bekijkt). Interessant genoeg krijg je een ándere error als je zelf een maximum-diepte opgeeft van minder dan 4999 ("Maximum stack depth exceeded").

Wel weer typisch PHP hoor: de documentatie zegt één ding, de implementatie doet compleet wat anders.

edit:
Het is trouwens niet puur de nesting depth. Als ik een string van de vorm [1,[1,[1,....1]]] genereer dan crasht 'ie eerder: exact wanneer de invoer 10,000 bytes groot is. Maar het is ook niet alleen de invoerlengte die het probleem is, want als ik een platte string als [1,1,1,1,...] van meer dan 10,000 bytes genereer dan werkt het wel.

Kortom, het lijkt een combinatie van te diepe nesting en te lange input (en ja, ik heb geverifieerd dat fgets() daadwerkelijk de hele regel inleest en niet b.v. na 10,000 bytes trunceert).

edit:
Gelijk maar ff een bug geraporteerd: https://github.com/php/php-src/issues/10104

[ Voor 21% gewijzigd door Soultaker op 14-12-2022 18:12 ]


Acties:
  • 0 Henk 'm!

  • corbosman
  • Registratie: December 2014
  • Laatst online: 16-07 10:10
Soultaker schreef op woensdag 14 december 2022 @ 17:24:
[...]

Wel weer typisch PHP hoor: de documentatie zegt één ding, de implementatie doet compleet wat anders.
Ah kijk ok. Dus de handleiding liegt weer eens. Dank voor het uitzoeken, eens zien of ik een andere json parser kan vinden.

Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
corbosman schreef op woensdag 14 december 2022 @ 16:48:
Ik heb even een online json validator gepakt en die zegt dit, maar geen idee of dat klopt want ik weet niet wat die precies doet. Een 2e zegt hetzelfde.
Je parset 2 regels daar dus dat gaat niet werken.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Wat verlaat, maar vandaag Dag 13 in Kotlin

Afgelopen dagen vanwege familiaire problemen helaas de aandacht er niet goed bij, naast het gewone werk natuurlijk.

Dag 13 was goed te doen! Goed lezen wel, zoals gewoonlijk. Mijn parser is wat dom. Wordt tijd om eens een generieke parser te schrijven, want elk jaar komt het weer terug.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Cranzai
  • Registratie: November 2012
  • Laatst online: 01-09 22:00
Hmmm, deel 1 was relatief goed op te lossen.
Daarna beetje lopen klooien om deel 2 werkend te krijgen.
Uiteindelijk is dat gelukt (met een beetje geluk) maar nu zijn mijn hersens te gaar om beide delen netjes in één script te zetten.

[ Voor 13% gewijzigd door Cranzai op 14-12-2022 22:12 ]


Acties:
  • 0 Henk 'm!

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

Creepy

Tactical Espionage Splatterer

Geen tijd gehad om dag 13 af te ronden of om met dag 14 te starten. Morgen ook lastig denk ik dus vrijdag avond en het weekend tijd om de boel in te halen.

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

  • vDorst
  • Registratie: November 2006
  • Niet online
day 14 in Rust standaard manier.

Load data: 25 uS
Setup board: 222 uS
Part1: 107 uS
Part2: 4000 uS
Total: 4424 uS

Op een I3-4330.

spoiler: tip
met het bijhouden pad en dan terug zoeken tot een lege veld.

Load data: 23 uS
Setup board: 162 uS
Part1: 13 uS
Part2: 355 uS
Total: 572 uS

[ Voor 28% gewijzigd door vDorst op 15-12-2022 00:19 . Reden: Nog een extra oplossing ]


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op woensdag 14 december 2022 @ 16:17:
[...]


Ha, ik ben toch sneller op mijn “trage” CPU!
Nu niet meer :Y). Code even wat simpeler opgeschreven en nog wat meer directer op de string werken (ipv een losse functie aanroepen die een struct teruggeeft met de huidige token)
===[ input.txt ]==========
Time: 46us (load:31us, algo:14us)
Part 1: 5760
Part 2: 26670

===[ aoc_2022_day13_large-1.txt ]==========
Time: 21,645us (load:49us, algo:21,594us)
Part 1: 22673
Part 2: 80802

===[ aoc_2022_day13_large-2.txt ]==========
Time: 13,188us (load:41us, algo:13,146us)
Part 1: 226645370
Part 2: 801677840

===[ aoc_2022_day13_large-3.txt ]==========
Time: 18,043us (load:37us, algo:18,005us)
Part 1: 197239
Part 2: 722402


Ben af en toe wel wat teleurgesteld in de code die de compiler genereert.

[ Voor 6% gewijzigd door .oisyn op 15-12-2022 03: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.


  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
Dag 15 in Python

Lastige vandaag, vooral deel 2!

spoiler:
Deel 1 heb ik op heel naieve manier opgelost door voor elke sensor alle punten voor de gezochte rij in een hashmap op te slaan. Runt in 800ms op normale input.

Voor deel 2 loop ik over elke rij van 0 tot 4_000_000 en bepaal voor elke sensor welke range van die rij wordt gescand binnen het gegeven bereik. Daarna sorteer ik die rijen en zoek ik of ze aansluitend zijn of niet. Zo niet, dan is dat het punt wat we zoeken.
Oplossing is supertraag: 30s met PyPy, dus nu maar iets slimmers proberen te verzinnen.

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

Varienaja

Wie dit leest is gek.

Ik had de minnetjes bij de invoer wel gezien maar geen goeie regex geschreven. Het duurde bij deel 2 vrij lang voordat ik daar weer aan dacht. :(

Siditamentis astuentis pactum.


  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Dag 15 in C#

Part1 in 939,2549ms
Part2 in 5s 359,7134ms

Deel 1 was snel gecodeerd, deel 2 kostte me iets meer denk-/typwerk. Deel 2 kan vast nog wel sneller, maar ik vind, gezien de grootte, vijf seconden prima.

spoiler:
Deel 1 puur focus gelegd op de gevraagde rij en daar dan gewoon brute-force bijhouden welke coordinaten geblokkeerd worden. Voor deel 2 leerde een rekensom meteen al op dat je dit niet zou willen bruteforcen met een grid (RAM-wise), dus uiteindelijk per rij bijgehouden welke ranges nog over waren. Uiteindelijk heb je dan één rij met een range van lengte 1 over. En dan nog een int-overflow als afsluitertje, maar die had ik gelukkig meteen door toen AoC zei dat het antwoord fout was. Kon trouwens nog wat werk van dag 4 hergebruiken (overlap functies).

[ Voor 10% gewijzigd door MatHack op 15-12-2022 10:13 . Reden: afsluitertje... ]

There's no place like 127.0.0.1


  • bakkerjangert
  • Registratie: Februari 2012
  • Laatst online: 21:59
Lastige opgave vandaag, vooral part 2. Uiteindelijk toch gelukt in python. Runt wel lang (circa 1,5 minuut) maar het geeft gelukkig wel het goede antwoord.

Acties:
  • +2 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 07-09 19:29
Ik kwam vrij snel vast te zitten met part2, of een geheugen limiet of het duurde veel te lang. Uiteindelijk in 350ms deel 1 + 2 in JS/TS

spoiler:
Mijn uiteindelijke truck zit hem erin dat er maar 1 cell moet zijn die er niet valt. Dat betekent dus dat deze zich net buiten de radius van een scanner moet bevinden. Heb dus een simpel loopje dat per scanner alle cellen aan de rand van de radius checkt, binnen het gestelde kader... Werkt best prima.

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Al was het een bruteforce in 1m19s voor deel 2, wel blij met 9 min tussen part 1 en 2 completion time :)

Nu tijd om (in ieder geval part 2) te refactoren.
Dag 15 - Python

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik begin een backlog te krijgen..... dit weekend hopelijk e.e.a. inhalen

Engineering is like Tetris. Succes disappears and errors accumulate.


  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
3.3ms totale runtime voor volledig dag 15 in Rust

  • ElkeBxl
  • Registratie: Oktober 2014
  • Laatst online: 02-07 09:03

ElkeBxl

Tassendraagster

Topicstarter
armageddon_2k1 schreef op donderdag 15 december 2022 @ 11:17:
Ik begin een backlog te krijgen..... dit weekend hopelijk e.e.a. inhalen
Same. Ik heb gewoon de tijd niet om in te halen voor het weekend. Maar vind ik niet erg, liever dat ik op mijn gemak de AoC kan afwerken :)

Without nipples, boobs are pointless - 365 project - In mijn hoofd is het alle dagen Kerstmis - What type of bees make milk? Boobies! - What type of bees are scary? BoooOOOOOooobeees! - Cactusliefhebster


  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
Nog even inhalen: Dag 14 in Python

Viel redelijk mee, kon de oplossingen vinden voor mn thee begon te werken

Dag 15 in Python

Deel 1 een tijdje op lopen staren waarom het niet werkte, nog even goed naar mn "slimme" parser gekeken, die nam alleen de positieve getallen mee. Deel 2 kwam ik op ongeveer dezelfde oplossing uit als @MrHaas, redelijk brute force. Deel 2 runt in 28s, eigenlijk te lang voor de AoC 15s barrier, maar (nog) geen idee hoe het slimmer kan.

spoiler:
Bij mij staat de beacon op rij 3.1 miljoen nogwat, als ik de range reverse is ie wel snel genoeg om binnen de 15 seconden te vallen :+

[ Voor 11% gewijzigd door FrankMennink op 15-12-2022 12:42 ]


  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
Lijkt er op dat je "geluk" hebt gehad met je input: op mijn laptop doet jouw oplossing er op jouw input 8ms over en op mijn input 200ms :P.

  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
MrHaas schreef op donderdag 15 december 2022 @ 12:35:
[...]


Lijkt er op dat je "geluk" hebt gehad met je input: op mijn laptop doet jouw oplossing er op jouw input 8ms over en op mijn input 200ms :P.
Wow inderdaad, groot verschil in input files.
Jouw input doet er bij mij 115ms over.
Vreemd dat er zo veel variantie zit op de inputs.

[ Voor 6% gewijzigd door Jern_97 op 15-12-2022 13:00 ]


Acties:
  • +2 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Diderikdm schreef op donderdag 15 december 2022 @ 10:08:
Al was het een bruteforce in 1m19s voor deel 2, wel blij met 9 min tussen part 1 en 2 completion time :)

Nu tijd om (in ieder geval part 2) te refactoren.
Dag 15 - Python
Gelukt!

deel 1 & 2 runnen nu samen in 16 ms:

spoiler:
Voor deel 1 de x ranges op y=2000000 laten overlappen en max x - min x gedaan

Voor deel twee 4 lijnen getekend per scanner (manhattan + 1) en de lijnen naar rechtsonder laten intersecten met de lijnen naar rechtsboven. Voor elk van deze punten gekeken of de manhattan distance tussen dit punt en alle scanner groter is dan de manhattan distance van de scanner naar hun beacon, hier komt 1 punt uit

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jern_97 schreef op donderdag 15 december 2022 @ 12:55:
Vreemd dat er zo veel variantie zit op de inputs.
Als je een algoritme maakt dat stopt zodra er een goed antwoord gevonden is, dan kun je natuurlijk gewoon mazzel hebben dat dat antwoord redelijk snel gevonden wordt. Ik gok dat als jij de regels uit jouw input in omgekeerde volgorde zet, je ook een hele andere running time gaat zien, terwijl er hetzeflde antwoord uit komt :)



Ik zie veel aanmames hier. Maar volgens mij zijn ze allemaal niet 100% waterdicht. Het is wachten op de eerste custom input waarbij de boel de mist in gaat ;)

[ Voor 19% gewijzigd door .oisyn op 15-12-2022 14:20 ]

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.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Diderikdm schreef op donderdag 15 december 2022 @ 13:15:
Gelukt!

deel 1 & 2 runnen nu samen in 16 ms:

spoiler:
Voor deel 1 de x ranges op y=2000000 laten overlappen en max x - min x gedaan

Voor deel twee 4 lijnen getekend per scanner (manhattan + 1) en de lijnen naar rechtsonder laten intersecten met de lijnen naar rechtsboven. Voor elk van deze punten gekeken of de manhattan distance tussen dit punt en alle scanner groter is dan de manhattan distance van de scanner naar hun beacon, hier komt 1 punt uit
spoiler:
In eerste instantie had ik ook gewoon per y-coordinaat horizontale segmenten gecreëerd, wat ik voor deel 1 al geïmplementeerd had (Python code), maar dat was me toch wat te traag (7 à 12 seconde, afhankelijk van of ik het hele grid doorloop of stop zodra ik een antwoord heb gevonden).


Mijn uiteindelijke versie volgt dezelfde aanpak als jij (Python code) en draait in ~40 ms.

Overigens lijken de meeste oplossingen die ik tot nu toe gezien heb (de mijne ook) er vanuit te gaan dat het punt ergens in het midden van het grid ligt en niet op de rand (b.v. op 123, 4000000). Gelukkig blijkt dat ook zo te zijn voor de beschikbare invoer maar technisch gezien is dat niet gegarandeerd.

Acties:
  • +1 Henk 'm!

  • FrankMennink
  • Registratie: Mei 2011
  • Laatst online: 13-04 11:34
FrankMennink schreef op donderdag 15 december 2022 @ 12:32:
Nog even inhalen: Dag 14 in Python

Viel redelijk mee, kon de oplossingen vinden voor mn thee begon te werken

Dag 15 in Python

Deel 1 een tijdje op lopen staren waarom het niet werkte, nog even goed naar mn "slimme" parser gekeken, die nam alleen de positieve getallen mee. Deel 2 kwam ik op ongeveer dezelfde oplossing uit als @MrHaas, redelijk brute force. Deel 2 runt in 28s, eigenlijk te lang voor de AoC 15s barrier, maar (nog) geen idee hoe het slimmer kan.

spoiler:
Bij mij staat de beacon op rij 3.1 miljoen nogwat, als ik de range reverse is ie wel snel genoeg om binnen de 15 seconden te vallen :+
Met dank aan @Diderikdm ( _/-\o_ ) voor het idee hoe het sneller kan, deel 1 gaat nu in 0.06ms en deel 2 in 1.6ms

Acties:
  • +3 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 17:11
Day 14 in Kotlin

Ik liep ook een dag achter, maar het maken van die animatie heeft me voor wat afleiding gezorgd :D

Afbeeldingslocatie: https://tweakers.net/i/b-dI0A9kKo2x0_zXKAprzAxRR-E=/full-fit-in/4000x4000/filters:no_upscale():fill(white):gifsicle():strip_exif()/f/image/YXJS3Zk643iWisFR0RGIHRvO.gif?f=user_large

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

CMG

Was wel weer leuk vandaag. Alles samen binnen een seconde, dus ik vind het prima 😅

video | code

NKCSS - Projects - YouTube


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

Varienaja

Wie dit leest is gek.

Dag 15 in Java.

Siditamentis astuentis pactum.


  • Gilotto
  • Registratie: Juni 2011
  • Laatst online: 16-09 11:15

Gilotto

Paint Skillz

Na lang prutsen eindelijk (!?) dag 7 opgelost (F#)

spoiler:
Kreeg steeds overflow error van iteraties.
Bleek dat de map namen meerdere keren voorkwamen.
Absolute paden bleken de uitkomst.
Daarna part 2 snel opgelost :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op donderdag 15 december 2022 @ 14:17:
Ik zie veel aanmames hier. Maar volgens mij zijn ze allemaal niet 100% waterdicht. Het is wachten op de eerste custom input waarbij de boel de mist in gaat ;)
Ondertussen doe ik lekker mee met de aannames :+

===[ input.txt ]==========
Time: 46us (load:45us, algo1:0us, algo2:1us)
Part 1: 4861076
Part 2: 10649103160102

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.


  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
.oisyn schreef op donderdag 15 december 2022 @ 14:17:
[...]

Als je een algoritme maakt dat stopt zodra er een goed antwoord gevonden is, dan kun je natuurlijk gewoon mazzel hebben dat dat antwoord redelijk snel gevonden wordt. Ik gok dat als jij de regels uit jouw input in omgekeerde volgorde zet, je ook een hele andere running time gaat zien, terwijl er hetzeflde antwoord uit komt :)



Ik zie veel aanmames hier. Maar volgens mij zijn ze allemaal niet 100% waterdicht. Het is wachten op de eerste custom input waarbij de boel de mist in gaat ;)
Ondertussen ook wat geoptimaliseerd en kom nu aan 55us met mijn originele input en 150us als ik de lijnen omdraai. MrHaas's input doet er nu 250us over. Nog steeds een groot verschil precies.

Welk van mijn aannames zijn niet waterdicht volgens jou? Ik tracht altijd mijn oplossing zo generiek mogelijk te maken.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

@Jern_97 Soultaker noemde er al een: waarbij de plek aan de rand van de bounding box ligt, waardoor hij dus niet aan alle kanten hoeft te worden afgesloten door sensoren. De andere is volgens mij dat je geheel bent omsingeld door hoekpunten van de ruiten. Hangt een beetje van je implementatie af of je deze meepakt of niet.

.edit: zeg maar deze case:
.S..BBB..S.
S.........S
....SSS....
...........
B.S.....S.B
B.S..X..S.B
B.S.....S.B
...........
....SSS....
S.........S
.S..BBB..S.


Het gaat hier om punt X. Dat is de enige lege plek waar geen sensor komt, maar hij wordt niet afgesloten door de diagonalen van sensoren, maar door de hoekpunten.

Deze mag dan niet helemaal omdat sommige sensoren precies even ver van meerdere beacons zitten (die op de hoeken), maar daar is wel iets op te verzinnen.
Volgens mij heb ik dat probleem op deze manier al verholpen :Y)

[ Voor 47% gewijzigd door .oisyn op 15-12-2022 18:52 ]

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.


  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
.oisyn schreef op donderdag 15 december 2022 @ 18:39:
@Jern_97 Soultaker noemde er al een: waarbij de plek aan de rand van de bounding box ligt, waardoor hij dus niet aan alle kanten hoeft te worden afgesloten door sensoren. De andere is volgens mij dat je geheel bent omsingeld door hoekpunten van de ruiten. Hangt een beetje van je implementatie af of je deze meepakt of niet.

.edit: zeg maar deze case:
.S..BBB..S.
S.........S
....SSS....
...........
B.S.....S.B
B.S..X..S.B
B.S.....S.B
...........
....SSS....
S.........S
.S..BBB..S.


Het gaat hier om punt X. Dat is de enige lege plek waar geen sensor komt, maar hij wordt niet afgesloten door de diagonalen van sensoren, maar door de hoekpunten.

Deze mag dan niet helemaal omdat sommige sensoren precies even ver van meerdere beacons zitten (die op de hoeken), maar daar is wel iets op te verzinnen.
Volgens mij heb ik dat probleem op deze manier al verholpen :Y)
Volgens mij houdt mn oplossing al rekening met deze case:

spoiler:
Afbeeldingslocatie: https://tweakers.net/i/sQkVV0eXLLUad-J7HywcD5IGF84=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/Dl0lwiNklyf2uYflAld0oJxx.jpg?f=user_large
^ hij checkt alle kruispunten (inclusief hoeken, zijn ook kruispunten)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Hier wat extra grote testdata voor dag 15: aoc_2022_day15_large.zip

Antwoorden modulo 31337:
  • aoc_2022_day15_large-1.txt: 2881 en 29156.
  • aoc_2022_day15_large-2.txt: 16210 en 14259.
  • aoc_2022_day15_large-3.txt: 31306 en 25875.
Het kan vast nog groter maar dan moet ik m'n solver wat efficiënter herimplementeren; hij doet nu 46 seconden over de grootste dataset.

edit: nvm, hij is toch correct (voor zover ik weet)

[ Voor 178% gewijzigd door Soultaker op 15-12-2022 19:18 ]


  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
.oisyn schreef op donderdag 15 december 2022 @ 18:39:
@Jern_97 Soultaker noemde er al een: waarbij de plek aan de rand van de bounding box ligt, waardoor hij dus niet aan alle kanten hoeft te worden afgesloten door sensoren. De andere is volgens mij dat je geheel bent omsingeld door hoekpunten van de ruiten. Hangt een beetje van je implementatie af of je deze meepakt of niet.

.edit: zeg maar deze case:
.S..BBB..S.
S.........S
....SSS....
...........
B.S.....S.B
B.S..X..S.B
B.S.....S.B
...........
....SSS....
S.........S
.S..BBB..S.


Het gaat hier om punt X. Dat is de enige lege plek waar geen sensor komt, maar hij wordt niet afgesloten door de diagonalen van sensoren, maar door de hoekpunten.

Deze mag dan niet helemaal omdat sommige sensoren precies even ver van meerdere beacons zitten (die op de hoeken), maar daar is wel iets op te verzinnen.
Volgens mij heb ik dat probleem op deze manier al verholpen :Y)
Soultaker's opmerking is inderdaad atm niet gecovered. Maar door de 4 lijnen van de boundingbox toe te voegen aan de intersectietests zou dit in principe ook gecovered moeten zijn.
De 2de case werkt volgens mij wel zonder problemen. Ik zoek namelijk gewoon elk punt dat ten minste 1 keer voorkomt in een intersectie. In het bovenstaand geval zal dit punt volgens mij gewoon meerdere keren terug komen uit de intersectie tests.

EDIT: waarschijnlijk volstaat zelfs om enkel de 4 hoekpunten van de bbox toe te voegen. Aangezien elk ander punt op de rand van de bbox ten minste door 2 sensors moet worden begrensd.

[ Voor 6% gewijzigd door Jern_97 op 15-12-2022 19:30 ]


Acties:
  • +1 Henk 'm!

  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
Soultaker schreef op donderdag 15 december 2022 @ 19:10:
Hier wat extra grote testdata voor dag 15: aoc_2022_day15_large.zip

Antwoorden modulo 31337:
  • aoc_2022_day15_large-1.txt: 2881 en 29156.
  • aoc_2022_day15_large-2.txt: 16210 en 14259.
  • aoc_2022_day15_large-3.txt: 31306 en 25875.
Het kan vast nog groter maar dan moet ik m'n solver wat efficiënter herimplementeren; hij doet nu 46 seconden over de grootste dataset.

edit: nvm, hij is toch correct (voor zover ik weet)
Ik krijg dezelfde antwoorden alleszins:

spoiler:
Part 1: 6520977
Part 2: 2411198199629
Time: 156us
Mod 31337: 2881, 29156

Part 1: 7443079
Part 2: 12992359761553
Time: 21851us
Mod 31337: 16210, 14259

Part 1: 6894109
Part 2: 10557178143116
Time: 1208174us
Mod 31337: 31306, 25875

Acties:
  • +1 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Soultaker schreef op donderdag 15 december 2022 @ 19:10:
Hier wat extra grote testdata voor dag 15: aoc_2022_day15_large.zip

Antwoorden modulo 31337:
  • aoc_2022_day15_large-1.txt: 2881 en 29156.
  • aoc_2022_day15_large-2.txt: 16210 en 14259.
  • aoc_2022_day15_large-3.txt: 31306 en 25875.
Het kan vast nog groter maar dan moet ik m'n solver wat efficiënter herimplementeren; hij doet nu 46 seconden over de grootste dataset.

edit: nvm, hij is toch correct (voor zover ik weet)
spoiler:
2881 2549
0:00:00.001004 0:00:00.028992

16210 26113
0:00:00.002999 0:00:00.192484

31306 25875
0:00:00.049029 0:00:38.392391

Edit: deed module 31377 8)7


spoiler:
Volgens mij kan het nog sneller als je eerst een sortering maakt van parallelle lijnen met 1 ruimte en deze eerst doet

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Diderikdm schreef op donderdag 15 december 2022 @ 19:33:
spoiler:
2881 2549
0:00:00.001004 0:00:00.028992

16210 26113
0:00:00.002999 0:00:00.192484

31306 22607
0:00:00.049029 0:00:38.392391
Zijn die getallen de antwoorden modulo 31337? Want dan lijken de antwoorden voor deel 2 niet te kloppen.

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Soultaker schreef op donderdag 15 december 2022 @ 19:36:
[...]

Zijn die getallen de antwoorden modulo 31337? Want dan lijken de antwoorden voor deel 2 niet te kloppen.
klopt, deed mod 31377, had m net geëdit 8)7

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

===[ aoc_2022_day15_large-1.txt ]==========
Time: 156us (load:49us, algo1:1us, algo2:105us)


===[ aoc_2022_day15_large-2.txt ]==========
Time: 583us (load:100us, algo1:4us, algo2:478us)


===[ aoc_2022_day15_large-3.txt ]==========
Time: 191,043us (load:1,083us, algo1:49us, algo2:189,911us)


Antwoorden voor large1 kloppen trouwens niet. Moet ik even nakijken.

.edit: ah de inputs eindigen met een newline. Daardoor las ik 1 extra regel aan garbage, wat ook impact had op de performance :D

===[ aoc_2022_day15_large-1.txt ]==========
Time: 64us (load:43us, algo1:1us, algo2:19us)
Part 1: ***977
Part 2: ***629

===[ aoc_2022_day15_large-2.txt ]==========
Time: 522us (load:78us, algo1:3us, algo2:440us)
Part 1: ***079
Part 2: ***553

===[ aoc_2022_day15_large-3.txt ]==========
Time: 177,697us (load:952us, algo1:44us, algo2:176,700us)
Part 1: ***109
Part 2: ***116


Ik denk dat er voor large3 nog wel behoorlijk wat te halen valt. Het schaalt momenteel kwadratisch met het aantal sensoren.

.edit: hmm jammer, ik probeer een BVH te bouwen maar er is zoveel overlap tussen de sensoren dat er nauwelijks iets mee te winnen valt kwa vergelijkingen, en dan voegt het vooral heel veel overhead toe.

.edit2: pff soms doe je gewoon veel te moeilijk.

===[ aoc_2022_day15_large-1.txt ]==========
Time: 80us (load:55us, algo1:2us, algo2:22us)
Part 1: ***977
Part 2: ***629

===[ aoc_2022_day15_large-2.txt ]==========
Time: 371us (load:99us, algo1:4us, algo2:268us)
Part 1: ***079
Part 2: ***553

===[ aoc_2022_day15_large-3.txt ]==========
Time: 53,506us (load:1,009us, algo1:48us, algo2:52,448us)
Part 1: ***109
Part 2: ***116

[ Voor 71% gewijzigd door .oisyn op 15-12-2022 22:17 ]

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.


  • vDorst
  • Registratie: November 2006
  • Niet online
Day15 binnen 1 sec.

time ./target/release/day15
________________________________________________________
Executed in 907.09 millis fish external
usr time 907.06 millis 772.00 micros 906.29 millis
sys time 0.00 millis 0.00 micros 0.00 millis
Opzich netjes

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Lastig vandaag. :-D Ik zit in dubio. Zal ik gaan werken.. of zal ik doorpuzzelen.. Of allebei >:)

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Pfff, ik zit vast. Voorbeeld werkt, werkelijke input is blijkbaar te hoog...


-edit- hmm... mijn tijd verprutst aan een heel domme nergens op gebaseerde aanname....

[ Voor 37% gewijzigd door Janoz op 16-12-2022 08:37 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

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

P_Tingen

omdat het KAN

spoiler:
Hmm, zit net te kijken. Soort Dijkstra variant?

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


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Na mijn eerste poging weggegooid te hebben (veels te traag), heb ik nu in ieder geval een goed werkende versie voor de test-input van deel 1, nu nog uitzoeken waarom het nog fout gaat voor de echte input (too low...). Wie weet heb ik wel een zelfde domme aanname als @Janoz ...

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
spoiler:
A* gebruikt voor deel 1 en na flink wat sleutelen aan de heuristic is ie snel genoeg. Deel 2 zelfde verhaal alleen ik heb 'm nog niet snel genoeg voor de echte input :(

Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
Ok, deel 2 nu ook!

spoiler:
Vergelijken van states gebeurde nog niet goed, dus er werden veel dezelfde states in de queue gepusht

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Aargh....gisteren eindelijk dag 14 afgerond (Regolith Reservoir, die met het zand). Ik wist dat mijn code er niet tegen kon als ik de coordinaten van mijn strepen met blokjes niet op volgorde gaf (dus 10,4->10,3 werd genegeerd). Daarom sorteerde ik de coordinaten van de inputdata. Maar helaas deed ik dat als string, niet als getal. Dit had als gevolg dat alle prima werkte, behalve de blokjes rond y=100 omdat 95 dan na 105 komt. Probeer daar maar eens achter te komen als alles tot y=95 wel goed geprocessed wordt en vanaf y=110 ook weer. Anyway, ik kan weer verder.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

P_Tingen schreef op vrijdag 16 december 2022 @ 08:40:
spoiler:
Hmm, zit net te kijken. Soort Dijkstra variant?
spoiler:
Dit lijkt me meer een soort TSP dan een shortest-path probleem. Die laatste kun je wel gebruiken om de kosten in kaart te brengen om te reizen tussen de "interessante" ;) valves.

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

@MatHack Mijn domme aanname ging over waar ik eigenlijk moest beginnen

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Poeh pittig dagje vandaag! Zat te huiveren voor deel 2 gezien de tijden maar had gelukkig niet zo heel veel aanpassingen nodig (24 min)

runt in ~1s, kan vast sneller maar niet voor nu :)

spoiler:
Dubbele variant van BFS + priority queue gekozen -> Eerst om de onderlinge afstanden van alle valves met een waarde van >0 te vinden en in een dict te stoppen, vervolgens vanaf begin alle combinaties van valves door te lopen (waarvan dubbele combinaties alleen met hogere release worden geëvalueerd). Voor deel twee exact hetzelfde, alleen hou je nu jezelf + olifant bij en per ronde pak je de minimale time van de twee.

Dag 16 - Python

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Janoz schreef op vrijdag 16 december 2022 @ 11:57:
@MatHack Mijn domme aanname ging over waar ik eigenlijk moest beginnen
spoiler:
Ah, dat probleem had ik niet. Blijkbaar had ik een foutje in mijn shortest path berekening (die ik gebruik om alle 0 flowrate nodes weg te filteren). Waarom het wel werkte voor de test en niet voor de echte data... geen idee.

Nu voor deel 2...

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik doe nu deel 1 en 2 in net geen 45 seconden. Maar met wat aannames krijg ik ook het juiste antwoord in 8 seconden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

14ms voor part1. Ik snap jullie tijden niet :P

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Deel 1 is een halve seconde en deel 2 is 7.5 seconden. Doet jouw deel 2 het dan ook in 210ms?

[ Voor 7% gewijzigd door Janoz op 16-12-2022 13:58 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
.oisyn schreef op vrijdag 16 december 2022 @ 13:41:
14ms voor part1. Ik snap jullie tijden niet :P
Zit op 157ms voor part1 en 796ms voor part2

Is wel Python he ;)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Ik ben blijkbaar de enige die vandaag geen
spoiler:
Dijkstra of A*

gebruikt heeft, maar
spoiler:
Floyd-Warshall en Dynamic Programming
?

Ik doe er ook best lang over: ~3.5 seconden in Python met PyPy, en dan heb ik al behoorlijk wat geoptimaliseerd (was eerst 7 seconden). Wel is het zo dat met mijn aanpak deel 1 en deel 2 samen net zo snel zijn als deel 1 alleen.

[ Voor 42% gewijzigd door Soultaker op 16-12-2022 15:29 ]


Acties:
  • +1 Henk 'm!

  • tarlitz
  • Registratie: Maart 2010
  • Niet online
Ik heb niks zinnigs bij te dragen, behalve dat ik even kwijt wil dat ik het een k*tprobleem vond vandaag 😅

Deel 2 draait bij mij (met optimizations!) in 10 min met Python 💪

[ Voor 24% gewijzigd door tarlitz op 16-12-2022 15:35 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Diderikdm schreef op vrijdag 16 december 2022 @ 12:07:
runt in ~1s, kan vast sneller maar niet voor nu :)
Dag 16 - Python
Helaas klopt je algoritme niet ;)
.oisyn schreef op vrijdag 16 december 2022 @ 13:41:
14ms voor part1. Ik snap jullie tijden niet :P
Code? Ben benieuwd of je eenzelfde fout hebt gemaakt of dat je het correcte algoritme gewoon weer debiel snel hebt weten te krijgen. (14 ms voor deel 1 klinkt voor jou wel realistisch, dat is “maar” 250 keer sneller dan m'n Python oplossing wat wel realistisch is gezien de resultaten uit het verleden.)

[ Voor 44% gewijzigd door Soultaker op 16-12-2022 16:10 ]


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op vrijdag 16 december 2022 @ 16:00:
Code? Ben benieuwd of je eenzelfde fout hebt gemaakt of dat je het correcte algoritme gewoon weer debiel snel hebt weten te krijgen.
spoiler:
Mijn code is in principe O(n!) in het aantal valves met groter-dan-nul flow rate (vanaf nu gewoon "valves"), al heb je daar in de praktijk niet zo'n last van omdat de opties zeer gelimiteerd worden door de time constraint. Ik bereken eerst wat het kost om van iedere valve naar iedere andere valve te lopen. Daarna is het een kwestie van een brute force search over alle mogelijkheden tot de tijd op is.

Ik heb trouwens wel een idee voor een O(n2) implementatie, al is die voor part2 denk ik O(n3).

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!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Soultaker schreef op vrijdag 16 december 2022 @ 16:00:
[...]

Helaas klopt je algoritme niet ;)


[...]

Code? Ben benieuwd of je eenzelfde fout hebt gemaakt of dat je het correcte algoritme gewoon weer debiel snel hebt weten te krijgen. (14 ms voor deel 1 klinkt voor jou wel realistisch, dat is “maar” 250 keer sneller dan m'n Python oplossing wat wel realistisch is gezien de resultaten uit het verleden.)
Hmm.. je hebt gelijk, heb een off by 2 op deel twee op de testinput.. :o Even kijken wat dat is

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Diderikdm schreef op vrijdag 16 december 2022 @ 16:12:
Hmm.. je hebt gelijk, heb een off by 2 op deel twee op de testinput.. :o Even kijken wat dat is
Ook voor deel 1 klopt 'ie niet helemaal. Test maar eens met:
Valve AA has flow rate=0; tunnels lead to valves BB, CC
Valve BB has flow rate=10; tunnels lead to valves CC, DD
Valve CC has flow rate=10; tunnel leads to valve BB
Valve DD has flow rate=10; tunnel leads to valve AA

Correcte antwoord (vrij eenvoudig met de hand te verifiëren):
spoiler:
780

Ik zou dus met deel 1 beginnen met debuggen.

Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Soultaker schreef op vrijdag 16 december 2022 @ 15:27:
Ik ben blijkbaar de enige die vandaag geen
spoiler:
Dijkstra of A*

gebruikt heeft, maar
spoiler:
Floyd-Warshall en Dynamic Programming
?

Ik doe er ook best lang over: ~3.5 seconden in Python met PyPy, en dan heb ik al behoorlijk wat geoptimaliseerd (was eerst 7 seconden). Wel is het zo dat met mijn aanpak deel 1 en deel 2 samen net zo snel zijn als deel 1 alleen.
spoiler:
Ik heb deel 1 eerst recursief gedaan, maar met deel 2 na 5 minuten een heap space error, dus ben nu bezig om de afstanden tussen punten te precomputen en dat gebruiken om sneller afstanden te berekenen, momenten dat ze aankomen op de punten en hoeveel flow dat oplevert.

Maar goed, dat is het idee. Ik moet het voor deel 1 nog werkend makend, en dan zien of het voor deel 2 snel genoeg is

Acties:
  • 0 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Soultaker schreef op vrijdag 16 december 2022 @ 16:19:
[...]

Ook voor deel 1 klopt 'ie niet helemaal. Test maar eens met:
Valve AA has flow rate=0; tunnels lead to valves BB, CC
Valve BB has flow rate=10; tunnels lead to valves CC, DD
Valve CC has flow rate=10; tunnel leads to valve BB
Valve DD has flow rate=10; tunnel leads to valve AA

Correcte antwoord (vrij eenvoudig met de hand te verifiëren):
spoiler:
780

Ik zou dus met deel 1 beginnen met debuggen.
Maar als AA naar BB leidt en AA naar CC dan moeten CC en BB ook naar AA leiden toch? En DD naar BB ipv AA

Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Diderikdm schreef op vrijdag 16 december 2022 @ 16:28:
Maar als AA naar BB leidt en AA naar CC dan moeten CC en BB ook naar AA leiden toch?
OK, dan maken we alle edges symmetrisch (wat niet gegeven is):
Valve AA has flow rate=0; tunnels lead to valves BB, CC
Valve BB has flow rate=10; tunnels lead to valves AA, CC, DD
Valve CC has flow rate=10; tunnel leads to valve AA, BB
Valve DD has flow rate=10; tunnel leads to valve BB

Dan gaat het net zo goed fout.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik moet zeggen dat ik dezelfde aanname gedaan heb en dat werkt gewoon, maar ja, misschien heeft @Soultaker straks wat input waar toevallig wel een wat verticalere tunnel tussen zit, en ze hebben geen klim gear meegenomen ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

.oisyn schreef op vrijdag 16 december 2022 @ 16:11:
[...]


[spoiler]Mijn code is in principe O(n!) in het aantal valves met groter-dan-nul flow rate (vanaf nu gewoon "valves"), al heb je daar in de praktijk niet zo'n last van omdat de opties zeer gelimiteerd worden door de time constraint. Ik bereken eerst wat het kost om van iedere valve naar iedere andere valve te lopen. Daarna is het een kwestie van een brute force search over alle mogelijkheden tot de tijd op is.
Ik doe hetzelfde, maar dan in 500ms
spoiler:
de 15x15 matrix (of eigenlijk 16x15) bereken ik met 16x dijkstra in 25ms dus vond het de moeite nog niet om daarvoor Floyd–Warshall te gaan lopen uitpluizen. Maar hij staat nu zeker op mijn todo lijst.

Voor deel 2 ben ik (denk ik) slim aan het permuteren. Voor alles heb ik iets van 16k mogelijkheden maar ik durfde het ook wel aan om daarvan maar 6K te testen :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • +1 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Soultaker schreef op vrijdag 16 december 2022 @ 16:32:
[...]

OK, dan maken we alle edges symmetrisch (wat niet gegeven is):
Valve AA has flow rate=0; tunnels lead to valves BB, CC
Valve BB has flow rate=10; tunnels lead to valves AA, CC, DD
Valve CC has flow rate=10; tunnel leads to valve AA, BB
Valve DD has flow rate=10; tunnel leads to valve BB

Dan gaat het net zo goed fout.
Found it; wordt de boel omgooien. Deed onterecht een sorted(seen) en dit werkte dus blijkbaar per toeval op mijn input

Acties:
  • 0 Henk 'm!

  • Diderikdm
  • Registratie: December 2020
  • Laatst online: 04-01-2024
Diderikdm schreef op vrijdag 16 december 2022 @ 12:07:
Poeh pittig dagje vandaag! Zat te huiveren voor deel 2 gezien de tijden maar had gelukkig niet zo heel veel aanpassingen nodig (24 min)

runt in ~1s, kan vast sneller maar niet voor nu :)

spoiler:
Dubbele variant van BFS + priority queue gekozen -> Eerst om de onderlinge afstanden van alle valves met een waarde van >0 te vinden en in een dict te stoppen, vervolgens vanaf begin alle combinaties van valves door te lopen (waarvan dubbele combinaties alleen met hogere release worden geëvalueerd). Voor deel twee exact hetzelfde, alleen hou je nu jezelf + olifant bij en per ronde pak je de minimale time van de twee.

Dag 16 - Python
Alright is aangepast, zou nu wel moeten werken :) draait nu wel een stukje trager in 239ms en 5.24s

spoiler:
Uiteindelijke wijziging was ipv op sorted(seen) op sorted(seen) + [current_valve]

[ Voor 6% gewijzigd door Diderikdm op 16-12-2022 17:44 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ook maar even alles gepushed voor vandaag. Weer een uitbreiding op mijn toolset kunnen doen :). Nu maar eens even kijken of @.oisyn weer spelfouten gaat vinden :P

[ Voor 14% gewijzigd door Janoz op 16-12-2022 17:46 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Wow, ik heb duidelijk veel te moeilijk zitten doen! Elegante oplossing, en het verbaasd me dat het zo snel is: je zei 500 ms geloof ik? Mijn C++ code zit op ~750 ms, met in theorie een veel efficiënter algoritme (maar in de praktijk valt dat blijkbaar tegen).

Ik zal eens proberen een iets grotere dataset te genereren.

Acties:
  • +1 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

@Soultaker 500ms is voor deel 1. Voor deel 2 is het 8 of 40 seconden (afhankelijk van of ik alle permutaties neem, of de aaname doe dat de olifant en ik ongeveer dezelfde hoeveelheid valves gaan opendraaien)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Janoz schreef op vrijdag 16 december 2022 @ 18:20:
@Soultaker 500ms is voor deel 1. Voor deel 2 is het 8 of 40 seconden (afhankelijk van of ik alle permutaties neem, of de aaname doe dat de olifant en ik ongeveer dezelfde hoeveelheid valves gaan opendraaien)
Aha, nog steeds niet slecht! Overigens kun je bij deel 2 al meteen een factor 2 tijdswinst realiseren door
spoiler:
de dubbelen uit de paren te halen, immers calculate(permutation) + calculate(complement) == calculate(complement) + calculate(permutation).

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Die zijn er al uit. Totaal is 15 en de permutaties zijn nooit langer dan 7.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Janoz schreef op vrijdag 16 december 2022 @ 18:34:
Die zijn er al uit. Totaal is 15 en de permutaties zijn nooit langer dan 7.
Ah, my bad. Ik had niet goed gelezen.




Hier is wat extra invoer voor dag 16: aoc_2022_day16_large.zip, van verschillende niveaus.

Laatste twee cijfers van de correcte antwoorden:
large-1: 49, 37
large-2: 28, 72
large-3: 60, 30
large-4: 38, 48
large-5: 52, 98
large-6: 83, 85
large-7: 61, 31

De eerste vier sets kunnen in een paar seconden worden opgelost, voor de laatste twee heeft mijn solver ruim een minuut nodig. Maar ik denk dat er andere aanpakken denkbaar zijn die sneller zijn; mijn algoritme is heel erg op de worst-case gericht ten koste van de average case.

Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 07-09 19:29
Pittige vandaag inderdaad. Veel te lang over deel 2 gedaan, vanavond pas kunnen afmaken. Uiteindelijk deel 2 met wat slimme selectie van mogelijkheden kunnen terug brengen naar 350ms.

Dus ik dacht, mooi, mijn recursieve implementatie die er 3 seconden over doet in deel 1 vervangen voor de dezelfde implementatie als deel 2. Helaas werkt ie daar niet zo goed, 3.5 seconden. Ach ja, genoeg tijd gespendeerd, hij doet het.

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Ik heb Floyd-Warshall geïmplementeerd en goed gekeken naar de code van de nummer 1 in het AoC klassement.

Part 1 en 2 gaan nu leuk snel (0,03 resp 2.7s) en leveren de correcte antwoorden. Maar de test-invoer voor part 2 geeft 1575 in plaats van 1707. Ziet iemand wat er mis gaat in mijn code?

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:39
Zojuist dag 15 gedaan. Voor deel 1 een snelle manier gevonden om te bepalen wat gedekt werd door sensors. Deel 2 vond ik lastig, maar heb het toch nog kunnen oplossen:
spoiler:
Ik heb alle sensors met elkaar vergeleken en de paren eruit gezocht waar de afstand en bereik van de sensors precies 2 Manhattan distance ruimte er tussen liet. Daarna tussen de min y en max y mijn oplossing van deel 1 herhaald.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Pff, te lang bezig geweest met een stomme bug in part-2. Mijn simpele brute force komt op 930ms voor alleen part2. Ik denk dat ik nog heel veel dubbel doe maar ik zie niet helemaal hoe ik dat eruit kan filteren met de implementatie die ik nu heb.

.edit: ach jezus, mijn implementatie is ook veel te ingewikkeld. Ik bedenk nu ineens wat veel simpeler is en waarschijnlijk ook veel sneller.

[ Voor 60% gewijzigd door .oisyn op 16-12-2022 22:55 ]

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!

  • arnold_m
  • Registratie: Januari 2010
  • Laatst online: 21:28
Volgend de website is mijn antwoord voor part 1 te hoog, maar op het voorbeeld vindt mijn code het juiste antwoord en ik kan de oplossing die mijn programma gevonden heeft narekenen met een spreadsheet.

Kan iemand zien waar het fout gaat?
Invoer en oplossing:
spoiler:
Valve XB has flow rate=0; tunnels lead to valves YV, RP
Valve VN has flow rate=0; tunnels lead to valves WL, ET
Valve NT has flow rate=0; tunnels lead to valves CU, MQ
Valve ON has flow rate=0; tunnels lead to valves AA, FP
Valve CW has flow rate=0; tunnels lead to valves UH, WY
Valve KN has flow rate=0; tunnels lead to valves JL, MQ
Valve VT has flow rate=0; tunnels lead to valves CU, UI
Valve CR has flow rate=0; tunnels lead to valves OA, QQ
Valve YX has flow rate=0; tunnels lead to valves YJ, CI
Valve WL has flow rate=7; tunnels lead to valves OQ, VN, PU, VF, UA
Valve HV has flow rate=0; tunnels lead to valves OQ, OK
Valve JM has flow rate=21; tunnels lead to valves RG, OH, JE
Valve XF has flow rate=24; tunnels lead to valves OL, TM
Valve VD has flow rate=0; tunnels lead to valves MY, OK
Valve AA has flow rate=0; tunnels lead to valves KO, ON, UI, QE, VF
Valve JE has flow rate=0; tunnels lead to valves JM, NZ
Valve UN has flow rate=0; tunnels lead to valves UA, WY
Valve CC has flow rate=0; tunnels lead to valves IV, CU
Valve PU has flow rate=0; tunnels lead to valves JL, WL
Valve UA has flow rate=0; tunnels lead to valves WL, UN
Valve OJ has flow rate=13; tunnels lead to valves AZ, FP, MY, OL, ET
Valve CJ has flow rate=0; tunnels lead to valves MQ, WS
Valve IV has flow rate=0; tunnels lead to valves NZ, CC
Valve NZ has flow rate=4; tunnels lead to valves WS, IV, IU, EQ, JE
Valve TM has flow rate=0; tunnels lead to valves HL, XF
Valve SG has flow rate=0; tunnels lead to valves MQ, OH
Valve QQ has flow rate=12; tunnel leads to valve CR
Valve WX has flow rate=15; tunnels lead to valves CI, SN
Valve VF has flow rate=0; tunnels lead to valves WL, AA
Valve RP has flow rate=0; tunnels lead to valves WY, XB
Valve SN has flow rate=0; tunnels lead to valves WX, OI
Valve HL has flow rate=0; tunnels lead to valves OK, TM
Valve ET has flow rate=0; tunnels lead to valves OJ, VN
Valve UI has flow rate=0; tunnels lead to valves AA, VT
Valve FP has flow rate=0; tunnels lead to valves ON, OJ
Valve IU has flow rate=0; tunnels lead to valves NZ, QE
Valve JQ has flow rate=0; tunnels lead to valves HR, CU
Valve CU has flow rate=5; tunnels lead to valves NT, VT, JQ, CC
Valve WY has flow rate=19; tunnels lead to valves CW, UN, RP
Valve YJ has flow rate=16; tunnel leads to valve YX
Valve HR has flow rate=0; tunnels lead to valves JQ, JL
Valve RM has flow rate=11; tunnels lead to valves OI, AZ
Valve RG has flow rate=0; tunnels lead to valves YV, JM
Valve MY has flow rate=0; tunnels lead to valves VD, OJ
Valve QE has flow rate=0; tunnels lead to valves AA, IU
Valve OK has flow rate=17; tunnels lead to valves HL, UH, VD, HV
Valve CI has flow rate=0; tunnels lead to valves WX, YX
Valve OL has flow rate=0; tunnels lead to valves XF, OJ
Valve WS has flow rate=0; tunnels lead to valves CJ, NZ
Valve OH has flow rate=0; tunnels lead to valves JM, SG
Valve OQ has flow rate=0; tunnels lead to valves WL, HV
Valve OA has flow rate=0; tunnels lead to valves CR, MQ
Valve OI has flow rate=0; tunnels lead to valves SN, RM
Valve YV has flow rate=25; tunnels lead to valves RG, XB
Valve JL has flow rate=3; tunnels lead to valves KO, HR, PU, KN, EQ
Valve AZ has flow rate=0; tunnels lead to valves OJ, RM
Valve UH has flow rate=0; tunnels lead to valves CW, OK
Valve KO has flow rate=0; tunnels lead to valves AA, JL
Valve EQ has flow rate=0; tunnels lead to valves NZ, JL
Valve MQ has flow rate=10; tunnels lead to valves CJ, OA, NT, SG, KN

move to YV, open YV, move to XB, move to RP, move to WY, open WY, move to CW, move to UH, move to OK, open OK, move to HL, move to TM, move to XF, open XF, move to OL, move to OJ, open OJ, move to AZ, move to RM, open RM, move to OI, move to SN, move to WX, open WX, move to CI, move to YX, move to YJ, open YJ (twee minuten over)

2281

flickr


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
arnold_m schreef op vrijdag 16 december 2022 @ 22:38:
Kan iemand zien waar het fout gaat?
Je lijkt te beginnen bij valve XB omdat het de eerste regel in je invoer is, maar je moet beginnen bij valve AA. Vandaar dat je eerste actie (“move to YV”) al niet klopt: er is geen pad van AA naar YV (wel van XB naar YV).

(Btw, kudos voor het printen van behulpzame debug-informatie _/-\o_ )

[ Voor 9% gewijzigd door Soultaker op 16-12-2022 23:09 ]


Acties:
  • +1 Henk 'm!

  • arnold_m
  • Registratie: Januari 2010
  • Laatst online: 21:28
Dank je wel, dat was inderdaad het probleem.

(De 'debug-informatie' is overigens een bijproduct van het controleren van mijn oplossing in een spreadsheet)

flickr


Acties:
  • 0 Henk 'm!

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

CMG

Vandaag vond ik leuk al heb ik er erg lang aan gewerkt. Heb een aparte manier gevonden om de antwoorden te krijgen door soms zelfs maar 500 permutaties te checken; worst case iets van 60k. Uitgelegd in video 2 hieronder 😊

code | video 1 | video 2

NKCSS - Projects - YouTube


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Varienaja schreef op vrijdag 16 december 2022 @ 21:49:
Part 1 en 2 gaan nu leuk snel (0,03 resp 2.7s) en leveren de correcte antwoorden. Maar de test-invoer voor part 2 geeft 1575 in plaats van 1707. Ziet iemand wat er mis gaat in mijn code?
Ik stel voor dat we een nieuwe regel instellen: als je hulp wil met het debuggen van je code dan moet je instructies posten hoe iemand jouw code kan runnen tegen een willekeurige invoer (je kunt dit ook in de README.{txt,md} van je repo zetten). Bijvoorbeeld:

git clone https://github.com/varienaja/adventofcode.git Varienaja
cd Varienaja
mvn compile
java -cp target/release varienaja.adventofcode2022.Puzzle16 input.txt


(Dit werkt voor jouw repo niet; mvn compile compileert niets. mvn test doet wel iets maar geeft me geen clue hoe ik je code kan runnen tegen een willekeurige invoer.)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op vrijdag 16 december 2022 @ 22:18:
Pff, te lang bezig geweest met een stomme bug in part-2. Mijn simpele brute force komt op 930ms voor alleen part2. Ik denk dat ik nog heel veel dubbel doe maar ik zie niet helemaal hoe ik dat eruit kan filteren met de implementatie die ik nu heb.

.edit: ach jezus, mijn implementatie is ook veel te ingewikkeld. Ik bedenk nu ineens wat veel simpeler is en waarschijnlijk ook veel sneller.
Booyah
Time: 39,592us (load:69us, part1:8,699us, part2:30,823us)
Part 1: 1820
Part 2: 2602


Part1 doet hier al een beetje werk voor part2. Zonder dat zou part1 ~6ms zijn.

[ Voor 9% gewijzigd door .oisyn op 17-12-2022 01:52 ]

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Nasty, maar eindelijk weer tijden waar ik mee kan doen. Part 1 en 2 voor dag 17 in 143ms ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Remcoder
  • Registratie: November 2004
  • Laatst online: 15-09 15:49
Vandaag was beter te doen dan gister.

spoiler:
Uiteindelijk bij deel 2 lang gezeten op een goede manier om de cycle te herkennen.

Uiteindelijk gekeken naar de state van de moves en blocks, dat bleek wel te werken voor het voorbeeld, maar niet voor de echte input.

Daarna bedacht dat ik ook nog de state van de top van de stack moest bijhouden om de cycle goed te herkennen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Remcoder schreef op zaterdag 17 december 2022 @ 13:30:
Vandaag was beter te doen dan gister.

spoiler:
Uiteindelijk bij deel 2 lang gezeten op een goede manier om de cycle te herkennen.

Uiteindelijk gekeken naar de state van de moves en blocks, dat bleek wel te werken voor het voorbeeld, maar niet voor de echte input.

Daarna bedacht dat ik ook nog de state van de top van de stack moest bijhouden om de cycle goed te herkennen.
spoiler:
Ik heb gewoon wat arbitraire waarden gekozen om te zoeken. Ik nam aan dat het vast wel even zou duren voor het patroon stabiel zou zijn dus ben niet bij de onderkant begonnen te zoeken. De bovenkant is natuurlijk ook nog niet stabiel dus kon ik ook niet vanaf de bovenkant zoeken. Voor het zoeken van een herhalend patroon maakt het echter helemaal niet uit waar je in het patroon zit, zolang je verderop maar precies dezelfde regels ziet. UiIteindelijk de eerste 250 regels genegeerd, vanaf daar zoeken naar een patroon en hoeveel regels die hoog is. Dan nog even kijken hoeveel steentjes er gegooid moeten worden voordat er weer zoveel regels bijgekomen zijn en met die gegevens kon ik vervolgens het totaal uitrekenen.


Ook alles weer een beetje opgeruimt en gepushed

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • +1 Henk 'm!

  • joppybt
  • Registratie: December 2002
  • Laatst online: 23:22
Janoz schreef op zaterdag 17 december 2022 @ 13:38:
[...]


spoiler:
Ik heb gewoon wat arbitraire waarden gekozen om te zoeken. Ik nam aan dat het vast wel even zou duren voor het patroon stabiel zou zijn dus ben niet bij de onderkant begonnen te zoeken. De bovenkant is natuurlijk ook nog niet stabiel dus kon ik ook niet vanaf de bovenkant zoeken. Voor het zoeken van een herhalend patroon maakt het echter helemaal niet uit waar je in het patroon zit, zolang je verderop maar precies dezelfde regels ziet. UiIteindelijk de eerste 250 regels genegeerd, vanaf daar zoeken naar een patroon en hoeveel regels die hoog is. Dan nog even kijken hoeveel steentjes er gegooid moeten worden voordat er weer zoveel regels bijgekomen zijn en met die gegevens kon ik vervolgens het totaal uitrekenen.


Ook alles weer een beetje opgeruimt en gepushed
Ik heb het simpeler aangepakt:
spoiler:
Het enige 'patroon' wat ik ben gaan herkennen is een volledig gevulde regel.
Daarbij ontdekte ik dat het altijd bij exact dezelfde index in het jet-patroon gebeurde en altijd na een gelijk aantal gedropte rocks.

In theorie zou ik moeten controleren of er *boven* die volledige regel ook altijd hetzelfde patroon staat en of je dezelfde rock aan het droppen bent maar dat heb ik maar achterwege gelaten. Het antwoord werd wel geaccepteerd namelijk.

Grappig is dat deze methode niet werkt voor de test-input. Die heb ik dus niet kunnen controleren.
spoiler:
Daar komt geen volledige regel langs.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

je reactie inspireerd me :)
spoiler:
ipv het hele patroon zoeken vanaf een arbitrair punt, gewoon beginnen met een regel die toch niet meer veranderd, maar waarvan je aan kunt nemen dat het patroon al begonnen is, en dan elke keer als je bij dezelfde move en dezelfde rock bent kijken of de regel met dezelfde offset gelijk is aan degene waarmee je begonnen bent. Dat is een stuk snellere methode om het patroon te vinden dan dat ik nu doe.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Ik heb in eerste instantie ook gewoon
spoiler:
alles onder de 1000e regel gedropt
, maar ik kon het niet over m'n hart verkrijgen om de code zo te submitten. Uiteindelijk maar de “optimale” versie geïmplementeerd ook al is 'ie niet veel sneller (Python code).
joppybt schreef op zaterdag 17 december 2022 @ 13:51:
Ik heb het simpeler aangepakt:
spoiler:
Het enige 'patroon' wat ik ben gaan herkennen is een volledig gevulde regel.
spoiler:
Dat was ook mijn eerste ingeving, maar in mijn invoer kwam dit niet voor.


edit: stats voor mijn invoer:
spoiler:
De eerste cykel begint na 455 drops en heeft lengte 1710. De maximale hoogte van het grid is 69 rijen (nice).

[ Voor 10% gewijzigd door Soultaker op 17-12-2022 14:54 ]


Acties:
  • 0 Henk 'm!

  • arnold_m
  • Registratie: Januari 2010
  • Laatst online: 21:28
spoiler:
Ik laat het hele herkennen van patronen achterwege. Als de simulatie voor de derde keer bij een bepaalde positie in het patroon bij de eerste 'rots' is, en de aantallen rotsen en lagen zijn gelijkmatig omhoog gegaan, dan is er een blok herhalend blok gevonden, en kunnen er veel stappen worden overgeslagen.

Ik ben best tevreden met de tijden die ik zo haal voor dag17:
real    0m0,007s
user    0m0,003s
sys     0m0,000s

flickr


Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Soultaker schreef op zaterdag 17 december 2022 @ 00:08:
Ik stel voor dat we een nieuwe regel instellen: als je hulp wil met het debuggen van je code dan moet je instructies posten hoe iemand jouw code kan runnen tegen een willekeurige invoer
Ja dat is natuurlijk wel nodig. Ik heb een readme toegevoegd.

Anyway: dag 17 in Java.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
Bedankt! Dat werkt een stuk beter :) Ik zie nu ook wat de bug is. Hij zit in dit stukje. Wil je:

1. Een minimale invoer die demonstreert wat er mis gaat, of
2. Een uitleg van wat er mis gaat, of
3. Een pull request die het probleem fixt?

(Btw ongerelateerde tip: maak de fields in class State final dan is het duidelijker dat het een immutable object is.)

Acties:
  • +1 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Ik heb 'm ook in het snotje. Gefixt! :-)

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Jern_97
  • Registratie: Juli 2015
  • Laatst online: 23-01 22:57
Gelukkig na gisteren heb ik de opdracht van vandaag wel in een redelijke tijd & elegant kunnen oplossen:
https://github.com/Jeroen...22/blob/main/src/day17.rs

Doet er 2.3ms over op mijn input & mijn laptop.

Ik heb eraan gedacht om tijdens de simulatie ook telkens de 'shaft' te reduceren naar zijn minimale vorm, maar volgens mij levert dat enkel een snelheidswinst op als je ram gebruik significant is.
Aangezien part 1 over 2022 rocks gaat en mijn input begint te cyclen na rock #1941 is het misschien zelfs trager.

Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:49
arnold_m schreef op zaterdag 17 december 2022 @ 15:57:
spoiler:
Ik laat het hele herkennen van patronen achterwege. Als de simulatie voor de derde keer bij een bepaalde positie in het patroon bij de eerste 'rots' is, en de aantallen rotsen en lagen zijn gelijkmatig omhoog gegaan, dan is er een blok herhalend blok gevonden, en kunnen er veel stappen worden overgeslagen.
Werkt ongetwijfeld voor de gegeven invoer, maar technisch gezien is dit niet 100% correct. Het is mogelijk dat het profiel aan de bovenkant van het grid verandert ondanks dat de toename van hoogte tussen de checkpoints gelijk is.
Gelukkig na gisteren heb ik de opdracht van vandaag wel in een redelijke tijd & elegant kunnen oplossen: https://github.com/Jeroen...22/blob/main/src/day17.rs
Zelfde verhaal hier: het geeft ongetwijfeld het juiste antwoord voor de specifieke test-invoer maar het is in theorie niet correct. Een voorbeeld:

..####.    ..####.
.....##    .....##
.....##    .....##
......#    ......#
......#    ......#
##..###    #######
##..###    #######


Hier concludeer jij dat in beide gevallen alleen de bovenste 5 regels van belang zijn, maar in de linker variant kun je nog een 2x2 stuk in de onderste twee regels kwijt, en in de rechter niet.

Je moet eigenlijk ook naar links/recht bewegen bij het berekenen van bereikbaarheid (zoals ik hier doe).

(Overigens kun je minimal_shape() in z'n huidige vorm ook efficiënter implementeren zonder array, door voor elke x-coördinaat de maximum-diepte te berekenen, en daar dan weer het maximum van te nemen.)

[ Voor 6% gewijzigd door Soultaker op 17-12-2022 21:58 ]

Pagina: 1 ... 10 ... 12 Laatste