Siditamentis astuentis pactum.
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.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
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.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!
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.”
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.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?
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Dat was ook mijn probleem. Bedankt voor de tipWoy 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
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
Niet waar, ik zou nooit Copy/Paste doendcm360 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
“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.”
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?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
[ Voor 8% gewijzigd door Dricus op 04-12-2020 09:05 ]
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
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 inderdaadDricus 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?
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.”
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).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.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Zo scherp als een voetbal!
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 />
Maar het alternatief is wel redelijk wat klopwerk, maar goed, het is weer geluktSome people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems.
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
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.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.
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 klaarBelindo 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.
... en gaat over tot de orde van de dag
Er is blijkbaar een pid met 10+ cijfers waar dit ook op matched
Naast wat @P_Tingen zegt, je zou meer met regex kunnen doen. Bijv de kleurcode kan geheel in 1 regex.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.
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."
Ik heb nu bij elk van de 7 checks eenP_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
1
| else { goto theEnd; } |
Ik ga dus van
1
| Array ( [0] => byr:1937 eyr:2030 pid:154364481 hgt:158cm iyr:2015 ecl:brn hcl:#c0946f cid:155 ) |
naar
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
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
1
| $output_array[$i]['byr'] |
Coding in the cold; <brrrrr />
Mijn oplossing
[ Voor 16% gewijzigd door DRaakje op 04-12-2020 10:29 ]
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.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
Edit: nevermind, ik zag een if over het hoofd. Dan weet ik het zo direct nog niet
[ Voor 7% gewijzigd door ThoNohT op 04-12-2020 10:33 ]
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.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.
Geen ervaring met kotlin, maar zo op het eerste gezicht vergeet je het laatste paspoort toe te voegen aan je lijst?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
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.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?
Damnit! Je hebt gelijk! Opgelost!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?
1 opmerking.. die RegexOptions.Compiled maakt het instantiëren van de Regex een factor (10?) trager;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.
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
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.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?
“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 zie niet waar een regex meerdere malen aangemaakt wordt? Per validator maximaal 1 keernescafe 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
“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.”
En daarmee dus per paspoort 1x.Woy schreef op vrijdag 4 december 2020 @ 11:08:
[...]
Ik zie niet waar een regex meerdere malen aangemaakt wordt? Per validator maximaal 1 keer
"Divine Shields and Hearthstones do not make a hero heroic."
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.
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.”
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
Je kan splitten op 2 newlines achter elkaar en dan de lines uit die blokken flatmappenHydra 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.
Ah fuck; goeie. Ik lees ze nu per regel in ipv als 1 grote string. Ga ik ff mee aan de slag.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.
Edit: Done! Veel beter
[ Voor 4% gewijzigd door Hydra op 04-12-2020 11:42 ]
https://niels.nu
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.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
Dit is de hele parser. Gaat nog wel owned in een hashmap omdat mijn day runner implementatie een beetje knullig is...
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) } |
Het kan ook zonder flatmap met een beetje slim voorbewerken van de input: https://github.com/Dricus...tofcode/year2020/Day04.ktHydra 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.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
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.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
https://niels.nu
Ah, inderdaad, ik zie het.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.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
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.
Misschien sowieso een tip om niet alle oplossingen in 1 file te doen. Ik wil niet weten hoe die file er na dag 25 uitzietVarienaja 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.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.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Mooie code. Het lijkt erg op die van mij maar van jou is stuk netter weer en leesbaarder. Leerzaam!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.
Engineering is like Tetris. Succes disappears and errors accumulate.
Dag4 (C#): https://github.com/jelkna...0Code%202020/Day4/Day4.cs
Gewoon langer.MrHaas schreef op vrijdag 4 december 2020 @ 12:17:
Ik wil niet weten hoe die file er na dag 25 uitziet
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.
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
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.
MwoahBelindo 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.
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.
1
| if ($string >= 59 && $string <= 76) { |
Vind ik persoonlijk erg lelijk
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.
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#.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.
Engineering is like Tetris. Succes disappears and errors accumulate.
Mag ik zien?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!
https://niels.nu
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.
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:
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
[ Voor 11% gewijzigd door DataGhost op 04-12-2020 13:50 ]
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.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.
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
Die je dan wel volkomen verkeerd interpreteert overigens, zoals veel developers. De hele quote is:Varienaja schreef op vrijdag 4 december 2020 @ 12:51:
Ik leef de 'premature optimization is the root of all evil' regel ;-)
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
https://niels.nu
Engineering is like Tetris. Succes disappears and errors accumulate.
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.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.
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.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.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
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.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.
Yup! Als we nu nog even Java de nek omdraaien en gewoon Kotlin gaan gebruiken komt alles goedInderdaad. 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.
https://niels.nu
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
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 komenjelknab 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.
Engineering is like Tetris. Succes disappears and errors accumulate.
Nope: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?
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
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
Haha, zoiets heb ik net ook zitten doen voor de lol..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
Dit was de mijne..
[ 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.
Jaaaaaa. Alles kan met regexen!! Grandioos!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))
Siditamentis astuentis pactum.
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
? Of ging je niet voor de kortste
Hehe, ja die had ik nog kunnen doen..DataGhost schreef op vrijdag 4 december 2020 @ 14:54:
[...]
spoiler:gr[yn]
? Of ging je niet voor de kortste
Anyone who gets in between me and my morning coffee should be insecure.
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.fsVarienaja 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.
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.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
De beste code is die niet geschreven hoeft te worden
https://niels.nu
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.Caelorum schreef op vrijdag 4 december 2020 @ 15:46:
compactheid is overrated.
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...
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 isHydra schreef op vrijdag 4 december 2020 @ 16:19:
[...]
Tja. Ik moet in jouw oplossing 100 regels meer code lezen [...]
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
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)) } }
} |
https://niels.nu
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.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
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 bedoel alleen dat je wel super compacte code kan schrijven met oneliners, maar dat het er niet meteen beter leesbaar van wordt.
Ik probeer dus ook met AoC wel idiomatisch Kotlin te schrijven en hou me ook aan m'n eigen formatter settings.
https://niels.nu
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.
Die deur staat echt wagenwijd openCaelorum schreef op vrijdag 4 december 2020 @ 16:25:
Leesbaar is leesbaar.
Ik moet hierbij altijd denken aan deze quote van Blaise Pascal:
Paradoxaal genoeg is het moeilijker en tijdrovender om makkelijk leesbare code te schrijven dan om moeilijk leesbare code te schrijven.Ik schrijf je een lange brief, want ik heb geen tijd voor een korte.
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
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?
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.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.
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.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
edit: variabelen hernoemd
Mother north, how can they sleep while their beds are burning?
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.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
[ Voor 26% gewijzigd door P_Tingen op 04-12-2020 18:31 ]
... en gaat over tot de orde van de dag
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.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
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
Check je bij je regex's of de string ook enkel bestaat uit dat patroon of of dat patroon ergens in de string zit?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.
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.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
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 ]
//edit
@ProAce Ik gok dat je fout in de checkDigits functie zit.
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.
//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.
Vandaag al een keer eerder voorbij gekomen volgens mij, weet je zeker dat de haar kleur regex niet ook kleuren met 7 characters goedkeurd?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.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
Regel 38/39 moet je 'validity = false' toevoegen.
https://repl.it/@Postman/GoTest
Hoop dat het duidelijk is wat ik bedoel
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.
Voor deel twee bij de PID en HC1 denk ik wel een zinvolle regex toegepast.
string patternPID = @"^[0-9]{9}$";
Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat
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.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?
Mijn ervaring met regex begon vandaagReynouts 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.
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)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
`(^[0-9]{9}$)`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
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 ]
Niet moeilijk, niet veel code, toch 20 minuten bezig geweest..
Siditamentis astuentis pactum.
[ Voor 8% gewijzigd door Varienaja op 05-12-2020 06:41 ]
Siditamentis astuentis pactum.
Leuke opdracht, ik had hem niet direct door (het is nog vroeg..).
@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
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
Thanks! Dat was inderdaad de fout. Ik dacht alleen dat de repl.it ook met mijn input runde en daarmee niet kloptePostman 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.
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
[ Voor 54% gewijzigd door armageddon_2k1 op 05-12-2020 09:04 ]
Engineering is like Tetris. Succes disappears and errors accumulate.