Advent of Code 2020 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 ... 3 ... 14 Laatste
Acties:

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Mschamp schreef op vrijdag 4 december 2020 @ 08:41:
Ik moet iets dom over het hoofd zin: part 1 lukt, de 2 voorbeelden voor part 2 lukken, maar resultaat van test 2 klopt niet. Vandaag is het niet door integer overflow
Ik had een exceptie doordat ik een lege string als integer probeerde te parsen. Maar zoiets valt natuurlijk enorm op.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:09
Mschamp schreef op vrijdag 4 december 2020 @ 08:41:
Ik moet iets dom over het hoofd zin: part 1 lukt, de 2 voorbeelden voor part 2 lukken, maar resultaat van test 2 klopt niet. Vandaag is het niet door integer overflow
Dat probleem heb ik wel vaker bij deze opdrachten. Het voorbeeld dekt nooit alle situaties af en soms kan je geluk hebben dat een foutieve implementatie wel het goede antwoord geeft op de echte input.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dricus schreef op vrijdag 4 december 2020 @ 08:20:
Leuk om ook nog andere Kotlin oplossingen te zien!

Dit is de mijne van dag 4: https://github.com/Dricus...tofcode/year2020/Day04.kt

Ik vond hem weer heel goed te doen. En Kotlin begin ik steeds meer te waarderen, vooral omdat je er zo heerlijk functional-style mee kunt programmeren!
Ah, creatieve oplossing met het replacen van \n\n en dan \n naar ' ', ik had daar niet direct een slimme oplossing voor dus heb toch maar voor de meer procedurele oplossing gekozen.

Overigens lijken mij jouw regex matches niet volledig te kloppen, want je matched niet op start/end dus er zijn ook cases te bedenken die niet voldoen. Vooral bij PID is die kans groot met bijvoorbeeld 10 digits

“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.”


Acties:
  • +1 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Down schreef op vrijdag 4 december 2020 @ 08:34:
Ik ben niet zo thuis in de Java wereld, maar heeft Java die functionaliteit niet? Of werkt het gewoon niet zo goed?
Java heeft die functionaliteit ook wel hoor, en die zit IMHO ook behoorlijk goed in elkaar voor wat betreft lambda expressies. De beslissing om de implementatie voor het overgrote deel op basis van type inference te doen vind ik briljant, omdat daarmee het gebruik maken van reeds aanwezige API's (zoals Comparator bijvoorbeeld) ook ineens veel makkelijker wordt. Echter: De streams API is weliswaar erg snel qua performance, maar ik vind het geen fijne API om mee te werken.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Mschamp
  • Registratie: April 2014
  • Laatst online: 14:30
Woy schreef op vrijdag 4 december 2020 @ 08:46:
[...]

Ah, creatieve oplossing met het replacen van \n\n en dan \n naar ' ', ik had daar niet direct een slimme oplossing voor dus heb toch maar voor de meer procedurele oplossing gekozen.

Overigens lijken mij jouw regex matches niet volledig te kloppen, want je matched niet op start/end dus er zijn ook cases te bedenken die niet voldoen. Vooral bij PID is die kans groot met bijvoorbeeld 10 digits
Dat was ook mijn probleem. Bedankt voor de tip :)

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Deel 2 was inderdaad vooral hopen dat de implementatie van alle checks correct was, anders zit er niet veel anders op dan testcases schrijven om te zien welke check het issue is.

Wel geinig om te zien hoe erg de oplossingen in Kotlin en C# lijken op wat ik zelf geschreven heb. En dat het bij veel mensen net als bij mij copy/paste van een vorige dag is en dan omgebouwd wordt, ik zie bij @Woy nog een functie om bomen te tellen :P

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
dcm360 schreef op vrijdag 4 december 2020 @ 08:51:
En dat het bij veel mensen net als bij mij copy/paste van een vorige dag is en dan omgebouwd wordt, ik zie bij @Woy nog een functie om bomen te tellen :P
Niet waar, ik zou nooit Copy/Paste doen :(

:+

“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.”


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Woy schreef op vrijdag 4 december 2020 @ 08:46:
Overigens lijken mij jouw regex matches niet volledig te kloppen, want je matched niet op start/end dus er zijn ook cases te bedenken die niet voldoen. Vooral bij PID is die kans groot met bijvoorbeeld 10 digits
De matches functie geeft geen true terug als een deel van de input de regex matcht. Zie https://kotlinlang.org/ap....text/-regex/matches.html. Volgens mij is het daarmee waterdicht. Of zie ik iets over het hoofd?

[ Voor 8% gewijzigd door Dricus op 04-12-2020 09:05 ]

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dricus schreef op vrijdag 4 december 2020 @ 09:00:
[...]

De matches functie geeft geen true terug als een deel van de input de regex matcht. Zie https://kotlinlang.org/ap....text/-regex/matches.html. Volgens mij is het daarmee waterdicht. Of zie ik iets over het hoofd?
Ja je hebt gelijk, het is een fullmatch, niet iets wat ik gewend ben bij de meeste regex libraries, maar dan kun je mijn comment negeren inderdaad ;)

Op zich wel vreemd overigens, want in regex termen matched hij wel gewoon.

[ Voor 6% gewijzigd door Woy op 04-12-2020 09:10 ]

“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.”


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Woy schreef op vrijdag 4 december 2020 @ 09:08:
[...]

Ja je hebt gelijk, het is een fullmatch, niet iets wat ik gewend ben bij de meeste regex libraries, maar dan kun je mijn comment negeren inderdaad ;)

Op zich wel vreemd overigens, want in regex termen matched hij wel gewoon.
Mjah, ik heb in al heel wat talen van regex API's gebruik gemaakt, en gegeven hoe verschillend die API's soms werken vind ik het lastig om daar een soort universeel beeld uit te halen van hoe-het-zou-moeten-zijn(tm).

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Is het trouwens niet zo dat die start/end markers alleen relevant zijn bij multiline matching?

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • ThoNohT
  • Registratie: September 2006
  • Laatst online: 01-07 14:30
Dag 4 was wel wat meer code inderdaad. Toch ben ik nog redelijk tevreden over hoe mijn oplossing eruit ziet. Voor het eerst ben ik ook naar regexes overgestapt. Hier en daar was het nu wel de fijnste manier.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 12:42

Reptile209

- gers -

Deel 1 van dag 4 weer in native Excel opgelost :+: één kolom per field en dan kijken of er genoeg gevuld zijn. Voor deel 2 wel de VBA-editor aangezwengeld om de waarden te valideren. Ging vrij vlot moet ik zeggen! En gelijk het Like-statement ontdekt voor eenvoudige regex in VBA, nice :).

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 16:20

Belindo

▶ ─🔘─────── 15:02

Link: dag 4 in PHP

Dag 4 Part 1 eerst in Excel gedaan, maar toch ook maar even in PHP.

Alle feedback is welkom, want ik ben een complete junior in het effectief schrijven van PHP. Het is voor mij meer een hobby dan dat ik er iets voor het werk mee doe.

Beide oplossingen waren juist, maar de code duurt erg lang om te draaien.

[ Voor 9% gewijzigd door Belindo op 04-12-2020 09:42 ]

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 15:49

P_Tingen

omdat het KAN

Mijn taal (Progress 4GL) ondersteunt geen regexes. Gelukkig maar want
Some people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems.
Maar het alternatief is wel redelijk wat klopwerk, maar goed, het is weer gelukt

Overigens vind ik het heerlijk om ook oplossingen van anderen te bekijken, en dan het liefst verschillende programmeertalen. Zijn er hier meer die dat doen?

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


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Nou, valt me niet tegen dat m'n part 2 oplossing in één keer goed was. Vreesde al dat te moeten gaan debuggen :P

Acties:
  • 0 Henk 'm!

  • Wesley
  • Registratie: Januari 2007
  • Laatst online: 03-07 22:11
Reptile209 schreef op vrijdag 4 december 2020 @ 09:41:
Deel 1 van dag 4 weer in native Excel opgelost :+: één kolom per field en dan kijken of er genoeg gevuld zijn. Voor deel 2 wel de VBA-editor aangezwengeld om de waarden te valideren. Ging vrij vlot moet ik zeggen! En gelijk het Like-statement ontdekt voor eenvoudige regex in VBA, nice :).
Ik was ook bijna die route op gegaan (maar dan Apps Script ivm Google Spreadsheets) maar uiteindelijk toch met wat funky formules toch ook deel 2 volledig in de sheet kunnen doen. Wel stuk omslachtiger dan dag 2 & 3. 8)7

Acties:
  • 0 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 15:49

P_Tingen

omdat het KAN

Belindo schreef op vrijdag 4 december 2020 @ 09:41:
Link: dag 4 in PHP
Alle feedback is welkom, want ik ben een complete junior in het effectief schrijven van PHP. Het is voor mij meer een hobby dan dat ik er iets voor het werk mee doe.

Beide oplossingen waren juist, maar de code duurt erg lang om te draaien.
Wat me opvalt is dat je alle velden van het paspoort bekijke. Als je bij het eerste veld van het paspoort al ziet dat het niet geldig is, hoef je de rest ook niet meer te valideren. Zelf heb ik daarvoor gekozen en hoewel mijn taal zeker niet de snelste is, was hij toch in 20msec klaar

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


Acties:
  • 0 Henk 'm!

  • madpilot0
  • Registratie: November 2008
  • Laatst online: 04-07 09:59

madpilot0

I ain't mad

Ik zat met deel 2 vast omdat m'n antwoord niet klopte maar niet uit kon vogelen waarom.

spoiler: title
re.match(r"[0-9]{9}",passport["pid"])

Er is blijkbaar een pid met 10+ cijfers waar dit ook op matched :9

Acties:
  • +1 Henk 'm!

  • Wesley
  • Registratie: Januari 2007
  • Laatst online: 03-07 22:11
Belindo schreef op vrijdag 4 december 2020 @ 09:41:
Link: dag 4 in PHP

Dag 4 Part 1 eerst in Excel gedaan, maar toch ook maar even in PHP.

Alle feedback is welkom, want ik ben een complete junior in het effectief schrijven van PHP. Het is voor mij meer een hobby dan dat ik er iets voor het werk mee doe.

Beide oplossingen waren juist, maar de code duurt erg lang om te draaien.
Naast wat @P_Tingen zegt, je zou meer met regex kunnen doen. Bijv de kleurcode kan geheel in 1 regex.

Acties:
  • 0 Henk 'm!

  • Osxy
  • Registratie: Januari 2005
  • Laatst online: 15:47

Osxy

Holy crap on a cracker

Duurde iets langer voor deel 2 dan nodig door een foutje in mijn validator (copy paste foutje :( ), pas toen ik de validators onder unittest had was het erg snel duidelijk.

Maar wel tevreden met code, kan netter / leaner als ik anderen hun C# zie maar dat blijft voorlopig wel zo. Stopte nu ook alles in een List omdat ik het vermoeden had dat deel 2 bepaalde records moest ophalen en daar iets mee moest doen, daarom beetje overkill code maar ach.

https://github.com/osxy/A...2020/AoC2020/Days/Day4.cs

[ Voor 18% gewijzigd door Osxy op 04-12-2020 10:13 ]

"Divine Shields and Hearthstones do not make a hero heroic."


Acties:
  • 0 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 16:20

Belindo

▶ ─🔘─────── 15:02

P_Tingen schreef op vrijdag 4 december 2020 @ 09:53:
[...]

Wat me opvalt is dat je alle velden van het paspoort bekijke. Als je bij het eerste veld van het paspoort al ziet dat het niet geldig is, hoef je de rest ook niet meer te valideren. Zelf heb ik daarvoor gekozen en hoewel mijn taal zeker niet de snelste is, was hij toch in 20msec klaar
Ik heb nu bij elk van de 7 checks een
code:
1
else { goto theEnd; }
gezet, waar 'theEnd' het einde van de checks is. Dus als check 1 niet 'true' is, dan slaat ie de andere 6 over. Helaas nog niet sneller. Ik vermoed dat het in het stukje zit waar ik de array met passports doorloop en daar en nieuwe array per attribuut van maak? Kan dat nog sneller?

Ik ga dus van

code:
1
Array ( [0] => byr:1937 eyr:2030 pid:154364481 hgt:158cm iyr:2015 ecl:brn hcl:#c0946f cid:155 )


naar
code:
1
Array ( [0] => byr:1937 [1] => eyr:2030 [2] => pid:154364481 [3] => hgt:158cm [4] => iyr:2015 [5] => ecl:brn [6] => hcl:#c0946f [7] => cid:155 [8] => )


naar
code:
1
Array ( [byr] => 1937 [eyr] => 2030 [pid] => 154364481 [hgt] => 158cm [iyr] => 2015 [ecl] => brn [hcl] => #c0946f [cid] => 155 [] => )

Zodat ik in mij checks de waarde kan aanroepen door middel van
code:
1
$output_array[$i]['byr']

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
Op zich een eitje, alleen moet je precies zijn. Uiteindelijk gewoon maar een bak unit tests gemaakt en zo toch een typo eruit gehaald (1010 ipv 2010).

Mijn oplossing

[ Voor 16% gewijzigd door DRaakje op 04-12-2020 10:29 ]


Acties:
  • 0 Henk 'm!

  • com2,1ghz
  • Registratie: Oktober 2004
  • Laatst online: 03-07 16:21
Ik zie weer eens wat over het hoofd in d4p1. Klein voorbeeldje werkt, mijn eigen data werkt weer niet. Waarde zou te laag zijn.

Als iemand zin heeft om er weer eens een kijkje in te nemen:
https://github.com/com2gh...main/kotlin/day4/Part1.kt

Acties:
  • 0 Henk 'm!

  • ThoNohT
  • Registratie: September 2006
  • Laatst online: 01-07 14:30
com2,1ghz schreef op vrijdag 4 december 2020 @ 10:28:
Ik zie weer eens wat over het hoofd in d4p1. Klein voorbeeldje werkt, mijn eigen data werkt weer niet. Waarde zou te laag zijn.

Als iemand zin heeft om er weer eens een kijkje in te nemen:
https://github.com/com2gh...main/kotlin/day4/Part1.kt
Het lijkt erop dat je elke regel als een paspoort ziet? In het probleem zijn passports over meerdere regels verspreid met een witregel ertussen.

Edit: nevermind, ik zag een if over het hoofd. Dan weet ik het zo direct nog niet :X

[ Voor 7% gewijzigd door ThoNohT op 04-12-2020 10:33 ]


Acties:
  • 0 Henk 'm!

  • com2,1ghz
  • Registratie: Oktober 2004
  • Laatst online: 03-07 16:21
ThoNohT schreef op vrijdag 4 december 2020 @ 10:32:
[...]

Het lijkt erop dat je elke regel als een paspoort ziet? In het probleem zijn passports over meerdere regels verspreid met een witregel ertussen.
Op regel 12 kijk ik of de regel leeg is, zo ja dan voeg ik het passpoort object toe aan de lijst. Vervolgens wordt currentPassword weer geinitialiseerd met een nieuwe Passport instantie.

Acties:
  • +2 Henk 'm!

  • DRaakje
  • Registratie: Februari 2000
  • Niet online
com2,1ghz schreef op vrijdag 4 december 2020 @ 10:28:
Ik zie weer eens wat over het hoofd in d4p1. Klein voorbeeldje werkt, mijn eigen data werkt weer niet. Waarde zou te laag zijn.

Als iemand zin heeft om er weer eens een kijkje in te nemen:
https://github.com/com2gh...main/kotlin/day4/Part1.kt
Geen ervaring met kotlin, maar zo op het eerste gezicht vergeet je het laatste paspoort toe te voegen aan je lijst?

Acties:
  • 0 Henk 'm!

  • rhoolwerf
  • Registratie: November 2007
  • Laatst online: 04-07 14:15
DRaakje schreef op vrijdag 4 december 2020 @ 10:37:
[...]


Geen ervaring met kotlin, maar zo op het eerste gezicht vergeet je het laatste paspoort toe te voegen?
Ik zou dat ook denken, gezien de logica 'Op regel 12 kijk ik of de regel leeg is, zo ja dan voeg ik het passpoort object toe aan de lijst. ' Hiermee wordt de laatste passpoort niet verwerkt, zou ik verwachten.

Acties:
  • 0 Henk 'm!

  • com2,1ghz
  • Registratie: Oktober 2004
  • Laatst online: 03-07 16:21
DRaakje schreef op vrijdag 4 december 2020 @ 10:37:
[...]


Geen ervaring met kotlin, maar zo op het eerste gezicht vergeet je het laatste paspoort toe te voegen aan je lijst?
Damnit! Je hebt gelijk! Opgelost!

Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 16:02
Woy schreef op vrijdag 4 december 2020 @ 08:33:
Er zijn nog wel wat verbeteringen te doen, maar op zich is het wel acceptabele leesbare code.
1 opmerking.. die RegexOptions.Compiled maakt het instantiëren van de Regex een factor (10?) trager;
dus beter maak je die buiten je loop aan of haal je de flag eruit :)


Edit: Juist, verkeerd gelezen. Er komt een Func<> uit die functie die meermaals uitgevoerd kan worden.

[ Voor 63% gewijzigd door nescafe op 04-12-2020 11:12 ]

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dricus schreef op vrijdag 4 december 2020 @ 09:21:
Is het trouwens niet zo dat die start/end markers alleen relevant zijn bij multiline matching?
Nee het is ook erg nuttig binnen single line regexen. Al snap ik wel het nut van een functie die dat automatisch doet, want veel regexen willen volledig matchen. Maar dat had ik dan wat explicieter verwacht als fullMatch of exactMatch o.i.d.

“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.”


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
nescafe schreef op vrijdag 4 december 2020 @ 11:05:
[...]


1 opmerking.. die RegexOptions.Compiled maakt het instantiëren van de Regex een factor (10?) trager;
dus beter maak je die buiten je loop aan of haal je de flag eruit :)
Ik zie niet waar een regex meerdere malen aangemaakt wordt? Per validator maximaal 1 keer

“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.”


Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17
Niet mijn favoriete soort puzzel aangezien het teveel op werken lijkt, maar toch wel tevreden met het regex-loze resultaat: https://github.com/arjand...ob/main/day04/src/main.rs

Acties:
  • 0 Henk 'm!

  • Osxy
  • Registratie: Januari 2005
  • Laatst online: 15:47

Osxy

Holy crap on a cracker

Woy schreef op vrijdag 4 december 2020 @ 11:08:
[...]

Ik zie niet waar een regex meerdere malen aangemaakt wordt? Per validator maximaal 1 keer
En daarmee dus per paspoort 1x.

"Divine Shields and Hearthstones do not make a hero heroic."


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 15:39

MueR

Admin Tweakers Discord

is niet lief

Ik heb een tijdje vastgezeten op deel 2..
spoiler:
bleek ergens een rogue spatie.. naar..


Anyway, dag 4 in php. Ook de hele zut maar even netjes class based gemaakt enzo. Scheelt boilerplate.

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


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Osxy schreef op vrijdag 4 december 2020 @ 11:16:
[...]


En daarmee dus per paspoort 1x.
Ik maak niet per paspoort validators aan hoor :?

“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.”


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Dag 4 in Kotlin

Niet echt een puzzel, is 'gewoon' requirements implementeren. Denk dat het vooral een opwarmertje is voor het parsen / matchen van data. Niet de leukste om te bouwen. Ik vind de 'read' functie 'meh', ff nadenken of ik daar een meer functional manier kan gebruiken.

https://niels.nu


Acties:
  • +1 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17
Hydra schreef op vrijdag 4 december 2020 @ 11:25:
Dag 4 in Kotlin

Niet echt een puzzel, is 'gewoon' requirements implementeren. Denk dat het vooral een opwarmertje is voor het parsen / matchen van data. Niet de leukste om te bouwen. Ik vind de 'read' functie 'meh', ff nadenken of ik daar een meer functional manier kan gebruiken.
Je kan splitten op 2 newlines achter elkaar en dan de lines uit die blokken flatmappen :).

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
MrHaas schreef op vrijdag 4 december 2020 @ 11:27:
Je kan splitten op 2 newlines achter elkaar en dan de lines uit die blokken flatmappen :).
Ah fuck; goeie. Ik lees ze nu per regel in ipv als 1 grote string. Ga ik ff mee aan de slag.

Edit: Done! Veel beter :)

[ Voor 4% gewijzigd door Hydra op 04-12-2020 11:42 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • veldsla
  • Registratie: April 2000
  • Laatst online: 04-07 14:24
MrHaas schreef op vrijdag 4 december 2020 @ 11:12:
Niet mijn favoriete soort puzzel aangezien het teveel op werken lijkt, maar toch wel tevreden met het regex-loze resultaat: https://github.com/arjand...ob/main/day04/src/main.rs
Lijkt redelijk op de mijne. Nom bevalt nog goed. Zeker voor dit soort data is het wel goed bruikbaar. De leercurve van de juiste combinators is wel even lastig.

Dit is de hele parser. Gaat nog wel owned in een hashmap omdat mijn day runner implementatie een beetje knullig is...
Rust:
1
2
3
4
5
6
7
8
9
10
fn parse(i: &str) -> IResult<&str, Vec<PassPort>> {
    let item = separated_pair(take(3usize), char(':'), 
        terminated(is_not("\r\n "), alt((space1, line_ending))));
    let passport = fold_many1(item, PassPort(HashMap::new()), 
        |mut pp: PassPort, (key, value): (&str, &str)| {
            pp.0.insert(key.to_owned(), value.to_owned());
            pp
        });
    all_consuming(many1(terminated(passport, alt((line_ending, eof)))))(i)
}

Acties:
  • +1 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Hydra schreef op vrijdag 4 december 2020 @ 11:29:
[...]


Ah fuck; goeie. Ik lees ze nu per regel in ipv als 1 grote string. Ga ik ff mee aan de slag.
Het kan ook zonder flatmap met een beetje slim voorbewerken van de input: https://github.com/Dricus...tofcode/year2020/Day04.kt

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Dricus schreef op vrijdag 4 december 2020 @ 11:44:
[...]

Het kan ook zonder flatmap met een beetje slim voorbewerken van de input: https://github.com/Dricus...tofcode/year2020/Day04.kt
Je doet het eigenlijk op dezelfde manier als ik nu gedaan heb. De hint die ik nodig had, was ook niet het flatmappen (doe ik zelf niet) maar het inlezen als 1 grote string en dan splitten op \n\n.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Hydra schreef op vrijdag 4 december 2020 @ 11:55:
[...]


Je doet het eigenlijk op dezelfde manier als ik nu gedaan heb. De hint die ik nodig was, was ook niet het flatmappen (doe ik zelf niet) maar het inlezen als 1 grote string en dan splitten op \n\n.
Ah, inderdaad, ik zie het.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

Ik heb mijn code wat gefatsoeneerd. Ik zat vanmorgen om 6 uur achter m'n pc, en wilde een snelle tijd zetten. Maar goed.. dat levert dus lelijke en ondoordachte code op. Voor mij althans. En snel was ik ook niet. :-(

Nu wat herschikt: Here you go

Als ik de functionele oplossing van anderen bekijk munten die soms uit in eenvoud en compactheid. Ik vind mijn code verbose en ook niet elegant.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 13-06 21:17
Varienaja schreef op vrijdag 4 december 2020 @ 12:04:
Als ik de functionele oplossing van anderen bekijk munten die soms uit in eenvoud en compactheid. Ik vind mijn code verbose en ook niet elegant.
Misschien sowieso een tip om niet alle oplossingen in 1 file te doen. Ik wil niet weten hoe die file er na dag 25 uitziet ;)

