Waarschijnlijk zijn er vlottere manieren, maar vond het best kort en leesbaar
https://github.com/mscham.../blob/master/2020/Day5.cs
Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.
“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.”
Dat werkt beter inderdaad ^^ Soms zit je ook gewoon even 'vast' in het probleem en denk je niet al te ver na. Vond die berekening al "apart" en meestal betekent dat dat er een optimalisatie te vinden is.Woy schreef op zaterdag 5 december 2020 @ 09:08:
Deze was ook weer makkelijk: https://github.com/rverst...de2020/blob/main/Day05.cs
spoiler:Wat mij snel opvalt is dat veel mensen de row/column los parsen, maar dat is helemaal niet nodig, het ID is gewoon een binary number
40D | 8 | 50 | 100 | 300
[ Voor 33% gewijzigd door Bolukan op 05-12-2020 11:15 ]
Ergens in het lijstje met seatId's dat je hebt gevonden mist er een id, dat is jouw stoel. Die stoel is niet voor of achteraan, dus als je lijstje van 100 t/m 800 loopt is het niet 99 of 801, maar mist er ergens tussen die twee getallen 1 bepaald id.com2,1ghz schreef op zaterdag 5 december 2020 @ 11:34:
Nou Dag 5 part 1 was inderdaad een makkie.
https://github.com/com2gh...lin/nl/orhun/day5/Day5.kt
Part 2 heb ik een beetje afgekeken. Ik snapte, en snap nog steeds de opdracht niet.
Dus mijn seatId zou dus niet helemaal vooraan zitten maar ook niet achteraan. En alleen de seatId's met -1 en +1 zou in mijn lijst moeten zitten.
Kan iemand dit in andere woorden mij uitleggen?
- I can accurately say I was born on Earth, but it's not very precise. I can precisely say I was born at latitude 37.229N, longitude 115.811W, but that is not at all accurate - Matt Parker
Siditamentis astuentis pactum.
741 hier.Varienaja schreef op zaterdag 5 december 2020 @ 11:58:
Ik vond het een leuke bijkomstigheid dat mijn stoelnummer 747 was. Of heeft iedereen die?
Siditamentis astuentis pactum.
https://niels.nu
Siditamentis astuentis pactum.
Roses are red, violets are blue, unexpected '{' on line 32.
https://niels.nu
Coding in the cold; <brrrrr />
Anders was het geen puzzelen meer. En natuurlijk om de bokken van de schapen te scheiden. :-PWernerL schreef op zaterdag 5 december 2020 @ 12:27:
Begrijp niet waarom in de uitleg zo'n omslachtige manier vermeld staat.
Siditamentis astuentis pactum.
Heb je ooit met klanten gepraat die iets specifieks gemaakt willen hebben?WernerL schreef op zaterdag 5 december 2020 @ 12:27:
Begrijp niet waarom in de uitleg zo'n omslachtige manier vermeld staat.
[ Voor 24% gewijzigd door DataGhost op 05-12-2020 12:39 ]
Nog nooit een klant meegemaakt die mij verteld hoe een bepaald algorithme moet werken nee.DataGhost schreef op zaterdag 5 december 2020 @ 12:37:
[...]
Heb je ooit met klanten gepraat die iets specifieks gemaakt willen hebben?
Niet zo omslachtig als omschreven in de uitleg. Dan had ik row en column los berekend. Maar nu ben ik wel benieuwd hoe ik dit nog slimmer kan doen.En als ik naar jouw oplossing kijk heeft de "omslachtige manier" gewerkt want je hebt het "omslachtig" opgelostHet is veel simpeler als je er nog wat beter over nadenkt.
[ Voor 26% gewijzigd door WernerL op 05-12-2020 12:45 ]
Roses are red, violets are blue, unexpected '{' on line 32.
Hmm heb ik het per ongeluk goed gedaan dan.Wesley schreef op zaterdag 5 december 2020 @ 11:40:
[...]
Ergens in het lijstje met seatId's dat je hebt gevonden mist er een id, dat is jouw stoel. Die stoel is niet voor of achteraan, dus als je lijstje van 100 t/m 800 loopt is het niet 99 of 801, maar mist er ergens tussen die twee getallen 1 bepaald id.
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
Voor hetzelfde geld was er in part 2 een M geïntroduceerd, dan zit je opeens trinair te rekenen (bitshifts kom je dan niet meer mee weg), of moet je toch per letter gaan werken.DataGhost schreef op zaterdag 5 december 2020 @ 12:37:
[...]
Heb je ooit met klanten gepraat die iets specifieks gemaakt willen hebben?En als ik naar jouw oplossing kijk heeft de "omslachtige manier" gewerkt want je hebt het "omslachtig" opgelost
Het is veel simpeler als je er nog wat beter over nadenkt.
Zo scherp als een voetbal!
Dit is echt weer zo'n big brain oplossing waar ik jaloers op word >:(.Woy schreef op zaterdag 5 december 2020 @ 09:08:
Deze was ook weer makkelijk: https://github.com/rverst...de2020/blob/main/Day05.cs
spoiler:Wat mij snel opvalt is dat veel mensen de row/column los parsen, maar dat is helemaal niet nodig, het ID is gewoon een binary number
Maar de opdracht zegt dat het fully booked was dus dat zou niet kunnen voorkomen?heuveltje schreef op zaterdag 5 december 2020 @ 12:50:
[...]
Hmm heb ik het per ongeluk goed gedaan dan.
Ik las het als "allebei de buren moeten er zijn" dus het kan best zijn dat stoel 107 en 108 ontbreken.
en dan waren beide niet goed geweest.
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
Hmm, met alleen maar hints is dat lastig, maar ik zal het proberen:WernerL schreef op zaterdag 5 december 2020 @ 12:42:
[...]
Niet zo omslachtig als omschreven in de uitleg. Dan had ik row en column los berekend. Maar nu ben ik wel benieuwd hoe ik dit nog slimmer kan doen.
"some of the seats at the very front and back of the plane don't exist on this aircraft"ElkeBxl schreef op zaterdag 5 december 2020 @ 12:53:
[...]
Maar de opdracht zegt dat het fully booked was dus dat zou niet kunnen voorkomen?
[ Voor 3% gewijzigd door heuveltje op 05-12-2020 13:39 ]
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
DataGhost schreef op zaterdag 5 december 2020 @ 12:56:
[...]
Hmm, met alleen maar hints is dat lastig, maar ik zal het proberen:
spoiler:Kijk eens naar alleen de kolommen bijvoorbeeld (L en R). Dat zijn er maar 8. Schrijf ze allemaal eens uit en kijk wat je ziet gebeuren.
[ Voor 4% gewijzigd door WernerL op 05-12-2020 13:00 ]
Roses are red, violets are blue, unexpected '{' on line 32.
Reptile209 schreef op zaterdag 5 december 2020 @ 12:51:
[...]
Voor hetzelfde geld was er in part 2 een M geïntroduceerd, dan zit je opeens trinair te rekenen (bitshifts kom je dan niet meer mee weg), of moet je toch per letter gaan werken.
[ Voor 10% gewijzigd door DataGhost op 05-12-2020 13:18 ]
Ben je wel ingelogd met de juiste account?kaesve schreef op zaterdag 5 december 2020 @ 13:19:
Ik krijg alleen geen sterren op de tweakers leaderboard
[ Voor 46% gewijzigd door DataGhost op 05-12-2020 13:22 ]
Roses are red, violets are blue, unexpected '{' on line 32.
https://niels.nu
Dat is letterlijk hoe ik in C# heb gedaan. Erg simpele dag daardoor.Hydra schreef op zaterdag 5 december 2020 @ 13:34:
spoiler:Ja, je kunt gewoon string-replaces zodat het een binair getal wordt, en die dan naar Int omzetten. In kotlin is dat .toInt(2). Maar ik ga het niet verder aanpassen, want dan is het echt helemaal niet meer 'mijn' oplossing.
[ Voor 8% gewijzigd door Osxy op 05-12-2020 13:46 ]
"Divine Shields and Hearthstones do not make a hero heroic."
At dawn on the fifth day look to the east
... en gaat over tot de orde van de dag
[ Voor 15% gewijzigd door MrHaas op 05-12-2020 13:51 ]
MrHaas schreef op zaterdag 5 december 2020 @ 13:49:
spoiler:Volgens mij nog niet voorbij zien komen hier, maar om de gap te vinden in part B kan je ook gewoon de som van de totale lijst nemen en daar de som van je id-lijst aftrekken. Som van een lijst opeenvolgende nummers kun je bereken door (max^2 - min^2 + min +max).
Mijn implementatie: https://github.com/arjand...ain/day05/src/main.rs#L21
Ik ben vooral gecharmeerd van deze:evanraalte schreef op zaterdag 5 december 2020 @ 14:04:
[...]
spoiler:Dat kan ook ja, mits je de 'valide' zit plaatsen stelt als je totale lijst.
Heb het zelf met 2 set operaties in python gedaan: https://github.com/evanra.../blob/master/day5/day5.py
Caelorum schreef op vrijdag 4 december 2020 @ 15:46:
compactheid is overrated.
Dit lijkt me een goed argument om korte code te verkiezen boven lange code.The Applications Division at Microsoft experiences about 10–20 defects per 1000 lines of code during in-house testing and 0.5 defects per 1000 lines of code in released product
Siditamentis astuentis pactum.
Ho ho dit is slaat natuurlijk als een tang op een varken, hiermee impliceer je dat korte code en lange code ook dezelfde foutgevoeligheid hebben, en dat daarom korte code te prefereren is.Varienaja schreef op zaterdag 5 december 2020 @ 15:54:
[...]
[...]
Dit lijkt me een goed argument om korte code te verkiezen boven lange code.
[ Voor 12% gewijzigd door wmkuipers op 05-12-2020 16:00 ]
[ Voor 12% gewijzigd door Varienaja op 05-12-2020 16:08 ]
Siditamentis astuentis pactum.
Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat
Rips10 schreef op zaterdag 5 december 2020 @ 16:48:
Code uitdrukken in kort of lang is altijd subjectief, zodra daar het woordje te ... voor komt te staan is het allebei niet goed. Code moet gewoon leesbaar zijn, dat is het allerbelangrijkste.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Had dit initieel ook als gedachte, maar om 2x omzetten/converten te omzeilen gewoon in 1x doorheen parsen (zonder meteen binary search te implementeren).Osxy schreef op zaterdag 5 december 2020 @ 13:45:
[...]
Dat is letterlijk hoe ik in C# heb gedaan. Erg simpele dag daardoor.
1
| var last3chars = line[^3..] |
[ Voor 13% gewijzigd door Camulos op 05-12-2020 17:56 ]
Not just an innocent bystander
Dit bedacht ik ook nét nadat ik klaar was met de oplossing. Maar wat mij dan weer opvalt is dat mensen doen alsof deze observatie de implementatie enorm veel simpeler maakt. Zonder deze versimpeling is de code nog steeds vrij eenvoudig (code).Woy schreef op zaterdag 5 december 2020 @ 09:08:
spoiler:Wat mij snel opvalt is dat veel mensen de row/column los parsen, maar dat is helemaal niet nodig, het ID is gewoon een binary number
Ook een goede observatie. Daarmee kun je het probleem in principe in O(1) ruimte oplossen. Heel veel praktisch nut heeft het in dit geval niet.MrHaas schreef op zaterdag 5 december 2020 @ 13:49:
spoiler:Volgens mij nog niet voorbij zien komen hier, maar om de gap te vinden in part B kan je ook gewoon de som van de totale lijst nemen en daar de som van je id-lijst aftrekken.
Volgens mij mis je hier een deling door twee.spoiler:Som van een lijst opeenvolgende nummers kun je bereken door (max^2 - min^2 + min +max).
Oops, my badSoultaker schreef op zaterdag 5 december 2020 @ 17:59:
[...]
Volgens mij mis je hier een deling door twee.
Kijk dit is nou een duidelijk bericht, als het op deze manier geformuleerd wordt ben ik het er helemaal mee eens. Aanleiding van mijn bericht waren de voorgaande berichten die gewoon behoorlijk vaag blijven. Het vaag zijn daar doe ik overigens net zo goed aan mee in mijn vorige berichtDricus schreef op zaterdag 5 december 2020 @ 17:45:
[...]Het thema is: Less is more!
- En beknopte code is doorgaans leesbaarder dan langdradige code.
- En code met minder mogelijke executiepaden (lage cyclomatic complexity) is doorgaans leesbaarder dan code met veel mogelijke executiepaden.
- En functies/classes die 1 responsibility hebben zijn doorgaans leesbaarder dan functies/classes met meerdere responsibilities.
- En functies met weinig parameters zijn doorgaans leesbaarder dan functies met veel parameters.
En ja, je kunt overal in doorschieten, maar zeggen dat kort of lang subjectief is, is gewoon een enorme dooddoener en voegt helemaal niks toe. Er is een heel zinvolle en leerzame discussie te voeren over wat code kwaliteit inhoudt. Dit wordt veelvuldig gedaan, en er zijn allerlei statische code analyse tools die een poging doen om dat de kwantificeren.
De Software Improvement Group is een voorbeeld van een organisatie die serieus met code kwaliteit bezig is. Zij hanteren een wetenschappelijk onderbouwd model (ISO/IEC 25010:2011) voor het meten van code kwaliteit. En guess what? Alle metrieken die zij in kaart brengen gaan over veel versus weinig en lang versus kort. En met beknopte, simpele code ga je daarin altijd beter scoren dan met langdradige ingewikkelde code.
Natúúlijk moet het niet té kort of té lang, en daardoor obscuur zijn, daar zal iedereen het over eens zijn. Maar met dat in het achterhoofd te suggereren dat er eigenlijk geen zinvolle discussie over te voeren is omdat het toch allemaal subjectief is, is gewoon onzin en contraproductief.
Excuus voor deze wat pittig geformuleerde rant, maar ik vind het een groot probleem dat dit onderwerp door te veel collega IT'ers naar mijn mening onvoldoende serieus genomen wordt.
De range expressie wordt ik ook erg happy van maar oude gewoontes enzo. Persoonlijk vond ik converteren naar binary logischer en stuk minder code.Camulos schreef op zaterdag 5 december 2020 @ 17:51:
[...]
Had dit initieel ook als gedachte, maar om 2x omzetten/converten te omzeilen gewoon in 1x doorheen parsen (zonder meteen binary search te implementeren).
Sowieso ben ik erg gecharmeerd van de Range expressies (C#8), waardoor substrings ook niet meer zo clunky aanvoelen. Zoals geeft me de laatste 3 chars van een regel wordt dan
code:
1 var last3chars = line[^3..]
[ Voor 4% gewijzigd door Osxy op 05-12-2020 19:43 ]
"Divine Shields and Hearthstones do not make a hero heroic."
Natuurlijk helemaal eens met je genoemde punten. Echter betekent dat uiteindelijk niet dat je minder of compactere code schrijft. Zeker je derde punt betekent misschien meer code, maar betere onderhoudbaarheid en uitbreidbaarheid.Dricus schreef op zaterdag 5 december 2020 @ 17:45:
[...]Het thema is: Less is more!
- En beknopte code is doorgaans leesbaarder dan langdradige code.
- En code met minder mogelijke executiepaden (lage cyclomatic complexity) is doorgaans leesbaarder dan code met veel mogelijke executiepaden.
- En functies/classes die 1 responsibility hebben zijn doorgaans leesbaarder dan functies/classes met meerdere responsibilities.
- En functies met weinig parameters zijn doorgaans leesbaarder dan functies met veel parameters.
[ Voor 25% gewijzigd door Reynouts op 05-12-2020 19:50 ]
[ Voor 200% gewijzigd door Reynouts op 05-12-2020 19:50 ]
Mother north, how can they sleep while their beds are burning?
Dit is een open deur die in dit soort gesprekken vaak tot in den treure herhaald wordt en daardoor disproportioneel veel aandacht krijgt en die in mijn ervaring ook vrij theoretisch is. Ik kom in de praktijk maar weinig tegen dat er te weinig code geschreven wordt. Overengineering en onnodige complexiteit kom ik véél vaker tegen. Als iedere developer YAGNI en Clean Code boven zijn/haar bed zou hangen, dan zou de wereld er een stuk mooier uitzienReynouts schreef op zaterdag 5 december 2020 @ 19:48:
Sommige slaan daarin echt door.
Het is niet de be all end all, maar wel een bruikbare en belangrijke metriek om code kwaliteit, of beter: onderhoudbaarheid mee te meten. Zie ook de eerder genoemde ISO/IEC 25010:2011 standaard.Laten we "hoe goed" code isvooral niet uitdrukken in regels code of compactheid van code.
[ Voor 36% gewijzigd door Dricus op 05-12-2020 22:45 ]
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Ik neem altijd maar aan dat elke commit door een Linter gaat en dat die afdwingt dat je geen lange methods of classes hebt. Dus ofwel je schrijft fatsoenlijke leesbare code ofwel je schakelt bepaalde checks van de linter uit en hebt goede redenen daarvoor.Dricus schreef op zaterdag 5 december 2020 @ 17:45:
[...]Het thema is: Less is more!
- En beknopte code is doorgaans leesbaarder dan langdradige code.
- En code met minder mogelijke executiepaden (lage cyclomatic complexity) is doorgaans leesbaarder dan code met veel mogelijke executiepaden.
- En functies/classes die 1 responsibility hebben zijn doorgaans leesbaarder dan functies/classes met meerdere responsibilities.
- En functies met weinig parameters zijn doorgaans leesbaarder dan functies met veel parameters.
En ja, je kunt overal in doorschieten, maar zeggen dat kort of lang subjectief is, is gewoon een enorme dooddoener en voegt helemaal niks toe. Er is een heel zinvolle en leerzame discussie te voeren over wat code kwaliteit inhoudt. Dit wordt veelvuldig gedaan, en er zijn allerlei statische code analyse tools die een poging doen om dat de kwantificeren.
De Software Improvement Group is een voorbeeld van een organisatie die serieus met code kwaliteit bezig is. Zij hanteren een wetenschappelijk onderbouwd model (ISO/IEC 25010:2011) voor het meten van code kwaliteit. En guess what? Alle metrieken die zij in kaart brengen gaan over veel versus weinig en lang versus kort. En met beknopte, simpele code ga je daarin altijd beter scoren dan met langdradige ingewikkelde code.
Natúúlijk moet het niet té kort of té lang, en daardoor obscuur zijn, daar zal iedereen het over eens zijn. Maar met dat in het achterhoofd te suggereren dat er eigenlijk geen zinvolle discussie over te voeren is omdat het toch allemaal subjectief is, is gewoon onzin en contraproductief.
Excuus voor deze wat pittig geformuleerde rant, maar ik vind het een groot probleem dat dit onderwerp door te veel collega IT'ers naar mijn mening onvoldoende serieus genomen wordt.
[ Voor 23% gewijzigd door Varienaja op 06-12-2020 06:47 ]
Siditamentis astuentis pactum.
Niet perse heel erg, als je zoals jij al een goed begrip van het probleem hebt. Maar het helpt wel om het "probleem" beter te doorgronden.Soultaker schreef op zaterdag 5 december 2020 @ 17:59:
[...]
Dit bedacht ik ook nét nadat ik klaar was met de oplossing. Maar wat mij dan weer opvalt is dat mensen doen alsof deze observatie de implementatie enorm veel simpeler maakt. Zonder deze versimpeling is de code nog steeds vrij eenvoudig (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.”
[ Voor 36% gewijzigd door Woy op 21-12-2020 16:12 ]
“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.”
Ik blijf mij toch ergeren aan jouw single file oplossing
“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.”
Om even te laten zien met een linkje naar Github is het inderdaad niet ideaal. Maar in de IDE merk ik er niks van.Woy schreef op zondag 6 december 2020 @ 07:01:
Ik blijf mij toch ergeren aan jouw single file oplossing, moet je verder natuurlijk helemaal zelf weten, maar ik begin er bijna van tegen mijn scherm te schreeuwen
[ Voor 10% gewijzigd door Varienaja op 06-12-2020 07:15 ]
Siditamentis astuentis pactum.
De lookup is een collectie van de mensen binnen de groep met dat antwoord, als dat aantal gelijk is aan de groep grootte heeft iedereen het antwoord gegeven.Varienaja schreef op zondag 6 december 2020 @ 07:09:
[...]
Mooie Code overigens @Woy, al vat ik "x=>x.Count() == grp.Length)" mentaal nog niet.
[ Voor 3% gewijzigd door Woy op 06-12-2020 07:24 ]
“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.”
40D | 8 | 50 | 100 | 300
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Engineering is like Tetris. Succes disappears and errors accumulate.
Dan heb je nu tenminste gewoon tijd voor klusjes!MrHaas schreef op zondag 6 december 2020 @ 08:45:
Had gehoopt op wat moeilijke puzzel voor mn vrije zondag.
Engineering is like Tetris. Succes disappears and errors accumulate.
Heeft Kotlin geen fold-variant waar het eerste element als de initial wordt gebruikt?armageddon_2k1 schreef op zondag 6 december 2020 @ 08:50:
spoiler:Gewoon union en intersect van sets. Even rekening houden bij de intersect dat je moet beginnen met het hele alfabet natuurlijk.
Goeie, net even uitgezocht en Kotlin heeft dat wel, alleen heet het dan reduce.MrHaas schreef op zondag 6 december 2020 @ 08:59:
Heeft Kotlin geen fold-variant waar het eerste element als de initial wordt gebruikt?
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
[ Voor 19% gewijzigd door heuveltje op 06-12-2020 09:35 ]
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
4,8kW ZO-NW PVOutput 8x300Wp ZO 12 graden. 8x300Wp NW 12 graden.
Prachtig! Geïnspireerd door jouw code en de ontdekking van de reduce functie ben ik nog een beetje aan het refactoren geslagen.armageddon_2k1 schreef op zondag 6 december 2020 @ 08:50:
Eitje deze :-)
https://github.com/rj-cod.../rjcoding/aoc2020/Day6.kt
spoiler:Gewoon union en intersect van sets. Even rekening houden bij de intersect dat je moet beginnen met het hele alfabet natuurlijk.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Jup reduce. Gewoon een brain fart.MrHaas schreef op zondag 6 december 2020 @ 08:59:
[...]
Heeft Kotlin geen fold-variant waar het eerste element als de initial wordt gebruikt?
Engineering is like Tetris. Succes disappears and errors accumulate.
Ja man. Was er helamaal voor gaan zitten. Op m'n werkkamertje, fles koffie, stuk sloffe amandelstaaf. Ben je in no time klaar.MrHaas schreef op zondag 6 december 2020 @ 08:45:
Had gehoopt op wat moeilijke puzzel voor mn vrije zondag.
https://niels.nu
Normaliter als je meerde operaties achter elkaar doet, doe je dat ook op sequences. Die zijn lazy, i.p.v. map/flatMap e.d. op Lists en Sets, die zijn eager. In m'n AoC code doe ik dat alleen vrijwel nooit omdat het meer ruimte kost en toch niet uitmaakt.Dricus schreef op zondag 6 december 2020 @ 08:48:
Dag 6
Oh, en jammer dat je in Kotlin bij een flatMap van sets een list van alle elementen in die sets terugkrijgt, in plaats van een set. Daar zal vast een gedachte achter zitten, maar het voelt voor mij niet intuïtief.
[ Voor 6% gewijzigd door Hydra op 06-12-2020 10:17 ]
https://niels.nu
1
2
3
4
5
6
7
8
9
| ./target/release/aoc2020 --all day parse part1 part2 total output 1 23.074µs 2.3µs 1.552µs 26.926µs 539851 212481360 2 213.361µs 20.987µs 61.996µs 296.344µs 465 294 3 88.782µs 1.504µs 5.389µs 95.675µs 164 5007658656 4 381.366µs 41.123µs 50.056µs 472.545µs 200/265 116/265 5 53.024µs 583ns 22.328µs 75.935µs 901 661 6 118.321µs 382.422µs 276.77µs 777.513µs 6565 3137 all 1.898134ms |
1
| 6 119.396µs 29.524µs 29.583µs 178.503µs 6565 3137 |
1
| 6 103.112µs 17.422µs 16.923µs 137.457µs 6565 3137 |
[ Voor 22% gewijzigd door veldsla op 24-12-2020 11:58 ]
https://niels.nu
1
2
3
4
5
6
7
8
| //keep only the unique answers $unique_answers = count_chars($answers_clean,3); //count unique answers $unique_answers_count = strlen($unique_answers); //add count of unique characters to the total $result_part1 = $result_part1 + $unique_answers_count; |
1
2
| //add count of unique characters to the total $result_part1 = $result_part1 + strlen(count_chars($answers_clean,3)); |
Coding in the cold; <brrrrr />
Done!Belindo schreef op zaterdag 5 december 2020 @ 12:30:
Dag 5 maar weer in Excel. Daar werk ik dagelijks mee en voelt bij sommige opdrachten toch lekkerder dan PHP. @Daanoz, misschien kun je Excel/VBA toevoegen bij mijn naam in de OP?
Belindo schreef op zondag 6 december 2020 @ 10:43:
Link: dag 6 in PHP
Voor mijn doen relatief snel opgelost met weinig code.
Vraag voor de experts; is het aan te raden om elke stap uit te schrijven, of combineer je het gewoon in één regel?
Bijvoorbeeld dit stukje:PHP:
1 2 3 4 5 6 7 8 //keep only the unique answers $unique_answers = count_chars($answers_clean,3); //count unique answers $unique_answers_count = strlen($unique_answers); //add count of unique characters to the total $result_part1 = $result_part1 + $unique_answers_count;
kan natuurlijk ook samengevoegd worden tot één regel:PHP:
1 2 //add count of unique characters to the total $result_part1 = $result_part1 + strlen(count_chars($answers_clean,3));
Tevens doe ik voor Part 2 een foreach door het hele alfabet om te kijken hoe vaak een letter ('vraag') voorkomt, en of dit aantal overeenkomt met het aantal mensen in de groep. Omdat niet in elke groep elk van de 26 letters voorkomt, lijkt het mij nogal redundant om toch door elke letter te lopen.
(Ik kan helaas geen code in de spoiler tag doen, als de code open en bloot niet wenselijk is, laat het dan even weten, dan haal ik het weg)
"Divine Shields and Hearthstones do not make a hero heroic."
"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
Roses are red, violets are blue, unexpected '{' on line 32.
Hoewel de meeste tijd nu waarschijnlijk in de I/O zit, denk ik dat je het geheel nog net iets sneller kan makenveldsla schreef op zondag 6 december 2020 @ 10:34:
Parser nog wat aangepast....Zo blijven we toch lekker bezig (laatse versie)
code:
1 6 103.112µs 17.422µs 16.923µs 137.457µs 6565 3137
[ Voor 11% gewijzigd door Creepy op 06-12-2020 12:42 ]
"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
Mooi gebruik van LINQ!jelknab schreef op zondag 6 december 2020 @ 12:30:
Best snel klaar vandaag, ben benieuwd of er dit jaar weer zo'n uitdaging in zit die zich over meerdere dagen verspreid (int code).
Oplossing in C#: https://github.com/jelkna...0Code%202020/Day6/Day6.cs
Not just an innocent bystander
Werkt misschien beter in 2D? Ik vind het persoonlijk niet heel duidelijk wat er gebeurt.MaNDaRK schreef op zondag 6 december 2020 @ 13:14:
Ik vond day 3 wel leuk, dus ik heb een animatie er van gemaakt:
[Afbeelding]
( voor het eerst dat ik zoiets probeer)
"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
https://niels.nu
"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
Leuk idee, maar ik vond dit al een ding, haha.Soultaker schreef op zondag 6 december 2020 @ 13:29:
[...]
Werkt misschien beter in 2D? Ik vind het persoonlijk niet heel duidelijk wat er gebeurt.
Ah, leuke approach inderdaad. Heb een vergelijking gedaan tussen de oplossing metSoultaker schreef op zondag 6 december 2020 @ 12:24:
[...]
Hoewel de meeste tijd nu waarschijnlijk in de I/O zit, denk ik dat je het geheel nog net iets sneller kan makenspoiler:(voorbeeld code).door sets als bitmasks te representeren
[ Voor 3% gewijzigd door MrHaas op 06-12-2020 15:49 ]
[ Voor 14% gewijzigd door com2,1ghz op 06-12-2020 16:06 ]
Apple iPhone 16e LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq