There once was a lady of Wight --- Who travelled much faster than light --- She departed one day --- In a relative way --- And arrived on the previous night
Was even goed nadenken wat er precies gevraagd werd! Later de code nog maar eens opschonen om het beter leesbaar te maken
edit: i.p.v. meer leesbaar ben ik de code eens wat korter gaan maken. Dag 4 in 13 regels code: https://pastebin.com/A1v8qhU5 . Hoe kort kan dit in andere talen?
[ Voor 31% gewijzigd door ZieglerNichols op 04-12-2018 08:46 ]
Dag 4 in Kotlin
https://niels.nu
Anyways, heb part 1 nu bijna werkend. Example werkt, maar daadwerkelijk input niet

[ Voor 6% gewijzigd door Gropah op 04-12-2018 09:51 ]
Steam: Ryada.
Ik heb een paar utility functions waarmee ik input kan lezen aan de hand van jaar en dag integers. Ik heb er een waar ik ook een regex aan kan voeren die meteen de regex loslaat op die regels. Misschien een idee? Als een group in een regex [0-9]+ matched weet je meteen dat je het zonder problemen naar een Int om kan zetten.Ryada schreef op dinsdag 4 december 2018 @ 09:54:
Dag 3 helaas vandaag pas kunnen doen omdat gisteren een aardig drukke dag was. Nu op naar dag 4. Helaas had ik een hoop loops nodig (naar mijn mening) om dag 3 voor elkaar te krijgen, en moet nog steeds eens wat gaan bedenken voor input validation. Misschien dat ik dat vandaag doe nadat ik dag 4 heb gedaan.
https://niels.nu
Klinkt in principe prima, maar ik zit meer te denken om een validation functie te maken en die via een `.Select()` op de inpit array los te laten. dan kan ik per dag makkelijk een validatie toevoegen en misschien ook aan de user vertellen op welke regel(s) het fout gaat.Hydra schreef op dinsdag 4 december 2018 @ 10:05:
[...]
Ik heb een paar utility functions waarmee ik input kan lezen aan de hand van jaar en dag integers. Ik heb er een waar ik ook een regex aan kan voeren die meteen de regex loslaat op die regels. Misschien een idee? Als een group in een regex [0-9]+ matched weet je meteen dat je het zonder problemen naar een Int om kan zetten.
Regex zelf ben ik niet zo een held in (ik gebruik ook 3 `.Replace()` calls in dag 3 om te parsen

Steam: Ryada.
AoC is natuurlijk een ideaal moment om nieuwe dingen te leren. En deze relatief simpele inputs lenen zicht daar prima voor. Bijvoorbeeld voor Dag 3:Ryada schreef op dinsdag 4 december 2018 @ 10:09:
Regex zelf ben ik niet zo een held in (ik gebruik ook 3 `.Replace()` calls in dag 3 om te parsen
1
2
3
4
5
6
7
8
9
| #1322 @ 241,755: 16x18 Mapt naar: #[0-9]+ @ [0-9]+,[0-9]+: [0-9]+x[0-9]+ Met haakjes kun je dan capture groups aanleggen: #([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+) |
[0-9] is een character set van alle karakters tussen 0 en 9. (Je kunt voor deze specifiek ook de shorthand \d gebruiken). + matcht met 1 of meer characters uit die character class.
Kan je zeker aanraden dit onder de knie te krijgen. Als je vragen hebt, let me know
Edit, voorbeeldje voor dag 3 in C#:
1
2
3
4
5
6
7
| var input = "#1322 @ 241,755: 16x18"; var regex = new Regex(@"#([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)"); var match = regex.Match(input); for(int i = 0;i < match.Groups.Count;i++) { Console.WriteLine("Group " + i + ", value: " + match.Groups[i].Value); } |
[ Voor 17% gewijzigd door Hydra op 04-12-2018 10:29 ]
https://niels.nu
Ben zelf niet heel kapot van RegEx (stijle leercurve, en foutgevoelig) en gelukkig in C# vaak ook niet nodig. Voor dag 3 had ik deze:Hydra schreef op dinsdag 4 december 2018 @ 10:18:
[...]
AoC is natuurlijk een ideaal moment om nieuwe dingen te leren. En deze relatief simpele inputs lenen zicht daar prima voor. Bijvoorbeeld voor Dag 3:
code:
1 2 3 4 5 6 7 8 9 #1322 @ 241,755: 16x18 Mapt naar: #[0-9]+ @ [0-9]+,[0-9]+: [0-9]+x[0-9]+ Met haakjes kun je dan capture groups aanleggen: #([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)
1
| line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries) |
Waarbij je een array van strings krijgt, en aangezien bij AoC de input relatief clean en hetzelfde is werkt dit prima. Om het meteen te converteren naar integers kan je in C# direct bovenstaande meteen parsen
1
| int[] data = Array.ConvertAll(line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries), int.Parse); |
en dit is natuurlijk voor @Ryada
Not just an innocent bystander
[ Voor 13% gewijzigd door ElkeBxl op 04-12-2018 10:25 ]
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
Hmmm ziet er wel goed uit om eens te gaan proberen iddHydra schreef op dinsdag 4 december 2018 @ 10:18:
[...]
AoC is natuurlijk een ideaal moment om nieuwe dingen te leren. En deze relatief simpele inputs lenen zicht daar prima voor. Bijvoorbeeld voor Dag 3:
code:
1 2 3 4 5 6 7 8 9 #1322 @ 241,755: 16x18 Mapt naar: #[0-9]+ @ [0-9]+,[0-9]+: [0-9]+x[0-9]+ Met haakjes kun je dan capture groups aanleggen: #([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)
[0-9] is een character set van alle karakters tussen 0 en 9. (Je kunt voor deze specifiek ook de shorthand \d gebruiken). + matcht met 1 of meer characters uit die character class.
Kan je zeker aanraden dit onder de knie te krijgen. Als je vragen hebt, let me know
Edit, voorbeeldje voor dag 3 in C#:
code:
1 2 3 4 5 6 7 var input = "#1322 @ 241,755: 16x18"; var regex = new Regex(@"#([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)"); var match = regex.Match(input); for(int i = 0;i < match.Groups.Count;i++) { Console.WriteLine("Group " + i + ", value: " + match.Groups\[i].Value); }
Zelf had ik deze (slechte) parsing
1
2
3
4
5
6
7
8
9
| var text = line.Replace("#", string.Empty) .Replace("@", string.Empty) .Replace(":", string.Empty); var values = text.Split(' ', StringSplitOptions.RemoveEmptyEntries); var claimId = int.Parse(values[0]); var xCoordinate = int.Parse(values[1].Split(',')[0]); var yCoordinate = int.Parse(values[1].Split(',')[1]); var width = int.Parse(values[2].Split('x')[0]); var height = int.Parse(values[2].Split('x')[1]); |
Je zou ook eenCamulos schreef op dinsdag 4 december 2018 @ 10:24:
[...]
Ben zelf niet heel kapot van RegEx (stijle leercurve, en foutgevoelig) en gelukkig in C# vaak ook niet nodig. Voor dag 3 had ik deze:
C#:
1 line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries)
Waarbij je een array van strings krijgt, en aangezien bij AoC de input relatief clean en hetzelfde is werkt dit prima. Om het meteen te converteren naar integers kan je in C# direct bovenstaande meteen parsen
C#:
1 int[] data = Array.ConvertAll(line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries), int.Parse);
1
2
3
| line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse); // of line.Split(new char[] { '#', ' ', '@', ',', ':', 'x' }, StringSplitOptions.RemoveEmptyEntries).Cast<int>(); |
kunnen doen als we toch bezig zijn
[ Voor 22% gewijzigd door Ryada op 04-12-2018 10:39 ]
Steam: Ryada.
1
2
3
4
5
6
7
8
| val regex = "point: (\\d+),(\\d+)".toRegex() val input = sequenceOf("point: 123,456", "point: 456,789") val result = input.mapNotNull { regex.matchEntire(it)?.groupValues?.drop(1) } .map { it[0].toInt() to it[1].toInt() } .toList() assertThat(result).contains(Pair(123, 456), Pair(456,789)) |
Je komt dus heel snel van een list tekstregels naar een lijst objecten.
Mja. Je moet het zelf wetenCamulos schreef op dinsdag 4 december 2018 @ 10:24:
Ben zelf niet heel kapot van RegEx (stijle leercurve, en foutgevoelig) en gelukkig in C# vaak ook niet nodig. Voor dag 3 had ik deze:
[ Voor 33% gewijzigd door Hydra op 04-12-2018 11:00 ]
https://niels.nu
Regex ziet er altijd een beetje imposant uit, maar eigenlijk erg simpel in gebruik, als je eenmaal de syntax kent. Ik gebruik altijd https://regexr.com/ om een query te schrijven. Zie je meteen wat je regex doet en of ie werkt of niet.Camulos schreef op dinsdag 4 december 2018 @ 10:24:
[...]
Ben zelf niet heel kapot van RegEx (stijle leercurve, en foutgevoelig) en gelukkig in C# vaak ook niet nodig.
Voorbeeld
Ik kwam er zelf ook pas later achter, maar bij dag 3 heb je genoeg aan "/\d+/" om alle cijfers uit de string te matchen. De rest van de data heb je niet nodig.Hydra schreef op dinsdag 4 december 2018 @ 10:18:
code:
1 2 3 4 5 6 7 8 9 #1322 @ 241,755: 16x18 Mapt naar: #[0-9]+ @ [0-9]+,[0-9]+: [0-9]+x[0-9]+ Met haakjes kun je dan capture groups aanleggen: #([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)

Ik heb zelf 2 regexen gebruikt, 1 om de tijd er uit te halen en 1 om de ID uit de string na verwijdering van de tijd proberen te halen.
Performant zal het wel niet zijn, maar meh:
639769 ns => 0.640 ms voor beide delen.
Je moet vooral niet alles met een Regex proberen op te lossen. Dingen als HTML parsen e.d. is gewoon niet fijn, al kun je er best deelproblemen mee oplossen.Hydra schreef op dinsdag 4 december 2018 @ 10:48:
Mja. Je moet het zelf wetenIk ben het er nogal mee oneens dat regexes foutgevoelig zijn (het matcht of het matcht niet), en die leercurve zul je als professionele dev toch doorheen moeten. My 2 cents.
Voor iets simpels als dit probleem vindt ik Regexen ook erg fijn, en leesbaar, ik probeer wel zo veel mogelijk gebruik te maken van named capture groups, dat maakt het nog wat leesbaarder.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ja klopt, maar ik gebruik de 'hele' regex ook meteen om te valideren dat ik de input correct lees. Dat heeft me vorig jaar ook al een keer winst opgeleverd.Trolladelaar schreef op dinsdag 4 december 2018 @ 12:53:
Ik kwam er zelf ook pas later achter, maar bij dag 3 heb je genoeg aan "/\d+/" om alle cijfers uit de string te matchen. De rest van de data heb je niet nodig.
Dat zeg ik toch helemaal niet?Woy schreef op dinsdag 4 december 2018 @ 15:21:
Je moet vooral niet alles met een Regex proberen op te lossen.
[ Voor 51% gewijzigd door Hydra op 04-12-2018 15:46 ]
https://niels.nu
Nee dat was meer een aanvulling op jouw reactie op Camulos
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ben wel echt totaal ontevreden over hoe de code er uiteindelijk uitziet (architectuur/design wise) en over hoe mijn variables genoemd zijn.
Maar ik heb iig weer 2 gouden sterretjes erbij \o/
Voor mensen die de slechte code willen zien: https://github.com/RyadaP...ewModels/Day4ViewModel.cs
Steam: Ryada.
Anoniem: 1004565
'a: while break 'a {}farlane schreef op maandag 3 december 2018 @ 23:41:
[...]
Tot nu toe heb ik LibreOffice Calc gebruikt om meteen arrays van objecten te concatten icm text to columns, scheelt weer parse code
On another note : Waarom heeft men in Rust niet een C achtige for loop genomen? Of anders, wat is de Rustian break-early-out-of-nested-for-loop? (breaks met labels lezen als goto's)
In Rust kan je handmatig breaken uit loops, dmv een label. Echter is ook netjes om Iterators te maken, en te combineren, zodat je geen handmatige breaks nodig hebt!
Even in spoiler tags ipv code voor degenen die niets willen zien.
https://pastebin.com/1Rzjf1zc
[ Voor 87% gewijzigd door BernardV op 04-12-2018 17:50 ]
https://niels.nu
Aangepast, goed punt!Hydra schreef op dinsdag 4 december 2018 @ 17:48:
Je kunt 't beter als gist of op pastebin posten. Die code is op deze manier onleesbaar.
Ik vind het zelf altijd handiger om destructuring declarations te gebruiken:Hydra schreef op dinsdag 4 december 2018 @ 10:48:
[code]
val result = input.mapNotNull { regex.matchEntire(it)?.groupValues?.drop(1) }
.map { it[0].toInt() to it[1].toInt() }
.toList()
1
| .map { (first, second) -> Pair(first.toInt(), second.toInt()) } |
Niet zo blij met vandaag, het ziet er gewoon chaotisch uit. Desondanks, prima executietijden met 10-20ms voor deel 1 en 20-30ms voor deel 2.
In dat geval moet ik vooral beter leren lezen denk ikbernardV schreef op dinsdag 4 december 2018 @ 18:41:
@Lye Als reactie op je spoiler, dat klopt ook. Staat ook in de tekst.
spoiler:Because all asleep/awake times are during the midnight hour (00:00 - 00:59), only the minute portion (00 - 59) is relevant for those events.

Ik had m'n oplossing blijkbaar wat over engineered, ik had een multimap van coordinaat naar welke claim id's daarop zaten, het invullen van die multimap duurde langer dan ik had verwacht, als je de boel in een plat 2d array douwt is het idd veel sneller, nu voor beide < 10ms inclusief lezen en parserendiabolofan schreef op maandag 3 december 2018 @ 20:36:
[...]
Ik kopieer de input in mijn code in een List<string>. Dus dat is sneller dan file uitlezen, maar deze parse ik dus inderdaad wel binnen die tijd. Deze tijd is wel zonder de JIT compilatie tijd. Met JIT compilatie tijd is het 46 ms. Zie https://github.com/gercob...b/master/Day03/Program.cs.
A software developer is someone who looks both left and right when crossing a one-way street.
Valt mee als je een "found" variabele als loop voorwaarde gebruikt. IIg heb ik het laatste decennium geen goto hoeven te gebruiken.Liveshort schreef op dinsdag 4 december 2018 @ 00:57:
[...]
In C kun je om uit een nested loop te breaken toch ook niet heel veel anders dan een goto gebruiken zonder je in rare bochten te wringen om absoluut maar geen goto te gebruiken?
Is het ook niet. Het leest alleen raar.Ben zelf AoC aan het aangrijpen om Rust een beetje te leren, en Google voorziet me eigenlijk alleen maar van loops met labels waar je vervolgens naar verwijst in je break. Lijkt me op zich ook geen hele gekke oplossing.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Behalve dat je het deel van de loop body ná de break dan ook moet voorzien van een if (!found) { ... }.farlane schreef op dinsdag 4 december 2018 @ 20:46:
[...]
Valt mee als je een "found" variabele als loop voorwaarde gebruikt. IIg heb ik het laatste decennium geen goto hoeven te gebruiken.
Ik heb genoeg gevallen gezien waar de programmeur héél trots was dat hij geen breaks nodig had, maar dat het met breaks een stuk leesbaarder was geweest.
Heeft geen speciale krachten en is daar erg boos over.
Solution Day 4 c#
Anoniem: 1004565
Wattan? Rust's Chrono library heeft gewoon een mooie functie hiervoor! Heb niet eens een regex nodig!veldsla schreef op dinsdag 4 december 2018 @ 13:33:
Dag 4...Advent of parsing. Meh, niet echt leuk.
Mijn stukje parsing is dit:
https://pastebin.com/PJb54hYi
Nice! Ik ken ze wel en gebruik ze ook, maar nog niet op die manier gedaan. Goeie tip!Lye schreef op dinsdag 4 december 2018 @ 18:34:
Ik vind het zelf altijd handiger om destructuring declarations te gebruiken:
https://niels.nu
Klopt het dat je de ID moet vinden van de guard die het meeste geslapen heeft en deze vermenigvuldigd met de minuut waarin deze het meeste geslapen heeft?
You don't have to be crazy to do this job, but it helps ....
Precies dat ja.Alain schreef op dinsdag 4 december 2018 @ 23:59:
Bij dag 4, puzzle 1:
Klopt het dat je de ID moet vinden van de guard die het meeste geslapen heeft en deze vermenigvuldigd met de minuut waarin deze het meeste geslapen heeft?
Ok, dan snap ik werkelijk niet waarom mijn antwoord fout is

You don't have to be crazy to do this job, but it helps ....
Glazenbol kijken: maar ga je er van uit dat de input gesorteerd is zoals in het voorbeeld? Want dat is bij je gegeven input niet het geval.Alain schreef op woensdag 5 december 2018 @ 00:04:
[...]
Ok, dan snap ik werkelijk niet waarom mijn antwoord fout is
Dat weet ik. Maar om eerlijk te zijn heb ik tijdens het schrijven meer aandacht besteed aan mijn vriendin dan aan mijn code. Morgen nog eens rustig naar kijken en vriendin op mute.Gropah schreef op woensdag 5 december 2018 @ 00:12:
[...]
Glazenbol kijken: maar ga je er van uit dat de input gesorteerd is zoals in het voorbeeld? Want dat is bij je gegeven input niet het geval.
You don't have to be crazy to do this job, but it helps ....
Stuk simpeler dan Dag 4. Brute force implementatie is wel traag, misschien later eens kijken of ik een snellere manier kan bedenken.
https://niels.nu
Dan ben ik benieuwd hoeemnich schreef op woensdag 5 december 2018 @ 06:40:
Vandaag kan je er wel een mooie regex op los laten
Een string van 50K karakters is nu ook weer niet zo spannend.
Vond Part2 dan wel een leuke variatie.. vanavond kijken of we het kunnen optimaliseren
Edit:
[ Voor 21% gewijzigd door Camulos op 05-12-2018 09:33 ]
Not just an innocent bystander
Voor degene hierboven:
emnich schreef op woensdag 5 december 2018 @ 10:09:
Voor degene hierboven:
spoiler:Is een text replace in jullie talen niet gewoon sneller dan door de hele string lopen? Ik zal het zo eens in PHP proberen maar ik kan het me niet voorstellen dat het zelf doen sneller is?
dan een str_replace($combinations, '', $input, $count); en een while($count>0).
Dit is redelijk snel.
Leuke dag, part 1 was easy, part 2 zat ik even te stoeien om het acceptabel snel te krijgen. Eerste poging was 27 sec, daarna naar 5. Uiteindelijk 2ms en 62ms. Goed genoeg...
Poging 2: Linked List
Poging 3: Char array, waarbij ik dingen door null verving en dan keek of -1 en +1 daarbuiten niet toevallig vervangen kon worden.
De methode voor kijken of het een pair was vond ik uiteindelijk wel mooi:
Math.Abs(arr[i] - arr[j]) == 32
[ Voor 3% gewijzigd door DRaakje op 05-12-2018 10:39 ]
DRaakje schreef op woensdag 5 december 2018 @ 10:39:
spoiler:Poging 1: Lijst met alle mogelijke combos en string replace.
Poging 2: Linked List
Poging 3: Char array, waarbij ik dingen door null verving en dan keek of -1 en +1 daarbuiten niet toevallig vervangen kon worden.
De methode voor kijken of het een pair was vond ik uiteindelijk wel mooi:
Math.Abs(arr[i] - arr[j]) == 32
(X > 0 ? X : -X) == 32
Of:
((X ^ (X >> 31)) - (X >> 31)) == 32
Heb veel te lang met de eerste opdracht vandaag lopen kloten omdat ik dacht dat je uiteindelijk maar 10 characters over moest houden. Na wat koffie erachter gekomen dat ik al meer dan een half uur de goede oplossing had. En opdracht 2 was best makkelijk om te maken erna.
Tot nu toe vind ik het wel leuke challenges, vanavond maar eens een refactor over de hele code van dag 1 t/m 5 gooien.
Steam: Ryada.
emnich schreef op woensdag 5 december 2018 @ 10:09:
spoiler:Is een text replace in jullie talen niet gewoon sneller dan door de hele string lopen? Ik zal het zo eens in PHP proberen maar ik kan het me niet voorstellen dat het zelf doen sneller is?
Wat overbodig geschuif in een vector geëlimineerd en woppa: 5a 0.4ms, 5b: 9.4ms.
Camulos schreef op woensdag 5 december 2018 @ 08:59:
Dag 5 ook opgelost (C#). Geen slimmigheden, gewoon bruteforce.
Een string van 50K karakters is nu ook weer niet zo spannend.
Vond Part2 dan wel een leuke variatie.. vanavond kijken of we het kunnen optimaliseren
Edit:
spoiler:Ik zag op de solution-thread mensen een Stack gebruiken! super smart.. vanmiddag kijken hoeveel dat uitmaakt tov bruteforce en meermaals itereren
Opzich vond ik vandaag wel prima gaan, ~10ms en ~60ms als tijden.
[ Voor 7% gewijzigd door Lye op 05-12-2018 13:20 ]
Doh! Goeie.Lye schreef op woensdag 5 december 2018 @ 12:59:
Opzich vond ik vandaag wel prima gaan, ~10ms en ~60ms als tijden.
https://niels.nu
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
40D | 8 | 50 | 100 | 300
Slim om die 20% mee te nemen, heb ik overheen gelezen.ppx17 schreef op woensdag 5 december 2018 @ 14:04:
Hmm vond day 5 best een uitdagende voor PHP, 5 verschillende implementaties gedaan, uiteindelijk bleek deze het snelste (467 ms)
spoiler:Heb het ook geprobeerd met maar 1x door de string (lijst) heen te gaan, maar array_splice kopieert de hele array steeds over dus was heel traag en unset() laat gaten in de index ontstaan. Iemand hier misschien een oplossing voor?
Ik ben zo vrij geweest om je react_str_replace functie enigzins aan te passen naar de implementatie die ik had.
https://pastebin.com/JRKpkFGD
Met mijn input is dit 30% sneller, dit is dan wel gebasseerd op de rest van jouw code.
5a: 0.39ms, 5b: 0.95ms
Damn dat ik daar niet aan gedacht had, dat scheelt zeker gigantisch.veldsla schreef op woensdag 5 december 2018 @ 15:29:
Holy.
spoiler:Het resultaat van a gebruiken als input voor b geeft een flinke speedup!
5a: 0.39ms, 5b: 0.95ms

@bernardV Die scheelt in inderdaad nog eens 30%.
Als ik deze twee combineer kom ik nu op 195 34ms.
40D | 8 | 50 | 100 | 300
Nog simpeler:bernardV schreef op woensdag 5 december 2018 @ 11:29:
spoiler:Je zou de tijd denk ik nog wel iets lager kunnen krijgen door Math.abs te verwijderen en te vervangen door iets als:
(X > 0 ? X : -X) == 32
Of:
((X ^ (X >> 31)) - (X >> 31)) == 32

In dat geval doe ik het niet.bwerg schreef op dinsdag 4 december 2018 @ 20:59:
[...]
Behalve dat je het deel van de loop body ná de break dan ook moet voorzien van een if (!found) { ... }.
Het is voor mij geen doel op zich, maar als ik kan kiezen tussen een extra voorwaarde in de for( ... ) en een break neem ik de eerste. Ik schaam me echter niet voor een break of continue zelfs.Ik heb genoeg gevallen gezien waar de programmeur héél trots was dat hij geen breaks nodig had, maar dat het met breaks een stuk leesbaarder was geweest.Ik snap die aversie tegen overzichtelijk geplaatste breaks niet.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Daarna een set als datastructuur gebruikt...
1
2
3
4
5
6
7
8
9
| python3 oude-versie.py real 2m27.631s user 2m26.967s sys 0m0.360s python3 nieuw-versie.py real 0m0.140s user 0m0.123s sys 0m0.012s |
Lekker verschil
Heb de exacte getallen even weggelaten om geen hints te geven.
[ Voor 21% gewijzigd door Boudewijn op 05-12-2018 23:03 ]
Een stack, daar had ik niet aan gedacht, is natuurlijk een stuk efficienter.Camulos schreef op woensdag 5 december 2018 @ 08:59:
spoiler:Ik zag op de solution-thread mensen een Stack gebruiken! super smart.. vanmiddag kijken hoeveel dat uitmaakt tov bruteforce en meermaals itereren
Mijn code (C#) meteen maar even aangepast.
Anoniem: 1004565
Part 2: 15.077524ms
part 1: https://github.com/DutchG.../master/day05/src/main.rs
part 2: https://github.com/DutchG...aster/day05_2/src/main.rs
Voor part 2 kan ik de stack de hele tijd hergebruiken !
[ Voor 11% gewijzigd door Anoniem: 1004565 op 06-12-2018 00:01 ]
[ Voor 12% gewijzigd door ZieglerNichols op 06-12-2018 07:34 ]

Ja ik heb dat gisteravond ook nog gefixed waarbij mijn runtime van 8500ms naar 126ms ging (totale tijd voor part01 en part02 samen) is maar ruim 60x zo snelRips10 schreef op woensdag 5 december 2018 @ 23:50:
[...]
Een stack, daar had ik niet aan gedacht, is natuurlijk een stuk efficienter.
Mijn code (C#) meteen maar even aangepast.

Had jij ook zoveel verschil?
Not just an innocent bystander

https://niels.nu
Daanoz schreef op donderdag 6 december 2018 @ 08:03:
spoiler:Deze had van mij wel wat lastiger gemogen, uiteindelijk met 'bruteforce' minder dan 100ms. In eerste instantie begonnen met een Wikipedia: Quadtree implementatie maar bleek helemaal niet nodig te zijn...
Voor de geïnteresseerden: https://github.com/Sotam/AdventOfCode2018
Er is nog wel een mogelijk probleem dat je bounding box niet groot genoeg is als er een cluster aan de rand ligt. Die heb ik maar als panic! ingebouwd
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
Volkomen logisch. Je moet er alleen wel ff op komen. En da's bij mij meestal het probleemveldsla schreef op donderdag 6 december 2018 @ 12:25:
Ik heb vrijwel hetzelfde gedaan als @Hydra.
spoiler:Maar is het eigenlijk niet logisch dat het 1 regio is.
https://niels.nu
Ligt aan mij, ik kan niet tellen
aaaaa1cccc aAaaa.cccc aaaddecccc aadddeccCc ..dDdeeccc bb.deEeecc bBb.eeee.. bbb2eeefff bbb3eeffff bbb.ffffFf
De punten die ik met cijfers 1, 2, 3 heb gemarkeerd, zijn in het voorbeeld leeg ('.'). Maar 1 ligt dichter bij A dan C, en 2 en 3 dichter bij B dan E, dus volgens mij hadden die punten ingekleurd moeten zijn.
[ Voor 8% gewijzigd door Soultaker op 06-12-2018 16:36 ]
Voor punt 1 geldt dat A en E even ver weg liggen (beide 5). Voor 2 en 3 geldt dan weer dat ze even ver van B en D liggen.Soultaker schreef op donderdag 6 december 2018 @ 16:22:
Ligt het aan mij of klopt het voorbeeld van dag 6 niet?
aaaaa1cccc aAaaa.cccc aaaddecccc aadddeccCc ..dDdeeccc bb.deEeecc bBb.eeee.. bbb2eeefff bbb3eeffff bbb.ffffFf
De punten die ik met cijfers 1, 2, 3 heb gemarkeerd, zijn in het voorbeeld leeg ('.'). Maar 1 ligt dichter bij A dan C, en 2 en 3 dichter bij B dan E, dus volgens mij hadden die punten ingekleurd moeten zijn.
Je hebt gelijk! Ik had me verteld. (Kun je ook beter aan de computer overlaten.)Lye schreef op donderdag 6 december 2018 @ 16:32:
Voor punt 1 geldt dat A en E even ver weg liggen (beide 5). Voor 2 en 3 geldt dan weer dat ze even ver van B en D liggen.
Mijn bounding box bleek veel te klein, simpelweg de minimale en maximale waarden pakken lijkt voor de gegeven input te kloppen, echter voor andere inputs totaal niet.
Ik heb nu executietijden van ~150ms voor deel 1 en ~160ms voor deel 2, dit bezint mij totaal niet maar ik zou niet weten waar ik verder kan optimaliseren...
[ Voor 10% gewijzigd door Lye op 06-12-2018 23:08 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Anoniem: 1004565
https://github.com/DutchG.../master/day06/src/main.rs , 133.507897ms
https://github.com/DutchG...aster/day06_2/src/main.rs, 7.603355ms
[ Voor 16% gewijzigd door Anoniem: 1004565 op 06-12-2018 22:19 ]
Jouw deel 2 gaat mank op de volgende input:Anoniem: 1004565 schreef op donderdag 6 december 2018 @ 22:16:
Eindelijk snapte ik het probleem, en was het redelijk te doen in Rust!
https://github.com/DutchG.../master/day06/src/main.rs , 133.507897ms
https://github.com/DutchG...aster/day06_2/src/main.rs, 7.603355ms
1, 1
zou als output 199980001 moeten hebben. Hetzelfde probleem had ik dus ook
Dag 5 is een makkie Boudewijn.Boudewijn schreef op donderdag 6 december 2018 @ 22:43:
Ik ben met dag 4 begonnen, jeetje wat een lelijk probleem. Als het telkens complexer wordt ben je op dag 25 wel even bezig met je parser.
You don't have to be crazy to do this job, but it helps ....
Anoniem: 1004565
Komt 1, 1 voor in een input? Als dat het geval is, heb ik geluk gehad. hahaLye schreef op donderdag 6 december 2018 @ 22:51:
[...]
Jouw deel 2 gaat mank op de volgende input:
1, 1
zou als output 199980001 moeten hebben. Hetzelfde probleem had ik dus ook
Dag 7 in Kotlin
Heel lang met deel 2 bezig geweest, gewoon omdat ik de instructies tot 2 keer toe niet goed gelezen had en een belangrijk detail gemist heb. Genant
Het wisselt een beetje. Ik vermoed ook dat 'ie de meer complexere in de weekended doet, dus ik verwacht een 'leuke' komend weekend.Boudewijn schreef op donderdag 6 december 2018 @ 22:43:
Ik ben met dag 4 begonnen, jeetje wat een lelijk probleem. Als het telkens complexer wordt ben je op dag 25 wel even bezig met je parser.
[ Voor 37% gewijzigd door Hydra op 07-12-2018 08:16 ]
https://niels.nu
Day 7 in PHP
40D | 8 | 50 | 100 | 300
Mwah, ik parse hem gewoon met 1 RegexBoudewijn schreef op donderdag 6 december 2018 @ 22:43:
Ik ben met dag 4 begonnen, jeetje wat een lelijk probleem. Als het telkens complexer wordt ben je op dag 25 wel even bezig met je parser.
^\[\d+-\d+-\d+ \d+:(?<minutes>\d+)\] (?<type>Guard|wakes|falls) (#(?<guardNum>\d+))?
[/code]
Ik sorteer eerst gewoon string based, dus de datum interesseert me verder niet meer, maar die kan je natuurlijk ook gewoon helemaal parsen.
Het kan zelfs nog wel wat simpeler, want je kan natuurlijk ook gewoon een switch op col 20 van de string doen voor het type. Alleen als het een 'G' is hoef je het Guardnum te parsen, en als het een 'w' of 'f' is moet je de minutes parsen.
[ Voor 17% gewijzigd door Woy op 07-12-2018 09:03 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ben mezelf c# aan het leren, dus dit zijn leuke vingeroefeningen.
Alleen of ik doe iets fout, of ik snap vraag 1 dag 2 al niet

Bij mij komt elke waarde maar 1 keer voor, en ben er redelijk zeker van dat dat mijn code klopt (excel vond dat ook namelijk
Of is het de bedoeling dat je net zo vaak door die lijst blijft loopen totdat je ergens een duplicaat vind ?
Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d
[edit]
never mind, zie de fout denk ik al.
[ Voor 11% gewijzigd door emnich op 07-12-2018 10:26 ]
En als je de input van de pagina zelf gebruikt dan?heuveltje schreef op vrijdag 7 december 2018 @ 10:16:
Waarom zie ik dit topic nu pas ?
Ben mezelf c# aan het leren, dus dit zijn leuke vingeroefeningen.
Alleen of ik doe iets fout, of ik snap vraag 1 dag 2 al niet
Bij mij komt elke waarde maar 1 keer voor, en ben er redelijk zeker van dat dat mijn code klopt (excel vond dat ook namelijk)
Of is het de bedoeling dat je net zo vaak door die lijst blijft loopen totdat je ergens een duplicaat vind ?
Dat ja.heuveltje schreef op vrijdag 7 december 2018 @ 10:16:
Of is het de bedoeling dat je net zo vaak door die lijst blijft loopen totdat je ergens een duplicaat vind ?
Die had ik dus gebruikt .bernardV schreef op vrijdag 7 december 2018 @ 10:36:
[...]
En als je de input van de pagina zelf gebruikt dan?
Dat verklaart
Thuis eens opnieuw draaien met een extra loop erin
Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d
Ik vond dag 7 juist irritanter om goed te krijgen.sjakie02 schreef op vrijdag 7 december 2018 @ 11:19:
Zo dag 7 was wel stuk simpeler dan dag 6
Zeker deel 2 explodeerde nogal bij mij qua lijnen code maar het werkt en dat is enige dat telt voor mij
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
Dan doe jij 6 verkeerd of ik 7, maar zeker 6 part 2 was erg eenvoudig IMHOsjakie02 schreef op vrijdag 7 december 2018 @ 11:19:
Zo dag 7 was wel stuk simpeler dan dag 6
var result = (from x in Enumerable.Range(0, input.Max(p=>p.x))
from y in Enumerable.Range(0, input.Max(p=>p.y))
where input.Sum(point=>Dist((x,y), point)) < 10000
select (x,y)).Count();
[/code]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”