Acties:
  • +3 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Varienaja schreef op vrijdag 4 december 2020 @ 12:04:
Als ik de functionele oplossing van anderen bekijk munten die soms uit in eenvoud en compactheid. Ik vind mijn code verbose en ook niet elegant.
Robert Martin had daar in een blog over Clojure een mooie term voor: "Economy of expression". Dit is iets waar functionele programmeertalen en hun API's vaak erg sterk in zijn. Je kunt met heel weinig code een verhaal vertellen zonder dat het obscuur wordt.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 02-07 22:28

Acties:
  • +1 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21
Hydra schreef op vrijdag 4 december 2020 @ 11:25:
Dag 4 in Kotlin

Niet echt een puzzel, is 'gewoon' requirements implementeren. Denk dat het vooral een opwarmertje is voor het parsen / matchen van data. Niet de leukste om te bouwen. Ik vind de 'read' functie 'meh', ff nadenken of ik daar een meer functional manier kan gebruiken.
Mooie code. Het lijkt erg op die van mij maar van jou is stuk netter weer en leesbaarder. Leerzaam!

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • jelknab
  • Registratie: Oktober 2010
  • Laatst online: 11:01
Dag 4 was gewoon hard werken inderdaad, mijn oplossing is vandaag bijna meer regex dan normale code.

Dag4 (C#): https://github.com/jelkna...0Code%202020/Day4/Day4.cs

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

MrHaas schreef op vrijdag 4 december 2020 @ 12:17:
Ik wil niet weten hoe die file er na dag 25 uitziet ;)
Gewoon langer.

Zolang de individuele methods niet onoverzichtelijk worden geen probleem, vind ik.

Maar misschien wordt de grootte inderdaad een keer te gek. Dan kan ik altijd nog uitsplitsen over één klasse per dag. Ik leef de 'premature optimization is the root of all evil' regel ;-)

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-06 07:30
Erg grappig al die verschillende oplossingen.

Vandaag was een beetje een lastige ten opzichte van de voorgaande dagen. Zelf een tijdje vast gezeten met String compare in Java (hoezo == werkt niet :P). Moet echt meer in Java gaan doen.

Vind de oplossingen van @Varienaja wel mooier dan die van mij. Ik maak gewoon een lange lijst met if-statements en dat is natuurlijk niet echt OOP.

Acties:
  • +1 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 04-07 12:45

DataGhost

iPL dev

Belindo schreef op vrijdag 4 december 2020 @ 09:41:
Link: dag 4 in PHP

Dag 4 Part 1 eerst in Excel gedaan, maar toch ook maar even in PHP.

Alle feedback is welkom, want ik ben een complete junior in het effectief schrijven van PHP. Het is voor mij meer een hobby dan dat ik er iets voor het werk mee doe.

Beide oplossingen waren juist, maar de code duurt erg lang om te draaien.
Mwoah :+ Probeer deze eens:
code:
1
iyr:2010 hgt:15cm8 hcl:b6652a# ecl:blu byr:1944 eyr:2021 pid:093l54719

Drie fouten maar jouw code vindt 'm goed. De testdata is de eerste paar dagen nog niet zo heel kritisch, ik verwacht dat je hier volgende week niet meer mee wegkomt.

code:
1
if ($string >= 59 && $string <= 76) {

Vind ik persoonlijk erg lelijk :+ Over een tijdje ga je jezelf ook uitschelden dat je zulke namen gebruikt dus ik zou hier iets zorgvuldiger mee gaan doen :p

Ook geeft je code erg veel notices. Zet deze aan (als je dat nog niet aan hebt staan, error_reporting(E_ALL) bovenaan je script) en zorg dat je die nooit te zien krijgt. Meestal wijst dat op een programmeerfout en PHP is enorm vergevingsgezind. In dit geval is het inderdaad een programmeerfout, vier zelfs. In een andere taal was je script keihard gecrasht. In PHP kan het zomaar betekenen dat er iets wordt uitgerekend wat helemaal niet kan, waardoor je antwoord fout wordt. Dat is ook iets wat je in de toekomst flink tegen kan gaan werken als je met grotere opdrachten bezig bent.

Je goto-oplossing kan, ik ben zelf niet tegen gebruik van goto, maar dan pas als je weet waar je het precies voor nodig hebt en in die heel specifieke gevallen correct toepast. Dit is m.i. niet zo'n geval. Het valideren van een paspoort is prima iets wat je in een functie zou kunnen zetten, met een serie if(iets) return false; if(ietsanders) return false; return true; die effectief hetzelfde doet als je goto, maar veel duidelijker/leesbaarder is en waar je geen gekke side-effects krijgt als je onder je end-label toch nog wat code neerzet.

Acties:
  • +2 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21
Dricus schreef op vrijdag 4 december 2020 @ 12:17:
[...]

Robert Martin had daar in een blog over Clojure een mooie term voor: "Economy of expression". Dit is iets waar functionele programmeertalen en hun API's vaak erg sterk in zijn. Je kunt met heel weinig code een verhaal vertellen zonder dat het obscuur wordt.
En daar vind ik Kotlin (en Scala ook trouwens, als je de Scala-zeloten die hun eigen DSL verzinnen niet meetelt) in uitblinken in de non-FP wereld. Kotlin kan trouwens wel FP, maar niet zo puur als een Clojure of een F#.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
armageddon_2k1 schreef op vrijdag 4 december 2020 @ 12:41:
Mooie code. Het lijkt erg op die van mij maar van jou is stuk netter weer en leesbaarder. Leerzaam!
Mag ik zien?

https://niels.nu


Acties:
  • +1 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 04-07 12:45

DataGhost

iPL dev

FYI er is een subtiel verschil tussen class en instance attributes. De attributen die je buiten de constructor in de klasse definieert horen niet bij de instance. Ze bestaan ook uberhaupt niet in de instance als attributen tot je er iets aan toewijst, wat je in de constructor lijkt te doen. Voor immutables (zoals None), die je alleen maar met assignments "wijzigt", gaat dat dus prima. Maar bij het wijzigen van mutables doe je geen directe assignment maar een getattr om een magic method aan te roepen, dan wordt er doorgezocht naar class attributes als ze in de instance niet bestaan. Bijvoorbeeld met een map dict (zo heet dat ding in Python, foei ik) gaat dat fout.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class A:
    clvarNone = None
    clvarMap = {}
    
    def __init__(self):
        self.invarNone = None
        self.invarMap = {}
    
    def __str__(self):
        return ", ".join([str(a) for a in [self.clvarNone, self.invarNone, self.clvarMap, self.invarMap]])
    
    def add(self, val):
        self.clvarNone = val
        self.clvarMap[val] = val
        self.invarNone = val
        self.invarMap[val] = val

a = A()
b = A()
print(f"a: {a}")
print(f"b: {b}")

a.add("a")
print(f"a: {a}")
print(f"b: {b}")

b.add("b")
print(f"a: {a}")
print(f"b: {b}")

print(A.clvarNone)
print(A.clvarMap)

Output:
code:
1
2
3
4
5
6
7
8
a: None, None, {}, {}
b: None, None, {}, {}
a: a, a, {'a': 'a'}, {'a': 'a'}
b: None, None, {'a': 'a'}, {}
a: a, a, {'a': 'a', 'b': 'b'}, {'a': 'a'}
b: b, b, {'a': 'a', 'b': 'b'}, {'b': 'b'}
None
{'a': 'a', 'b': 'b'}

In 99% van de gevallen verwacht je niet dat b in a te zien is en andersom. Daarom is het het beste jezelf aan te leren alle members in de __init__ te maken met self.var = val, in plaats van var = val daarbuiten.
Maar valid_ecl kan dan opzich wel prima een class attribute zijn :p

[ Voor 11% gewijzigd door DataGhost op 04-12-2020 13:50 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Dricus schreef op vrijdag 4 december 2020 @ 12:17:
[...]

Robert Martin had daar in een blog over Clojure een mooie term voor: "Economy of expression". Dit is iets waar functionele programmeertalen en hun API's vaak erg sterk in zijn. Je kunt met heel weinig code een verhaal vertellen zonder dat het obscuur wordt.
Ik word ook gek van Java conservatieven die alles na Java 7 'slecht leesbaar' vinden. Met die types moet je al helemaal niet met Scala of Kotlin aankomen.

Verder helemaal mee eens. Natuurlijk kan ik zelf Kotlin 'goed' lezen omdat ik het nu toch al dik 2.5 jaar dag in dag uit gebruik, maar ik vind het wel opvallend dat veel imperatieve oplossingen gewoon 4 keer zoveel code nodig hebben, maar daar niet bepaald leesbaarder van worden.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Varienaja schreef op vrijdag 4 december 2020 @ 12:51:
Ik leef de 'premature optimization is the root of all evil' regel ;-)
Die je dan wel volkomen verkeerd interpreteert overigens, zoals veel developers. De hele quote is:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%

Hij heeft het specifiek over echt kleine winsten waarvan je niet weet of je ze nodig gaat hebben. Je code netjes leesbaar maken valt daar dus niet onder, je weet al lang dat je dat nodig gaat hebben.

Developers die die quote misbruiken is een beetje een pet-peeve, sorry :P

https://niels.nu


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Hydra schreef op vrijdag 4 december 2020 @ 13:32:
Ik word ook gek van Java conservatieven die alles na Java 7 'slecht leesbaar' vinden. Met die types moet je al helemaal niet met Scala of Kotlin aankomen.
Eens. Nu vind ik het irritante van Robert Martin vooral zijn stelling van "er is niets nieuws onder de zon in programmeertalen". Strikt genomen heeft hij misschien wel gelijk, maar daar doet hij alle QoL changes die we de laatste jaren zien wel een beetje tekort mee, vind ik.
Verder helemaal mee eens. Natuurlijk kan ik zelf Kotlin 'goed' lezen omdat ik het nu toch al dik 2.5 jaar dag in dag uit gebruik, maar ik vind het wel opvallend dat veel imperatieve oplossingen gewoon 4 keer zoveel code nodig hebben, maar daar niet bepaald leesbaarder van worden.
Inderdaad. Ik ben echt super blij dat ideeën uit FP nu veelvuldig in imperatieve talen worden overgenomen, met name de higher order functions (ala map, reduce, filter, et). Dat neem zo ongelooflijk veel ruis weg.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Dricus schreef op vrijdag 4 december 2020 @ 13:51:
Eens. Nu vind ik het irritante van Robert Martin vooral zijn stelling van "er is niets nieuws onder de zon in programmeertalen". Strikt genomen heeft hij misschien wel gelijk, maar daar doet hij alle QoL changes die we de laatste jaren zien wel een beetje tekort mee, vind ik.
Uncle Bob is Clojure fan en alles is slechter dan Clojure. Je haalt veel nuttige info uit z'n praatjesen boeken, en hij is een erg goeie spreker, maar je moet wat 'ie zegt vaak met een grote korrel zout nemen. In z'n praatjes is hij vaak ook veel genuanceerder dan in z'n boeken.
Inderdaad. Ik ben echt super blij dat ideeën uit FP nu veelvuldig in imperatieve talen worden overgenomen, met name de higher order functions (ala map, reduce, filter, et). Dat neem zo ongelooflijk veel ruis weg.
Yup! Als we nu nog even Java de nek omdraaien en gewoon Kotlin gaan gebruiken komt alles goed :)

https://niels.nu


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Je doet in grote lijnen hetzeflde en de code waarmee ik m'n antwoorden gekregen heb leek ook meer op wat je nu hebt. Grote verschil is dus de aanpassing in m'n read functie (oud versus nieuw) en dat ik lambda's gebruik voor de checks en dus die keys en de logica op 1 plek heb zitten.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • ThoNohT
  • Registratie: September 2006
  • Laatst online: 01-07 14:30
En nu realiseer ik me ineens dat ik Passport Password heb genoemd 8)7 De code wordt er niet minder correct door, maar toch maar even fixen :+

[ Voor 28% gewijzigd door ThoNohT op 04-12-2020 14:05 ]


Acties:
  • 0 Henk 'm!

  • jelknab
  • Registratie: Oktober 2010
  • Laatst online: 11:01
Kan zijn dat kotlin regex anders is, maar zou deze code niet een aantal dingen verkeerd kunnen doen in validatie?

bijv hcl zou meer dan 6 cijfers accepteren? #123abc22 bijv
of iets voor de # zoals 12#000000

dit geld ook voor een aantal andere checks.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21
jelknab schreef op vrijdag 4 december 2020 @ 14:05:
[...]


Kan zijn dat kotlin regex anders is, maar zou deze code niet een aantal dingen verkeerd kunnen doen in validatie?

bijv hcl zou meer dan 6 cijfers accepteren? #123abc22 bijv
of iets voor de # zoals 12#000000

dit geld ook voor een aantal andere checks.
Daar heb je wel een punt. We gaan erachter komen ;)

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
jelknab schreef op vrijdag 4 december 2020 @ 14:05:
Kan zijn dat kotlin regex anders is, maar zou deze code niet een aantal dingen verkeerd kunnen doen in validatie?
Nope:

code:
1
2
"#[0-9a-f]{6}".toRegex().matches("#c0946ff")
false


.matches moet de hele string matchen, '.find' is zoeken.

[ Voor 8% gewijzigd door Hydra op 04-12-2020 14:12 ]

https://niels.nu


Acties:
  • +2 Henk 'm!

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

ElkeBxl

Tassendraagster

Dag 4 in TypeScript gedaan met lelijke regexes. Gewoon omdat ik wou zien hoe lang ik het zou volhouden voor ik mijn laptop door het raam zou smijten.

Nothing went airborne today

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


Acties:
  • +3 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 15:39

MueR

Admin Tweakers Discord

is niet lief

ElkeBxl schreef op vrijdag 4 december 2020 @ 14:33:
Dag 4 in TypeScript gedaan met lelijke regexes. Gewoon omdat ik wou zien hoe lang ik het zou volhouden voor ik mijn laptop door het raam zou smijten.

Nothing went airborne today
Haha, zoiets heb ik net ook zitten doen voor de lol..

Dit was de mijne..
spoiler:
(?=.*byr:(19[2-9][\d]|200[0-2]))(?=.*iyr:(201[\d]|2020))(?=.*eyr:(202[\d]|2030))(?=.*ecl:(amb|b[lu|rn]|gr[n|y]|hzl|oth))(?=.*hcl:(\#[0-9a-fA-F]{6}))(?=.*pid:([\d]{9}))(?=.*hgt:((1[5-8][\d]|19[0-3])cm|(59|6[\d]|7[0-6])in))

[ Voor 1% gewijzigd door MueR op 05-12-2020 15:12 . Reden: Korter :P ]

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


Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

MueR schreef op vrijdag 4 december 2020 @ 14:44:
Dit was de mijne..
spoiler:
(?=.*(byr):(19[2-9][\d]|200[0-2]))(?=.*(iyr):(201[\d]|2020))(?=.*(eyr):(202[\d]|2030))(?=.*(ecl):(amb|blu|brn|gry|grn|hzl|oth))(?=.*(hcl):(\#[0-9a-fA-F]{6}))(?=.*(pid):([\d]{9}))(?=.*(hgt):((1[5-8][\d]|19[0-3])cm|(59|6[\d]|7[0-6])in))
Jaaaaaa. Alles kan met regexen!! Grandioos! :o

Siditamentis astuentis pactum.


Acties:
  • +1 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 04-07 12:45

DataGhost

iPL dev

MueR schreef op vrijdag 4 december 2020 @ 14:44:
[...]

Haha, zoiets heb ik net ook zitten doen voor de lol..

Dit was de mijne..
spoiler:
gry|grn
spoiler:
gr[yn]

? Of ging je niet voor de kortste :+

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 15:39

MueR

Admin Tweakers Discord

is niet lief

DataGhost schreef op vrijdag 4 december 2020 @ 14:54:
[...]

spoiler:
gr[yn]

? Of ging je niet voor de kortste :+
Hehe, ja die had ik nog kunnen doen..

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


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:09
Varienaja schreef op vrijdag 4 december 2020 @ 12:04:
[...]
Als ik de functionele oplossing van anderen bekijk munten die soms uit in eenvoud en compactheid. Ik vind mijn code verbose en ook niet elegant.
compactheid is overrated. Als ik de compactheid van sommige F# oplossingen hier houd tegen mijn overkill oplossing weet ik niet welke beter leesbaar is: https://github.com/ajeckmans/AOC2020/blob/master/day4.fs

Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Caelorum schreef op vrijdag 4 december 2020 @ 15:46:
compactheid is overrated. Als ik de compactheid van sommige F# oplossingen hier houd tegen mijn overkill oplossing weet ik niet welke beter leesbaar is: https://github.com/ajeckmans/AOC2020/blob/master/day4.fs
Tja. Ik moet in jouw oplossing 100 regels meer code lezen dan in de mijne, terwijl ik het wel leesbaar heb gehouden. Ik had veel meer op 1 regel kunnen pakken puur om regels te besparen, maar mijn doel is vooral 'mooie' code te schrijven (beauty is in the eye of the beholder natuurlijk) die ook leesbaar is. En minder 'gedoe' vind ik vaak beter.

De beste code is die niet geschreven hoeft te worden :)

https://niels.nu


Acties:
  • +2 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Daar ben ik het niet mee eens. Ik vind dat compactheid door veel ontwikkelaars ondergewaardeerd wordt. Er wordt echt enorm veel code geschreven die onnodig verbose is, onnodig complex is en onnodig veel abstractie bevat. Op het moment van schrijven maakt dat niet zo uit, je zit er dan middenin. Echter, als jijzelf of anderen er later mee aan de slag moeten, dan is korte, bondige, expressieve code veel gemakkelijker te begrijpen dan oververbose, overgeabstraheerde code.

Het is wel zo, dat code ook té compact kan zijn en daardoor slecht leesbaar, dus je moet er ook weer niet in doorschieten. Het zoeken naar de juiste balans is IMHO één van de dingen die software ontwikkeling zo'n mooi vak maken.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:09
Hydra schreef op vrijdag 4 december 2020 @ 16:19:
[...]
Tja. Ik moet in jouw oplossing 100 regels meer code lezen [...]
Ik vind jouw oplossing ook zeker mooi en beter leesbaar, maar niet helemaal te vergelijken. Ik heb nogal wat zaken erbij gezet die absoluut overbodig zijn om tot de oplossing te komen, maar mooie vingeroefening is :)

Ik bedoel alleen dat je wel super compacte code kan schrijven met oneliners, maar dat het er niet meteen beter leesbaar van wordt.

Leesbaar is leesbaar. Compact is leuk als je beperkte storage hebt :P

Acties:
  • +2 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Kan Dag 4 ook zo doen:

code:
1
2
3
4
5
6
7
8
object Day04s : Day {
    private val fields = mapOf("byr" to { f: String ->  f.toInt() in 1920 .. 2002}, "iyr" to { f: String ->  f.toInt() in 2010 .. 2020}, "eyr" to { f: String ->  f.toInt() in 2020 .. 2030}, "hgt" to ::heightValid, "hcl" to { f: String ->  "#[0-9a-f]{6}".toRegex().matches(f) }, "ecl" to { f: String ->  "amb|blu|brn|gry|grn|hzl|oth".toRegex().matches(f) }, "pid" to { f: String ->  "[0-9]{9}".toRegex().matches(f) })
    private val passports = read().filter { pass -> fields.keys.all { pass.containsKey(it) } }
    private fun read() : List<Map<String, String>> = resourceString(2020, 4).split("\n\n").map { pass -> pass.split("[ \\n]".toRegex()).filterNot(String::isBlank).map { kv -> kv.split(":").let { (k, v) -> k to v } }.toMap() }
    private fun heightValid(hgt: String) : Boolean = "([0-9]+)(in|cm)".toRegex().matchEntire(hgt)?.groupValues?.let { (_, a, u) -> if(u == "in") { a.toInt() in 59..76 } else { a.toInt() in 150..193 } } ?: false
    override fun part1(): Int = passports.size
    override fun part2(): Int = passports.count { pass -> fields.all { (k, f) -> f(pass.getValue(k)) } }
}


:P

https://niels.nu


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 03-07 13:29
Caelorum schreef op vrijdag 4 december 2020 @ 16:25:
Ik vind jouw oplossing ook zeker mooi en beter leesbaar, maar niet helemaal te vergelijken. Ik heb nogal wat zaken erbij gezet die absoluut overbodig zijn om tot de oplossing te komen, maar mooie vingeroefening is :)
Nee dat snap ik hoor, het is geen kritiek op jouw code. Ik snap waarom je het doet. Alleen zie ik juist als Java dev wel vaak dit soort code in productie; compleet overengineered waarbij je eerst een half uur zit te kijken voordat je erachter bent dat je beter 70% kan wegsnoeien.
Ik bedoel alleen dat je wel super compacte code kan schrijven met oneliners, maar dat het er niet meteen beter leesbaar van wordt.
Het gaat niet om compact en onliners perse. Maar om minder visuele overhead. Java bijvoorbeeld is een taal waarin veel overhead zit die je niet nodig hebt. Meer code betekent vaak minder duidelijk. Dus minder code is dan vaak goed. Maar je kunt natuurlijk doorslaan (zoals in m'n voorbeeld) en gaan code-golven. Dat zie je veel in Scala code; die is vaak onleesbaar omdat de leesbaarheid ongeschikt geacht werd.

Ik probeer dus ook met AoC wel idiomatisch Kotlin te schrijven en hou me ook aan m'n eigen formatter settings.

https://niels.nu


Acties:
  • +3 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21
Compactheid != economy of expression

Zo is XML helemaal niet compact. Maar zijn er gevallen te bedenken waarin XML vele malen leesbaarder is voor een mens (want dat komt wel voor dat een mens het moet lezen) dan JSON.
En vice versa, afhankelijk van de implementatie.

Daarnaast heb je XML configuratie-files die in een IDE prima op te bouwen zijn met auto-complete, maar een vergelijkbaar JSON document een nachtmerrie zijn. En ook hier weer vice versa.

Economy of expression is voor mij:
- Is het zonder al teveel moeite mogelijk het op te schrijven met weinig overhead (intrinsiek of geassisteerd middels autocomplete) en bereik ik mijn doel?
- Is het zonder al teveel moeite te lezen of te begrijpen en is er weinig visuele overhead?

XML wordt vaak op gekakt, maar in VSCode klap je nodes zo in of type je live XPath expressies. Prima. Dan heeft het voor mij weer meer waarde.

Kotlin is kwa programmeertaal effectief. Middels IntelliJ krijg ik sublieme type-hinting en de code blijft clean.

[ Voor 93% gewijzigd door armageddon_2k1 op 04-12-2020 17:21 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • +2 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

Die deur staat echt wagenwijd open ;). Leesbaarheid is er in gradaties. Verbose code kan nog steeds best wel goed leesbaar zijn. Dat wil niet zeggen dat het niet leesbaarder kan door de code minder verbose en daarmee meer to-the-point te maken. En dat kost tijd en moeite, en it's totally worth it!

Ik moet hierbij altijd denken aan deze quote van Blaise Pascal:
Ik schrijf je een lange brief, want ik heb geen tijd voor een korte.
Paradoxaal genoeg is het moeilijker en tijdrovender om makkelijk leesbare code te schrijven dan om moeilijk leesbare code te schrijven.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 04-07 19:43
Voor dag 4 heb ik javascript weer omgeruild voor C#. Voor mij zit de lol hem in het zo veel mogelijk functioneel en kort te doen. Dat is niet per se altijd beter leesbaar, maar in veel gevallen wat mij betreft wel. Verbosity vind ik zelf altijd enorm bijdragen aan de complexiteit van zaken.

Zie hier dag 4.1 en dag 4.2 in C#.

Een combinatie van Linq met top level statements in C# 9 maakt het dan toch best wel lekker kort. Voor dag 2 had ik geen zin om een losse class te maken en anonymous objects kunnen alleen properties hebben, dus dan maar zo.

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • jelknab
  • Registratie: Oktober 2010
  • Laatst online: 11:01
Down schreef op vrijdag 4 december 2020 @ 17:39:
Een combinatie van Linq met top level statements in C# 9 maakt het dan toch best wel lekker kort. Voor dag 2 had ik geen zin om een losse class te maken en anonymous objects kunnen alleen properties hebben, dus dan maar zo.
Ik ga persoonlijk alleen wel wat minder goed op 1 letter variabelen die niet echt beschrijven wat voor data ze houden, zoals: p, r, q en s in jouw geval.

Wel een gevalletje persoonlijke voorkeur, kan voor de rest de linq uitwerking wel waarderen :)

Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 04-07 19:43
jelknab schreef op vrijdag 4 december 2020 @ 17:48:
[...]


Ik ga persoonlijk alleen wel wat minder goed op 1 letter variabelen die niet echt beschrijven wat voor data ze houden, zoals: p, r, q en s in jouw geval.

Wel een gevalletje persoonlijke voorkeur, kan voor de rest de linq uitwerking wel waarderen :)
Daar heb je zeker een punt. Die moet ik eigenlijk nog renamen, maar is een kwestie van luiheid en het feit dat dit de enige plek is waar ik er echt mee weg kom. :+

edit: variabelen hernoemd :)

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 13:29
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4

Acties:
  • 0 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 15:49

P_Tingen

omdat het KAN

ProAce schreef op vrijdag 4 december 2020 @ 18:20:
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4
Je checkt de pid alleen op lengte, niet of het een nummer is. Weet niet of dat het probleem is, maar dat zie ik zo.

[ Voor 26% gewijzigd door P_Tingen op 04-12-2020 18:31 ]

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


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 13:29
P_Tingen schreef op vrijdag 4 december 2020 @ 18:23:
[...]

Je checkt de pid alleen op lengte, niet of het een nummer is. Weet niet of dat het probleem is, maar dat zie ik zo
Gezien de voorbeelden ging ik er inderdaad vanuit dat het in ieder geval altijd een nummer zou zijn. Mijn input bevat inderdaad ook combinaties, nu ik dit afgevangen heb is de uitkomst echter nog steeds hetzelfde.

Acties:
  • 0 Henk 'm!

  • P_Tingen
  • Registratie: Maart 2005
  • Laatst online: 15:49

P_Tingen

omdat het KAN

En is dit een conversie naar een 32bit integer?
temp, err := strconv.Atoi(input)
Wat gebeurt er als daar een te groot getal in komt?

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


Acties:
  • 0 Henk 'm!

  • Wesley
  • Registratie: Januari 2007
  • Laatst online: 03-07 22:11
ProAce schreef op vrijdag 4 december 2020 @ 18:29:
[...]


Gezien de voorbeelden ging ik er inderdaad vanuit dat het in ieder geval altijd een nummer zou zijn. Mijn input bevat inderdaad ook combinaties, nu ik dit afgevangen heb is de uitkomst echter nog steeds hetzelfde.
Check je bij je regex's of de string ook enkel bestaat uit dat patroon of of dat patroon ergens in de string zit?

Acties:
  • 0 Henk 'm!

  • Reynouts
  • Registratie: Maart 2014
  • Niet online
ProAce schreef op vrijdag 4 december 2020 @ 18:20:
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4
Ik heb geen ervaring in Go, maar ik begrijp je code wel. Het is lastig om je bug te vinden. Regex zien er OK uit, misschien daar nog start / end aangeven, maar dat is het volgens mij niet. Heb in mijn puzzle input gekeken, en daar zie ik geen hcl met meer character staan dan aangegeven, maar dat zegt natuurlijk niet alles. Even voor de zekerheid een $ of \b achterzetten.

Zou het in het converteren van string naar int mis kunnen gaan in checkdigit? Ik had hier ook iets vreemds mee en m'n fix was geloof ik extra nog een lengte check doen van de string.

[ Voor 11% gewijzigd door Reynouts op 04-12-2020 19:45 ]


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 15:56
Dag 4 ook weer afgerond. https://github.com/Werner...blob/main/src/04/index.ts

//edit
@ProAce Ik gok dat je fout in de checkDigits functie zit.

code:
1
if (temp < min) || (temp > max)


Je min en max waardes zijn ook geldig dus ik denk dat je meer success hebt als je hier <= en >= doet. :P

//edit2
wacht nevermind, jij checkt precies andersom. Ik check of de waarde groter of gelijk is dan min, jij of het kleiner is. Iets te snel door de code gescanned.

[ Voor 88% gewijzigd door WernerL op 04-12-2020 19:10 ]

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


Acties:
  • 0 Henk 'm!

  • Daanoz
  • Registratie: Oktober 2007
  • Laatst online: 28-06 11:52
ProAce schreef op vrijdag 4 december 2020 @ 18:20:
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4
Vandaag al een keer eerder voorbij gekomen volgens mij, weet je zeker dat de haar kleur regex niet ook kleuren met 7 characters goedkeurd?

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-06 07:30
ProAce schreef op vrijdag 4 december 2020 @ 18:20:
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4
Ik heb werkelijk geen kennis van Go, maar gelukkig leest het ongeveer zoals Java.
spoiler:
Regel 78 doe je '(len(input) - (invalidPasswordsP1 + invalidPasswordsP2))', dit moet alleen P2 zijn.
Regel 38/39 moet je 'validity = false' toevoegen.
https://repl.it/@Postman/GoTest

Hoop dat het duidelijk is wat ik bedoel ;)

Acties:
  • 0 Henk 'm!

  • ydderf
  • Registratie: December 2017
  • Laatst online: 04-07 21:22
Vandaag is uitgebreidere opdracht dan de vorige dagen. Maar gelukkig weer gelukt in c#.

Omdat de term regex hier vaak voorbij komt, maar ik deze nog nooit echt gebruikt hebt, vandaag geprobeerd om deze toe te passen. Voor deel 1 kreeg ik het wel voor elkaar, maar volgens mij gaat deze fout wanneer er een required field dubbel in zit en er totaal wel 7 required fields in een passport zitten.
spoiler:
string pattern = @"\bbyr:|iyr:|eyr:|hgt:|hcl:|ecl:|pid";


Voor deel twee bij de PID en HC1 denk ik wel een zinvolle regex toegepast.
spoiler:
string patternHC1 = @"^#[0-f]{6}";
string patternPID = @"^[0-9]{9}$";

Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 13:29
Thanks voor het meedenken!
P_Tingen schreef op vrijdag 4 december 2020 @ 18:32:
En is dit een conversie naar een 32bit integer?
temp, err := strconv.Atoi(input)
Wat gebeurt er als daar een te groot getal in komt?
Op het moment dat de conversie faalt is het blijkbaar geen getal en wordt het passport afgekeurd. Op een 64 bits systeem returned go ook een 64 bits int, dat zou het probleem niet mogen zijn lijkt me. Als ik snel de input scan dan lijken hier ook geen absurd grote waardes in te staan.
Reynouts schreef op vrijdag 4 december 2020 @ 18:49:
[...]

Ik heb geen ervaring in Go, maar ik begrijp je code wel. Het is lastig om je bug te vinden. Regex zien er OK uit, misschien daar nog start / end aangeven, maar dat is het volgens mij niet. Heb in mijn puzzle input gekeken, en daar zie ik geen hcl met meer character staan dan aangegeven, maar dat zegt natuurlijk niet alles. Even voor de zekerheid een $ of \b achterzetten.

Zou het in het converteren van string naar int mis kunnen gaan in checkdigit? Ik had hier ook iets vreemds mee en m'n fix was geloof ik extra nog een lengte check doen van de string.
Mijn ervaring met regex begon vandaag :+ . Heb de begin/eind check toegevoegd maar dit mocht helaas niet baten.
Postman schreef op vrijdag 4 december 2020 @ 19:37:
[...]
spoiler:
Regel 78 doe je '(len(input) - (invalidPasswordsP1 + invalidPasswordsP2))', dit moet alleen P2 zijn.
Regel 38/39 moet je 'validity = false' toevoegen.
https://repl.it/@Postman/GoTest
Hoe ik het opgebouwd had, om alles in een loop te kunnen berekenen, is door een counter bij te houden van de passports die niet valid zijn bij P1 en een counter van de passports die vervolgens niet zouden gelden voor P2. Vandaar de optelling van invalids. De uitkomsten van mijn input zijn voor P1: 237 (valid) en P2: 161 (too low)

Acties:
  • 0 Henk 'm!

  • jammo
  • Registratie: November 2020
  • Laatst online: 03-07 13:51
ProAce schreef op vrijdag 4 december 2020 @ 18:20:
Bij deel 2 van vandaag loop ik vast, alle gegeven voorbeelden kloppen en ook de unit tests komen er keurig doorheen, alleen bij de complete set gaat het ergens fout :/

https://github.com/ProAce...de/tree/master/2020/Day_4
`(^[0-9]{9}$)`
Zit je probleem er niet in dat je begin en eind helemaal voor een achteraan moeten staan?
(Waardoor je pid matched)

Edit: nee dus, volgende keer toch maar eerst gaan slapen zodat mijn Nederlands wat beter is en dan eerst zelf opzoeken wat ik niet zeker weet..
Ik dacht dat ^ alleen helemaal vooraan mocht staan om het begin te matchen.

[ Voor 18% gewijzigd door jammo op 05-12-2020 08:55 ]


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-06 07:30
@ProAce nogmaals lees mijn hint en kijk anders even op de Repl.it. Deze werkt voor mij goed, zou niet anders verwachten dat die voor jou ook werkt.
spoiler:
Ik snap wat je geprobeerd hebt te doen, maar het optellen van foute wachtwoorden is eigenlijk een ingewikkelde manier van denken. Dat zie je dus ook bij het tweede deel want daar ga je dan teveel wachtwoorden van het totaal aftrekken, met een te laag getal als gevolg.

Acties:
  • 0 Henk 'm!

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

Varienaja

Wie dit leest is gek.

spoiler:
Was ik bijna binary-search aan het implementeren zeg. :o helemaal niet nodig!

Niet moeilijk, niet veel code, toch 20 minuten bezig geweest..

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • GeertenVink
  • Registratie: November 2012
  • Laatst online: 03-12-2023
Urgllll
spoiler:
Ik had part1 snel af, maar returnde de som ipv de max, en was toen heeeel lang aan het debuggen om uit te vinden waar dan het probleem zat met de rijen/kolommen.. want som en max zijn hetzelfde voor 1 item, en de tests voor de samples gaven allemaal het goede antwoord.

Acties:
  • +3 Henk 'm!

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

Varienaja

Wie dit leest is gek.

De strategie om gewoon blind het maximaal mogelijke 127*8+7 als oplossing in te geven zonder ook maar iets te programmeren is helaas mislukt. >:)

[ Voor 8% gewijzigd door Varienaja op 05-12-2020 06:41 ]

Siditamentis astuentis pactum.


Acties:
  • +1 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 07:12

Dricus

ils sont fous, ces tweakers

En dat was dag 5

Leuke opdracht, ik had hem niet direct door (het is nog vroeg..).

spoiler:
Het duurde even voor ik doorhad dat het gewoon om het parsen van een binair getal gaat, daarna was het simpel.

@Varienaja Slim! Ik wist niet dat je met Integer.parseInt ook een binair getal kunt parsen. Daarmee had mijn code nog een paar regels korter gekund :D.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 13:29
Postman schreef op zaterdag 5 december 2020 @ 00:14:
@ProAce nogmaals lees mijn hint en kijk anders even op de Repl.it. Deze werkt voor mij goed, zou niet anders verwachten dat die voor jou ook werkt.
spoiler:
Ik snap wat je geprobeerd hebt te doen, maar het optellen van foute wachtwoorden is eigenlijk een ingewikkelde manier van denken. Dat zie je dus ook bij het tweede deel want daar ga je dan teveel wachtwoorden van het totaal aftrekken, met een te laag getal als gevolg.
Thanks! Dat was inderdaad de fout. Ik dacht alleen dat de repl.it ook met mijn input runde en daarmee niet klopte :+ Beter lezen is toch wel key hier.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 25-04 18:21
Deze was leuk. Alleen als ik de spoiler tags hierboven lees kom ik erachter dat ik iets te verbose bezig ben geweest. Nouja, noemen we het gewoon Domain Driven Design.

EDIT: Kon het niet laten, heb hem toch maar aangepast.
Diff: https://github.com/rj-cod...f372c972f6df7bcd697262131
Nieuw: https://github.com/rj-cod.../rjcoding/aoc2020/Day5.kt

spoiler:
Had natuurlijk wel een belletje moeten gaan rinkelen dat het gewoon een binair getal was....

[ Voor 54% gewijzigd door armageddon_2k1 op 05-12-2020 09:04 ]

Engineering is like Tetris. Succes disappears and errors accumulate.

Pagina: 1 ... 3 ... 14 Laatste