[alg] Slechtste programmeervoorbeelden deel 5 Vorige deel Overzicht

Pagina: 1 ... 19 20 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:02

Dido

heforshe

Guillome schreef op woensdag 18 januari 2023 @ 02:02:
Toch vind ik het een vreemde keuze als je een double als parameter hebt (ongeacht dat het private is), je 10 waardes checkt, en in álle andere gevallen een 100% status terug geeft.
Welke 10 waardes worden er volgens jou gechecked dan?
Alle voorbeelden (en het orgineel) lijken me toch echt ranges van waardes te checken?

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 15:49

heuveltje

KoelkastFilosoof

Dido schreef op woensdag 18 januari 2023 @ 10:39:
[...]

Welke 10 waardes worden er volgens jou gechecked dan?
Alle voorbeelden (en het orgineel) lijken me toch echt ranges van waardes te checken?
de waarde tussen 0 en 1

Als jij als variable -5 of 69 invoert krijg je dus gewoon 100% terug

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:02

Dido

heforshe

Dat zijn er, in het geval van een double, heeeeeel veel, niet eentje ;)
Als jij als variable -5 of 69 invoert krijg je dus gewoon 100% terug
Ja, daar ging de hele discussie over de parameternaam dus over. Maar inderdaad, er wordt ook geen sanity check op de meegegeven waarde gedaan. Daar was ook al eerder op gereageerd (alsook op het idee om 69 af te keuren als "geen geldige waarde voor een percentage") dus laten we die disussie niet nog een keer oprakelen ;)

Wat betekent mijn avatar?


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dido schreef op woensdag 18 januari 2023 @ 10:48:
[...]

Dat zijn er, in het geval van een double, heeeeeel veel, niet eentje ;)
1023*252+1 om precies te zijn (als je 0 en 1 meetelt) :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Janoz schreef op dinsdag 17 januari 2023 @ 14:52:
[...]


Ah oke, in dit geval moet ik je dan toch gelijk geven. Ik wist niet dat C# daadwerkelijk ranges in de cases op kon nemen. Ik vraag me trouwens wel af of dit werkt. De eerste case geldt namelijk ook in alle andere gevallen. Oh ik lees verkeerd, maar dan nog zitten er dubbele matches in
https://learn.microsoft.c...erence/operators/patterns

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:42

Janoz

Moderator Devschuur®

!litemod

Ik ben van het kamp waar we de methodenamen met een kleine letter schrijven ;)

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


Acties:
  • +1 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Janoz schreef op woensdag 18 januari 2023 @ 13:24:
[...]


Ik ben van het kamp waar we de methodenamen met een kleine letter schrijven ;)
Daar ben je natuurlijk helemaal vrij in ;)

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 21:22

D4NG3R

kiwi

:)

eheijnen schreef op woensdag 18 januari 2023 @ 13:26:
[...]


Daar ben je natuurlijk helemaal vrij in ;)
Leugens, er is maar 1 correctie manier en dat is mijn manier. >:)

Komt d'r in, dan kö-j d’r oet kieken


Acties:
  • +1 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
D4NG3R schreef op woensdag 18 januari 2023 @ 13:29:
[...]

Leugens, er is maar 1 correctie manier en dat is mijn manier. >:)
Wanneer komt jouw boek uit ?

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Ik moest deze maken om mijn libary in te laden. en anders doet mijn mooie menu het niet...

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
    this.collect.date = new Date().toISOString();
    let agent = navigator.userAgent;
    let needle = 'SamsungBrowser/';
    let position = agent.toLowerCase().indexOf((needle).toLowerCase());
    let url;
    if(position){
        //if browser is SamsungBrowser/19.0  use this.collect.date otherwise Bootstrap will only be available on one subdomain (the init) and not on the (docs).
        url = this.collect.web.bin + 'Bootstrap.json?' + this.version + '.' + this.collect.date;
    } else {
        url = this.collect.web.bin + 'Bootstrap.json?' + this.version;
    }


Hij denkt dat ie gecached is, maar dat is van een ander subdomein / domein, maar mijn menu doet het weer...

nog een klein vraagje, wat vinden jullie, vinden jullie `<script src="...?feature=value" ` een mooie optie om bijvoorbeeld die bootstap url op tegeven of hoe zouden jullie daarvoor een kleine configuratie maken ?

en het ergste is nog dat ik een checkout heb gemaakt van een week terug, want hij werkte toch had ik hierbij heel erg, nu moet ik mijn laatste week weer patchen) lekker...

[ Voor 18% gewijzigd door Anoniem: 80910 op 18-01-2023 22:59 ]


Acties:
  • +1 Henk 'm!

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 24-05 09:38
Kalentum schreef op dinsdag 17 januari 2023 @ 13:06:
Nou dit had vast wel wat korter gekund:
https://github.com/MinBZK...s/NFCService.cs#L182-L206

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
        private static string GetPercentageRounds(double percentage)
        {
            if (percentage == 0)
                return "⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.0 && percentage <= 0.1)
                return "🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.1 && percentage <= 0.2)
                return "🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.2 && percentage <= 0.3)
                return "🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.3 && percentage <= 0.4)
                return "🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.4 && percentage <= 0.5)
                return "🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪";
            if (percentage > 0.5 && percentage <= 0.6)
                return "🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪";
            if (percentage > 0.6 && percentage <= 0.7)
                return "🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪";
            if (percentage > 0.7 && percentage <= 0.8)
                return "🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪";
            if (percentage > 0.8 && percentage <= 0.9)
                return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";

            return "🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵";
        }


Via
[Twitter]
Toen ik dat zag dacht ik meer aan de volgende oplossing:
Afbeeldingslocatie: https://pbs.twimg.com/media/FmrzNDBXgAAYoGa?format=jpg&name=orig

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Nu online
Jogai schreef op woensdag 18 januari 2023 @ 23:23:
[...]

Toen ik dat zag dacht ik meer aan de volgende oplossing:
[Afbeelding]
Dat wordt mooi als iemand daar 100 in gooit in plaats van 1.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jogai schreef op woensdag 18 januari 2023 @ 23:23:
[...]

Toen ik dat zag dacht ik meer aan de volgende oplossing:
[Afbeelding]
Helaas, 🔵 past niet in een char.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

sig69 schreef op woensdag 18 januari 2023 @ 23:45:
[...]

Dat wordt mooi als iemand daar 100 in gooit in plaats van 1.
Dat lijkt me niet echt een probleem om pas op dat punt op te vangen, je moet gewoon zorgen dat je die percentages netjes normaliseert naar een getal van 0 tot 1 voor je bij je weergavelaag komt.

Acties:
  • +1 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Nu online
Dan moet je dus voorwerk gaan doen, terwijl de originele functie een safety heeft ingebouwd: alles > 1 is gewoon 100%. Deze implementatie doet niet wat de originele doet en is dus geen kortere of betere vervanger.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 11:36

Reptile209

- gers -

Anoniem: 80910 schreef op woensdag 18 januari 2023 @ 22:52:
[...]

en het ergste is nog dat ik een checkout heb gemaakt van een week terug, want hij werkte toch had ik hierbij heel erg, nu moet ik mijn laatste week weer patchen) lekker...
Whut? * Reptile209 needs more comments on this. Morgen even herlezen en herschrijven denk ik :+.

Zo scherp als een voetbal!


Acties:
  • +1 Henk 'm!

  • P1nGu1n
  • Registratie: Juni 2011
  • Laatst online: 10:35
Ik kwam deze tegen, je kan het ook oplossen met binary search :+

Afbeeldingslocatie: https://i.redd.it/alibj9rm5vca1.jpg

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.


Acties:
  • +4 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Jogai schreef op woensdag 18 januari 2023 @ 23:23:
[...]

Toen ik dat zag dacht ik meer aan de volgende oplossing:
[Afbeelding]
Überhaupt waarom moet het korter? Dit lijkt mij typisch een functie die niet of nauwelijks aangepast gaat worden. Dan heb ik liever een functie die in een keer helemaal duidelijk is en misschien een beetje verbose is dan een hoogstandje van een oneliner (die ook nog eens niet werkt zoals @.oisyn al opmerkt).

Acties:
  • +3 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

P1nGu1n schreef op donderdag 19 januari 2023 @ 09:17:
Ik kwam deze tegen, je kan het ook oplossen met binary search :+

[Afbeelding]
Mijn god wat een abonimatie.

Afbeeldingslocatie: https://tweakers.net/i/wqVQglkgllnB_8r9t7xenJcCv68=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/lTlUGnj9S8rOIzcIXqI2HXvq.png?f=user_large

:Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +2 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 28-03 16:49
Kalentum schreef op dinsdag 17 januari 2023 @ 13:06:
Nou dit had vast wel wat korter gekund:
https://github.com/MinBZK...s/NFCService.cs#L182-L206

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
        private static string GetPercentageRounds(double percentage)
        {
            if (percentage == 0)
                return "⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.0 && percentage <= 0.1)
                return "🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.1 && percentage <= 0.2)
                return "🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.2 && percentage <= 0.3)
                return "🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.3 && percentage <= 0.4)
                return "🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪";
            if (percentage > 0.4 && percentage <= 0.5)
                return "🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪";
            if (percentage > 0.5 && percentage <= 0.6)
                return "🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪";
            if (percentage > 0.6 && percentage <= 0.7)
                return "🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪";
            if (percentage > 0.7 && percentage <= 0.8)
                return "🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪";
            if (percentage > 0.8 && percentage <= 0.9)
                return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";

            return "🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵";
        }


Via
[Twitter]
Ik had hier letterlijk geen twee keer over nagedacht; dit is prima code wmb. Ik had dit zelf kunnen schrijven en dit was een no-brainer review geweest. Al die meuk met binary searches, clamps, pad's etc, leuk hoor, maar dit is aanzienlijk duidelijker en makkelijker te veranderen.

Acties:
  • +1 Henk 'm!

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 24-05 09:38
Voor iedereen die reageert dat de chatgpt oplossing niet werkt. Dat wist ik al, maar 1. ik poste het met "ik dacht aan iets als", dus niet lettlerijk, 2. ik was te lui om het echt uit te werken 3. ik was te lui om het zelf aan chatgpt te vragen 4. ik vond het wel weer een grappig voorbeeld hoe chatgpt toch de fout in gaat en 5. dit topic is toch om slechte voorbeelden te posten ;)

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


Acties:
  • +3 Henk 'm!

  • HugoSmits
  • Registratie: April 2009
  • Laatst online: 18-08-2023
is “Rounds” in de functienaam “GetPercentageRounds” steenkolen engels voor rondjes? :D

[ Voor 4% gewijzigd door HugoSmits op 19-01-2023 12:36 ]


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Reptile209 schreef op donderdag 19 januari 2023 @ 01:31:
[...]

Whut? * Reptile209 needs more comments on this. Morgen even herlezen en herschrijven denk ik :+.
Ja ik was met cors bezig geweest, en ineens deed de Samsung browser raar. Toen dacht ik, het ligt aan de cors. Met de oude implementatie daarvan wezen stoeien omdat ik soms referer gebruik. Dat bleek soms een file te zijn, waardoor iets in cors fout stond. En toen deed ie het op het eerste domein wel, op het tweede subdomein niet. En toen heb ik dat kunnen omdraaien en gezien die bij de 2e subdomein niet logt dat ie een bestand nodig heeft, bleek het de browser cache te zijn. Echter chrome en Firefox hadden geen last. Dus nu veroorzaak ik een cache miss, op de Samsung browser en nu laadt hij wel.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 11:36

Reptile209

- gers -

Anoniem: 80910 schreef op donderdag 19 januari 2023 @ 12:53:
[...]


Ja ik was met cors bezig geweest, en ineens deed de Samsung browser raar. Toen dacht ik, het ligt aan de cors. Met de oude implementatie daarvan wezen stoeien omdat ik soms referer gebruik. Dat bleek soms een file te zijn, waardoor iets in cors fout stond. En toen deed ie het op het eerste domein wel, op het tweede subdomein niet. En toen heb ik dat kunnen omdraaien en gezien die bij de 2e subdomein niet logt dat ie een bestand nodig heeft, bleek het de browser cache te zijn. Echter chrome en Firefox hadden geen last. Dus nu veroorzaak ik een cache miss, op de Samsung browser en nu laadt hij wel.
Ik bedoelde meer dat er geen touw aan dat paragraafje tekst te knopen was: halve zinnen, beperkte interpunctie... ;)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • HugoSmits
  • Registratie: April 2009
  • Laatst online: 18-08-2023
PrisonerOfPain schreef op donderdag 19 januari 2023 @ 11:50:
[...]


Ik had hier letterlijk geen twee keer over nagedacht; dit is prima code wmb. Ik had dit zelf kunnen schrijven en dit was een no-brainer review geweest. Al die meuk met binary searches, clamps, pad's etc, leuk hoor, maar dit is aanzienlijk duidelijker en makkelijker te veranderen.
makkelijk te veranderen is subjectief, als ze morgen vragen om 20 rondjes in plaats van 10 (voor extra nauwkeurigheid) dan verdubbeld de code. Ik zou dat persoonlijk niet handig of makkelijk willen noemen.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 28-03 16:49
HugoSmits schreef op donderdag 19 januari 2023 @ 13:04:
[...]


makkelijk te veranderen is subjectief, als ze morgen vragen om 20 rondjes in plaats van 10 (voor extra nauwkeurigheid) dan verdubbeld de code. Ik zou dat persoonlijk niet handig of makkelijk willen noemen.
Makkelijk te veranderen: je delete een functie en typt een nieuwe in. Je hoeft niet door een berg types heen om een oplossing voor je nieuwe probleem te bouwen.

Acties:
  • 0 Henk 'm!

  • Zebby
  • Registratie: Maart 2009
  • Laatst online: 24-05 18:07
PrisonerOfPain schreef op donderdag 19 januari 2023 @ 11:50:
[...]


Ik had hier letterlijk geen twee keer over nagedacht; dit is prima code wmb. Ik had dit zelf kunnen schrijven en dit was een no-brainer review geweest. Al die meuk met binary searches, clamps, pad's etc, leuk hoor, maar dit is aanzienlijk duidelijker en makkelijker te veranderen.
Precies. Nu ziet iemand dit en weten ze gelijk hoe of wat. Zo'n oneliner moet ik eerst 10 keer lezen voordat ik hem begrijp en sluipt veel sneller een foutje in. Qua performance is dit ook niet iets waar je wakker om hoeft te liggen.
10/10, top programmeur.

Acties:
  • +1 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
Zebby schreef op donderdag 19 januari 2023 @ 16:32:
[...]


Precies. Nu ziet iemand dit en weten ze gelijk hoe of wat. Zo'n oneliner moet ik eerst 10 keer lezen voordat ik hem begrijp en sluipt veel sneller een foutje in. Qua performance is dit ook niet iets waar je wakker om hoeft te liggen.
10/10, top programmeur.
Blijft omslachtig hoor. Je hoeft niet hele moeilijke algoritmische zaken te doen. Gewoon een functie die totaal aantal balletjes als parameter heeft en de huidige waarde. Aantal gevulde balletjes is floor(percentage * totaal), aantal ongevuld is totaal - aantal gevuld.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • +3 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zebby schreef op donderdag 19 januari 2023 @ 16:32:
Qua performance is dit ook niet iets waar je wakker om hoeft te liggen.
Qua performance wint de huidige implementatie met vlag en wimpel van implementaties die een string bouwen aan de hand van het percentage. Dingen als binary search of een O(1) lookup in een array zijn slechts micro-optimalisaties.
Mugwump schreef op donderdag 19 januari 2023 @ 16:50:
[...]


Blijft omslachtig hoor. Je hoeft niet hele moeilijke algoritmische zaken te doen. Gewoon een functie die totaal aantal balletjes als parameter heeft en de huidige waarde. Aantal gevulde balletjes is floor(percentage * totaal), aantal ongevuld is totaal - aantal gevuld.
Die code zou ik ook niet afwijzen in een review. Maar het slaat nergens op de huidige code als slecht te markeren (behalve dan de naamgeving), en als iemand het op eigen houtje aan gaat zitten passen dan ga ik toch wel even het gesprek aan of dat de meest nuttige manier is om zijn/haar tijd te besteden :). Het altneratief is namelijk niet per se beter en toch introduceert het potentieel nieuwe bugs.

Wat dat betreft spreken de voorgestelde alternatieven boekdelen, ook in die Twitter thread. Ze blijken allemaal meerdere iteraties en input van andere nodig te hebben om correct te zijn.

[ Voor 68% gewijzigd door .oisyn op 19-01-2023 17:05 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
.oisyn schreef op donderdag 19 januari 2023 @ 16:59:
[...]

Qua performance wint de huidige implementatie met vlag en wimpel van implementaties die een string bouwen aan de hand van het percentage. Dingen als binary search of een O(1) lookup in een array zijn slechts micro-optimalisaties.
Voor een functie die misschien een of twee keer tijdens de levensduur van de app gebruikt wordt. Namelijk het scannen van je ID met NFC. Dat doe je niet zo vaak. Als alle mensen die dit slechte code vinden het voor het zeggen hadden was er nu minimaal een dag extra aan deze code besteed, hadden we functioneel niets beters maar wel extra kosten.
Die code zou ik ook niet afwijzen in een review. Maar het slaat nergens op de huidige code als slecht te markeren (behalve dan de naamgeving), en als iemand het op eigen houtje aan gaat zitten passen dan ga ik toch wel even het gesprek aan of dat de meest nuttige manier is om zijn/haar tijd te besteden :). Het altneratief is namelijk niet per se beter en toch introduceert het potentieel nieuwe bugs.

Wat dat betreft spreken de voorgestelde alternatieven boekdelen, ook in die Twitter thread. Ze blijken allemaal meerdere iteraties en input van andere nodig te hebben om correct te zijn.
_/-\o_

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
.oisyn schreef op donderdag 19 januari 2023 @ 16:59:

[...]


Die code zou ik ook niet afwijzen in een review. Maar het slaat nergens op de huidige code als slecht te markeren (behalve dan de naamgeving), en als iemand het op eigen houtje aan gaat zitten passen dan ga ik toch wel even het gesprek aan of dat de meest nuttige manier is om zijn/haar tijd te besteden :). Het altneratief is namelijk niet per se beter en toch introduceert het potentieel nieuwe bugs.

Wat dat betreft spreken de voorgestelde alternatieven boekdelen, ook in die Twitter thread. Ze blijken allemaal meerdere iteraties en input van andere nodig te hebben om correct te zijn.
Je mist eigenlijk ook context, waardoor het in mijn ogen altijd lastig is om te bepalen wat nou eigenlijk de wens is. Kijk als je iets maakt voor een fysiek apparaat met 10 ledjes, dan is dit verder prima. Maar dan zou je het ook qua naamgeving specifiek daarvoor moeten laten zijn. Zo'n vaststaande ifjes structuur is echter wel heel erg rigide. Als je twintig bolletjes wilt ben je flink wat aan het typen (en officieel ook aan het testen, want je creëert heel veel branches), terwijl dat in mijn voorbeeld een kwestie is van 1 variabele aanpassen.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mugwump schreef op donderdag 19 januari 2023 @ 17:08:
Als je twintig bolletjes wilt ben je flink wat aan het typen
Bij 20 bolletjes wordt de if-structuur wat mij betreft ook een beetje onhoudbaar. Maar dat impliceert niet dat je een functie moet maken die alles moet kunnen. Dit typ je een keer in. Misschien verander je het een keer, prima, typ je het nog een keer in. Maar dat is het dan ook wel.
(en officieel ook aan het testen, want je creëert heel veel branches), terwijl dat in mijn voorbeeld een kwestie is van 1 variabele aanpassen.
Ah jouw voorbeeld, waar een fout in staat, omdat jij floor() doet ipv ceil() :Y). En wat als de input NaN is? Of negatief?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
.oisyn schreef op donderdag 19 januari 2023 @ 17:11:
[...]

Bij 20 bolletjes wordt de if-structuur wat mij betreft ook een beetje onhoudbaar. Maar dat impliceert niet dat je een functie moet maken die alles moet kunnen. Dit typ je een keer in. Misschien verander je het een keer, prima, typ je het nog een keer in. Maar dat is het dan ook wel.
Nee, zoals ik zeg, het hangt af van wat je beoogt. Als het doel is om een percentage discreet weer te geven dan is dit in mijn ogen te specifiek geïmplementeerd en niet flexibel.
[...]

Ah jouw voorbeeld, waar een fout in staat, omdat jij floor() doet ipv ceil() :Y). En wat als de input NaN is? Of negatief?
Hoezo? met 10 bolletjes wil je bij 0.85 toch 8 bolletjes? Oftewel de floor van 8.5. ;)
Wat betreft NaN of negatieve input, kom je bij taalspecifieke implementaties en de vraag waar je inputvalidatie.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mugwump schreef op donderdag 19 januari 2023 @ 17:17:
Nee, zoals ik zeg, het hangt af van wat je beoogt. Als het doel is om een percentage discreet weer te geven dan is dit in mijn ogen te specifiek geïmplementeerd en niet flexibel.
We weten dat het aantal bolletjes niet configureerbaar is, want daar is geen parameter voor. Dus het is een beetje raar om dan te gaan zitten theorycraften dat dat wel nodig zou zijn.
Hoezo? met 10 bolletjes wil je bij 0.85 toch 8 bolletjes?
De huidige code geeft 9 bolletjes.
C#:
1
2
            if (percentage > 0.8 && percentage <= 0.9)
                return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";
Wat betreft NaN of negatieve input, kom je bij taalspecifieke implementaties en de vraag waar je inputvalidatie
We weten dat de huidige functie gewoon 10 blauwe bolletjes teruggeeft bij die waarden.

[ Voor 164% gewijzigd door .oisyn op 19-01-2023 17:22 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • HugoSmits
  • Registratie: April 2009
  • Laatst online: 18-08-2023
PrisonerOfPain schreef op donderdag 19 januari 2023 @ 15:48:
[...]


Makkelijk te veranderen: je delete een functie en typt een nieuwe in. Je hoeft niet door een berg types heen om een oplossing voor je nieuwe probleem te bouwen.
Als het sneller of makkelijker is om alles weg te gooien en over nieuw te schrijven dan was het bij voorbaat dus niet makkelijk te veranderen.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
.oisyn schreef op donderdag 19 januari 2023 @ 17:18:
[...]

We weten dat het aantal bolletjes niet configureerbaar is, want daar is geen parameter voor. Dus het is een beetje raar om dan te gaan zitten theorycraften dat dat wel nodig zou zijn.


[...]

De huidige code geeft 9 bolletjes.
C#:
1
2
            if (percentage > 0.8 && percentage <= 0.9)
                return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";
Ah, verkeerd gelezen. ;)
[...]

We weten dat de huidige functie gewoon 10 blauwe bolletjes teruggeeft bij die waarden.
Is dat zo? Ik weet niet welke taal het is, een NaN in een vergelijking gebruiken leidt in sommige talen tot een error.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Daar ga je dus al :P
Is dat zo? Ik weet niet welke taal het is, een NaN in een vergelijking gebruiken leidt in sommige talen tot een error.
Het is C#, die volgt IEEE754 regels (zoals de meeste talen), en een vergelijking met NaN is altijd false.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
Mugwump schreef op donderdag 19 januari 2023 @ 17:17:
[...]


Nee, zoals ik zeg, het hangt af van wat je beoogt. Als het doel is om een percentage discreet weer te geven dan is dit in mijn ogen te specifiek geïmplementeerd en niet flexibel.
Maar nu maak je het probleem abstracter dan het is, wat hier nergens voor nodig is. Voor business logica is dat prima, maar voor UI code maak je daarmee vaak alleen maar meer problemen. In jouw voorbeeld is het leuk dat deze functie 20 bolletjes aankan, maar de kans dat die dan ook in de layout passen is erg klein. En dan heb je iets wat ik eigenlijk erger vind: een abstractie die minder aankan dan die zegt aan te kunnen.

Acties:
  • +1 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 28-03 16:49
HugoSmits schreef op donderdag 19 januari 2023 @ 17:20:
[...]


Als het sneller of makkelijker is om alles weg te gooien en over nieuw te schrijven dan was het bij voorbaat dus niet makkelijk te veranderen.
Ligt er een beetje aan hoe complex het in eerste instantie was natuurlijk; wmb is goede duidelijke code die ik makkelijk en snel weg kan gooien en kan vervangen door iets nieuws. Niet perse code waarbij ik uren zit te zoeken naar het juiste hoekje om nog een extra if-statement toe te voegen.

Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Donald Knuth zou het met veel van de berichten hierboven niet eens zijn.

In principe is de methode zelf (onafhankelijk van of het wordt gedaan met of zonder binary search) het probleem, want de implementatie is per definitie fout omdat het intern dingen beslist over dingen waar het niet over zou moeten beslissen.

Moet ik wel bij zeggen dat ik er dan alleen met een technische blik naar kijk en niet weet wat de context is :p Misschien is het niet belangrijk genoeg. Prima.

En daarom moet je als klant of manager dus met je (lead) werknemers de volledige wensen bespreken en niet als matige manager aannemen dat een omschrijving zoals "ik wil een boom met een schommel" genoeg is :+

Dat zit wel Schnorr.


Acties:
  • +1 Henk 'm!

  • HugoSmits
  • Registratie: April 2009
  • Laatst online: 18-08-2023
PrisonerOfPain schreef op donderdag 19 januari 2023 @ 17:35:
[...]


Ligt er een beetje aan hoe complex het in eerste instantie was natuurlijk; wmb is goede duidelijke code die ik makkelijk en snel weg kan gooien en kan vervangen door iets nieuws. Niet perse code waarbij ik uren zit te zoeken naar het juiste hoekje om nog een extra if-statement toe te voegen.
Ik ben het met je eens dat de huidige code duidelijk en makkelijk te begrijpen is. Maar dat is wel iets anders dan makkelijk te veranderen. Een nieuwe functie is in mijn ogen geen verandering of aanpassing, maar iets totaal nieuws.

Als je wel een echte verandering wil maken dan zou je in de huidige code alle if statements moeten aanpassen. Met het risico dat je per ongeluk een if statement overslaat of een typefout maakt.

Dat maakt het in mijn ogen lastig om te veranderen.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
RagingPenguin schreef op donderdag 19 januari 2023 @ 17:26:
[...]


Maar nu maak je het probleem abstracter dan het is, wat hier nergens voor nodig is. Voor business logica is dat prima, maar voor UI code maak je daarmee vaak alleen maar meer problemen. In jouw voorbeeld is het leuk dat deze functie 20 bolletjes aankan, maar de kans dat die dan ook in de layout passen is erg klein. En dan heb je iets wat ik eigenlijk erger vind: een abstractie die minder aankan dan die zegt aan te kunnen.
Dat is leuk, maar dan moet je je functie gewoon een betere naam geven.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 28-03 16:49
HugoSmits schreef op donderdag 19 januari 2023 @ 17:55:
[...]


Ik ben het met je eens dat de huidige code duidelijk en makkelijk te begrijpen is. Maar dat is wel iets anders dan makkelijk te veranderen. Een nieuwe functie is in mijn ogen geen verandering of aanpassing, maar iets totaal nieuws.

Als je wel een echte verandering wil maken dan zou je in de huidige code alle if statements moeten aanpassen. Met het risico dat je per ongeluk een if statement overslaat of een typefout maakt.

Dat maakt het in mijn ogen lastig om te veranderen.
Proberen te herframen wat een verandering is, maakt iets niet meer of minder een verandering natuurlijk ;)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hier is een one-liner in BQN :P :
code:
1
⊏⟜"⚪🔵"÷˜⟜↕⊸<


[bron]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 15:49

heuveltje

KoelkastFilosoof

Vond het niet echt nieuw topic waardig, maar was wel even benieuwd naar de mening hier ?

(taal is python, mocht het uitmaken).

Maar ik ben altijd gewend om "if boolean == true then" te doen.
Nu ben ik met een vriend gezamelijk wat in code aan het doen.
(Wij zijn beiden overigens echt bottom level hobbyproject niveau programmeurs)
En hij is van mening dat het "if boolean then" moet zijn. Want dat zou "netter en sneller" zijn.

In mijn optiek zou beide exact even snel moeten zijn omdat python dat wel optimaliseert. en is het eerste gewoon makkelijker lezen (voor mij).

Ik snap dat beide opties werken, maar vroeg me af of 1 als "slecht(er) programmeerwerk" betiteld zou worden ?

[ Voor 5% gewijzigd door heuveltje op 25-01-2023 11:57 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • +1 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Heel flauw, maar het hangt van de taal en van de context af?

Ik denk dat het qua performance niet zou moeten uitmaken (denk dat anderen daar meer over kunnen zeggen). Je hebtje natuurlijk ook talen waar er verschillende equality operators zijn (zoals het verschil in veel dynamic languages tussen == en ===, waarbij de laatste vaak ook type checks doet).

Ik geef mijn booleans vaak namen zoals isTriggered, hasResolved, of iets in die richting waardoor een zoals if isTriggered heel natuurlijk leest. Dan is de vergelijking met true niet nodig.

Acties:
  • 0 Henk 'm!

  • KNed
  • Registratie: Juni 2006
  • Laatst online: 17:39
De een is niet slechter dan de ander. Meer een developer voorkeur. Ik zou het zonder "== true" doen

Ik ben niet zo bekend met Python maar daar heb je toch geen "then"?

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

heuveltje schreef op woensdag 25 januari 2023 @ 11:54:
Vond het niet echt nieuw topic waardig, maar was wel even benieuwd naar de mening hier ?

(taal is python, mocht het uitmaken).

Maar ik ben altijd gewend om "if boolean == true then" te doen.
Nu ben ik met een vriend gezamelijk wat in code aan het doen.
(Wij zijn beiden overigens echt bottom level hobbyproject niveau programmeurs)
En hij is van mening dat het "if boolean then" moet zijn. Want dat zou "netter en sneller" zijn.

In mijn optiek zou beide exact even snel moeten zijn omdat python dat wel optimaliseert. en is het eerste gewoon makkelijker lezen (voor mij).

Ik snap dat beide opties werken, maar vroeg me af of 1 als "slecht(er) programmeerwerk" betiteld zou worden ?
Ik zie het als een kwestie van leesbaarheid. Een uniforme stijl aanhouden maakt het programma leesbaarder voor mensen met wie je samenwerkt. Dan hoeft het niet uit te maken welke stijl je kiest zolang je maar iets kiest. Ga maar eens op zoek naar programming style guides voor Python zoals deze van Google.

Wat betreft het performance argument: Meten is weten. Maak twee programmaatje die zo’n vergelijking in een loop hebben staan en ga 100 miljoen keer door die loop heen. Dan merk je vanzelf welke variant sneller is. Moet in een paar minuten wel te maken zijn.

Uiteindelijk zou ik in een script meestal niet op performance focussen. Dat is meestal de slechtste reden om iets te doen. Of een functie een milliseconde sneller wordt uitgevoerd is onderaan de streep vaak helemaal niet relevant.

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
heuveltje schreef op woensdag 25 januari 2023 @ 11:54:
Vond het niet echt nieuw topic waardig, maar was wel even benieuwd naar de mening hier ?

(taal is python, mocht het uitmaken).

Maar ik ben altijd gewend om "if boolean == true then" te doen.
Nu ben ik met een vriend gezamelijk wat in code aan het doen.
(Wij zijn beiden overigens echt bottom level hobbyproject niveau programmeurs)
En hij is van mening dat het "if boolean then" moet zijn. Want dat zou "netter en sneller" zijn.

In mijn optiek zou beide exact even snel moeten zijn omdat python dat wel optimaliseert. en is het eerste gewoon makkelijker lezen (voor mij).

Ik snap dat beide opties werken, maar vroeg me af of 1 als "slecht(er) programmeerwerk" betiteld zou worden ?
Voor 'True' maakt het niet zoveel uit. Ik vind zonder 'True' leesbaarder, als de variable naam goed gekozen is:
Python:
1
2
3
4
5
if enabled:
  print('Enabled')

if enabled == True:
  print('Enabled')


Voor 'enabled == False' is het anders. Omdat een variabele ook 'None' kan zijn. 'None == False' is False, 'False == False' is True

Acties:
  • +5 Henk 'm!

  • remyz
  • Registratie: Februari 2010
  • Laatst online: 22:13
(taal is python, mocht het uitmaken).
De PEP 8 Style Guide (https://peps.python.org/p...ogramming-recommendations) zegt:
Don’t compare boolean values to True or False using ==:
code:
1
2
3
4
5
# Correct:
if greeting:

# Wrong:
if greeting == True:

Acties:
  • +1 Henk 'm!

  • flo12392
  • Registratie: December 2013
  • Laatst online: 22-05 17:11
heuveltje schreef op woensdag 25 januari 2023 @ 11:54:
Vond het niet echt nieuw topic waardig, maar was wel even benieuwd naar de mening hier ?

(taal is python, mocht het uitmaken).

Maar ik ben altijd gewend om "if boolean == true then" te doen.
Nu ben ik met een vriend gezamelijk wat in code aan het doen.
(Wij zijn beiden overigens echt bottom level hobbyproject niveau programmeurs)
En hij is van mening dat het "if boolean then" moet zijn. Want dat zou "netter en sneller" zijn.

In mijn optiek zou beide exact even snel moeten zijn omdat python dat wel optimaliseert. en is het eerste gewoon makkelijker lezen (voor mij).

Ik snap dat beide opties werken, maar vroeg me af of 1 als "slecht(er) programmeerwerk" betiteld zou worden ?
Ik ben het eens met de bovenstaande reacties. Goede naming conventions helpen hier wel bij. Ik vind daarom het voorbeeld van @Kalentum eigenlijk beter dan die uit de Python Style Guide.

Om dit soort discussies te voorkomen zou je trouwens gebruik kunnen maken van packages als ruff (of flake8), en black. Die helpen met het automatisch netjes houden van je Python code en verifiëren dat je code voldoet aan de Python Style Guide, zodat je daar geen discussies meer over hoeft te hebben.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
Gropah schreef op woensdag 25 januari 2023 @ 12:02:
Heel flauw, maar het hangt van de taal en van de context af?

Ik denk dat het qua performance niet zou moeten uitmaken (denk dat anderen daar meer over kunnen zeggen). Je hebtje natuurlijk ook talen waar er verschillende equality operators zijn (zoals het verschil in veel dynamic languages tussen == en ===, waarbij de laatste vaak ook type checks doet).

Ik geef mijn booleans vaak namen zoals isTriggered, hasResolved, of iets in die richting waardoor een zoals if isTriggered heel natuurlijk leest. Dan is de vergelijking met true niet nodig.
Taal maakt sowieso uit. Als je bijvoorbeeld in java de Boolean wrapper class gebruikt (en niet de primitive boolean), dan heb je drie mogelijke waarden; true, false en null. Als je if (Boolean) gebruikt, dan doet Java iets dat unboxing heet (er een primitive boolean van maken). Als de waarde echter null was levert dat een nullpointer op.

Edit: dat geldt overigens voor beide van bovenstaande methodes. In Java geef ik altijd de voorkeur aan Boolean.TRUE.equals(booleanToCheck).

[ Voor 6% gewijzigd door Mugwump op 25-01-2023 14:56 ]

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • +1 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 20:50

AW_Bos

Liefhebber van nostalgie... 🕰️

Lachen met ChatGPT, zeg!
Ik heb hem even de vraag neer gelegd hoe je met PHP kan bepalen of het carnaval is.
Ikzelf zou dat gewoon met een lijst bepalen voor de komende paar jaar in een statementje en DateTime.
Carnaval valt elk jaar op een andere datum en wordt gevierd op de dagen voorafgaand aan Aswoensdag. Aswoensdag is de eerste dag van de vastentijd voor christenen en valt altijd op een woensdag, 46 dagen voor Pasen. Om te bepalen of het volgend jaar carnaval is, moeten we dus eerst de datum van Pasen berekenen en vervolgens terugtellen naar de dagen voorafgaand aan Aswoensdag.
Ik heb geen idee of deze theorie klopt...
Maar het script was echt hi-la-rish....

En de output klopt niet. Ik heb geen zin om dit geval te debuggen 8)7
PHP:
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
33
34
35
<?php
// bereken de datum van Pasen
function calculate_easter_date($year) {
    $a = $year % 19;
    $b = floor($year / 100);
    $c = $year % 100;
    $d = floor($b / 4);
    $e = $b % 4;
    $f = floor(($b + 8) / 25);
    $g = floor(($b - $f + 1) / 3);
    $h = (19 * $a + $b - $d - $g + 15) % 30;
    $i = floor($c / 4);
    $k = $c % 4;
    $l = (32 + 2 * $e + 2 * $i - $h - $k) % 7;
    $m = floor(($a + 11 * $h + 22 * $l) / 451);
    $month = floor(($h + $l - 7 * $m + 114) / 31);
    $day = (($h + $l - 7 * $m + 114) % 31) + 1;
    return mktime(0, 0, 0, $month, $day + 49, $year);
}

// controleer of het vandaag carnaval is
function is_today_carnaval() {
    $carnaval_start_date = strtotime('-48 days', calculate_easter_date(date('Y')));
    $carnaval_end_date = strtotime('-47 days', calculate_easter_date(date('Y')));
    $today = time();
    return $today >= $carnaval_start_date && $today <= $carnaval_end_date;
}

// uitvoeren van de functie om te controleren of het vandaag carnaval is
if (is_today_carnaval()) {
    echo "Ja, het is vandaag carnaval!";
} else {
    echo "Nee, het is vandaag geen carnaval.";
}
?>

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
AW_Bos schreef op zondag 19 februari 2023 @ 16:38:
En de output klopt niet. Ik heb geen zin om dit geval te debuggen 8)7
De versie voor C# geeft dezelfde prachtige code met a t/m m.

Na wat doorvragen zei "hij" dat het ging om het Meeus/Jones/Butcher-algoritme. Dat is wel handig.

Maar na verder doorvragen naar een betere benaming en het gebruik van constanten kreeg ik dit:
C#:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;

public class Program
{
    private const int DaysInWeek = 7;
    private const int DaysInYear = 365;
    private const int DaysInLeapYear = 366;
    private const int MetonicCycleLength = 19;
    private const int MoonPhasesPerCycle = 235;
    private const int DaysFromMarchToApril = 31;
    private const int DaysFromAprilToMay = 30;
    private const int DaysFromFebruaryToMarch = 31;

    private int DaysPerCentury = (DaysInYear * 100) + (int)Math.Floor(100 / 4.0);
    private int DaysPerMetonicCycle = (DaysInYear * MetonicCycleLength) + (int)Math.Floor(MetonicCycleLength / 4.0);
    private int DaysPerLeapYearCycle = (DaysInYear * 400) + (int)Math.Floor(400 / 4.0) - (int)Math.Floor(400 / 100.0) + (int)Math.Floor(400 / 400.0);

    public static void Main()
    {
        int year = 2023;

        DateTime easter = CalculateEasterSunday(year);
        DateTime carnival = easter.AddDays(-DaysInWeek * 7);

        Console.WriteLine("Carnaval valt op: {0}", carnival.ToString("dd-MM-yyyy"));
    }

    private static DateTime CalculateEasterSunday(int year)
    {
        int goldenNumber = year % MetonicCycleLength;
        int centuries = year / 100;
        int remainingYears = year % 100;
        int leapYearCycles = centuries / 4;
        int leapYearExtra = centuries % 4;
        int metonicMonth = (centuries + 8) / 25;
        int centuryAdjustment = (centuries - metonicMonth + 1) / 3;
        int epact = (MoonPhasesPerCycle * goldenNumber + centuries - leapYearCycles - centuryAdjustment + 15) % 30;
        int leapYearAdjustment = remainingYears / 4;
        int leapYearExtraAdjustment = remainingYears % 4;
        int lunarCorrection = (32 + 2 * leapYearExtra + 2 * leapYearAdjustment - epact - leapYearExtraAdjustment) % DaysInWeek;
        int daysToFullMoon = (goldenNumber + 11 * epact + 22 * lunarCorrection) / 451;
        int month = (epact + lunarCorrection - DaysInWeek * daysToFullMoon + 114) / 31;
        int day = ((epact + lunarCorrection - DaysInWeek * daysToFullMoon + 114) % 31) + 1;

        int monthAdjustment = month == 4 ? DaysFromMarchToApril : DaysFromAprilToMay;
        return new DateTime(year, month, day).AddDays(monthAdjustment);
    }
}


In tegenstelling tot de eerste versie geeft deze code aan dat carnaval op 15 maart is.

Ik durfde niet verder te pushen omdat de resultaten steeds langzamer kwamen en de laatste reactie halverwege werd afgebroken :+

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Als je de wikipedia pagina over pasen leest krijg je een beetje door wat die niet te debuggen CalculateEaster functie doet. Hij volgt de methode van Gauss.

Als die functie de juiste datum teruggeeft is de stap naar de juiste datum voor carnaval goed te controleren.


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
33
34
35
36
37
import datetime
import math

def calculate_easter_date(year):
    a = year % 19
    b = math.floor(year / 100)
    c = year % 100
    d = math.floor(b / 4)
    e = b % 4
    f = math.floor((b + 8) / 25)
    g = math.floor((b - f + 1) / 3)
    h = (19 * a + b - d - g + 15) % 30
    i = math.floor(c / 4)
    k = c % 4
    l = (32 + 2 * e + 2 * i - h - k) % 7
    m = math.floor((a + 11 * h + 22 * l) / 451)
    month = math.floor((h + l - 7 * m + 114) / 31)
    day = ((h + l - 7 * m + 114) % 31) + 1
    return datetime.date(year, month, day)

def calculate_carnival_start(year):
    easter = calculate_easter_date(year)
    carnival_start = easter - datetime.timedelta(days=50)
    return carnival_start
    
def calculate_carnival_end(year):
    easter = calculate_easter_date(year)
    carnival_end = easter - datetime.timedelta(days=47)
    return carnival_end 

# Example usage
year = 2023
carnival_start = calculate_carnival_start(year)
print(f"The start date of Dutch Carnival in {year} is {carnival_start.strftime('%Y-%m-%d')}.")

carnival_end = calculate_carnival_end(year)
print(f"The end date of Dutch Carnival in {year} is {carnival_end.strftime('%Y-%m-%d')}.")

👑


Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 08-05 06:45
Stukfruit schreef op zondag 19 februari 2023 @ 17:26:
[...]


De versie voor C# geeft dezelfde prachtige code met a t/m m.

Na wat doorvragen zei "hij" dat het ging om het Meeus/Jones/Butcher-algoritme. Dat is wel handig.

Maar na verder doorvragen naar een betere benaming en het gebruik van constanten kreeg ik dit:
C#:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;

public class Program
{
    private const int DaysInWeek = 7;
    private const int DaysInYear = 365;
    private const int DaysInLeapYear = 366;
    private const int MetonicCycleLength = 19;
    private const int MoonPhasesPerCycle = 235;
    private const int DaysFromMarchToApril = 31;
    private const int DaysFromAprilToMay = 30;
    private const int DaysFromFebruaryToMarch = 31;

    private int DaysPerCentury = (DaysInYear * 100) + (int)Math.Floor(100 / 4.0);
    private int DaysPerMetonicCycle = (DaysInYear * MetonicCycleLength) + (int)Math.Floor(MetonicCycleLength / 4.0);
    private int DaysPerLeapYearCycle = (DaysInYear * 400) + (int)Math.Floor(400 / 4.0) - (int)Math.Floor(400 / 100.0) + (int)Math.Floor(400 / 400.0);

    public static void Main()
    {
        int year = 2023;

        DateTime easter = CalculateEasterSunday(year);
        DateTime carnival = easter.AddDays(-DaysInWeek * 7);

        Console.WriteLine("Carnaval valt op: {0}", carnival.ToString("dd-MM-yyyy"));
    }

    private static DateTime CalculateEasterSunday(int year)
    {
        int goldenNumber = year % MetonicCycleLength;
        int centuries = year / 100;
        int remainingYears = year % 100;
        int leapYearCycles = centuries / 4;
        int leapYearExtra = centuries % 4;
        int metonicMonth = (centuries + 8) / 25;
        int centuryAdjustment = (centuries - metonicMonth + 1) / 3;
        int epact = (MoonPhasesPerCycle * goldenNumber + centuries - leapYearCycles - centuryAdjustment + 15) % 30;
        int leapYearAdjustment = remainingYears / 4;
        int leapYearExtraAdjustment = remainingYears % 4;
        int lunarCorrection = (32 + 2 * leapYearExtra + 2 * leapYearAdjustment - epact - leapYearExtraAdjustment) % DaysInWeek;
        int daysToFullMoon = (goldenNumber + 11 * epact + 22 * lunarCorrection) / 451;
        int month = (epact + lunarCorrection - DaysInWeek * daysToFullMoon + 114) / 31;
        int day = ((epact + lunarCorrection - DaysInWeek * daysToFullMoon + 114) % 31) + 1;

        int monthAdjustment = month == 4 ? DaysFromMarchToApril : DaysFromAprilToMay;
        return new DateTime(year, month, day).AddDays(monthAdjustment);
    }
}


In tegenstelling tot de eerste versie geeft deze code aan dat carnaval op 15 maart is.

Ik durfde niet verder te pushen omdat de resultaten steeds langzamer kwamen en de laatste reactie halverwege werd afgebroken :+
Pas op dat in die code het algoritme voor leap year niet correct is!!!

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

PageFault schreef op vrijdag 3 maart 2023 @ 10:48:
[...]


Pas op dat in die code het algoritme voor leap year niet correct is!!!
Knap dat je dat ziet. Waarom niet?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 08-05 06:45
.oisyn schreef op vrijdag 3 maart 2023 @ 10:55:
[...]


Knap dat je dat ziet. Waarom niet?
Hoezo knap?

Ik zie dat hij module 4 optelt, dat klopt nooit, zie ook:

https://www.mathsisfun.com/leap-years.html

https://www.wikihow.com/Calculate-Leap-Years

Acties:
  • +2 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Omdat de berekening die we hier zien veel ingewikkelder is dan gewoon bepalen of het een schrikkeljaar is. De code is uiteindelijk geinteresseerd in de stand van de maan.

Dus ik hoopte op een gedetailleerder antwoord dan "modulo optellen klopt ook nooit" :). Zo op het eerste gezicht lijkt hij de regels van 'deelbaar door 4, maar niet deelbaar door 100, maar wel weer deelbaar door 400' in ieder geval wel mee te nemen.

[ Voor 19% gewijzigd door .oisyn op 03-03-2023 11:03 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 08-05 06:45
.oisyn schreef op vrijdag 3 maart 2023 @ 11:01:
[...]

Omdat de berekening die we hier zien veel ingewikkelder is dan gewoon bepalen of het een schrikkeljaar is. De code is uiteindelijk geinteresseerd in de stand van de maan.

Dus ik hoopte op een gedetailleerder antwoord dan "modulo optellen klopt ook nooit" :). Zo op het eerste gezicht lijkt hij de regels van 'deelbaar door 4, maar niet deelbaar door 100, maar wel weer deelbaar door 400' in ieder geval wel mee te nemen.
Hij houdt geen rekening met de deelbaarheid door 100 en 400 (en 1000 als je nog wat verder wilt kijken, 4000 is niet meer relevant omdat de Gregoriaanse kalender geen stand meer houdt na het jaar 4000).

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

@PageFault Jawel, regels 31 t/m 34.

[ Voor 11% gewijzigd door .oisyn op 03-03-2023 11:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 08-05 06:45
Je hebt gelijk, uiteraard :+ Ik was de 2e keer niet ver genoeg terug gescrolled en heb de rest niet bekeken. Is nog "vroeg"....

Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Wat hierboven wordt gezegd inderdaad. Ik wilde de overige magische getallen en dat "epact" nog verder laten verduidelijken, samen met een refactor van het geheel, maar zover kreeg ik ChatGPT dus niet :p

Voorlopig blijft het verstandiger om het vooral als snelle lookup voor documentatie te gebruiken dan voor onderhoudbare code.

Maar voor dat eerste is ChatGPT dan weer wel geweldig.

Dat zit wel Schnorr.


Acties:
  • +5 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Gebruik de nieuwe Outlook! We zijn echt superfuckingtrots dat we een mailclient in HTML hebben geschreven! Nu, voor maar 300 MB RAM, en alleen getest in de VS!

Afbeeldingslocatie: https://tweakers.net/i/grU8T821IWXHkNiLJBV6J9q8yxc=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/8sPMLGCpf5eJhOP1kuosk1ah.png?f=user_large

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@CodeCaster volgens mij kun je dat wel gewoon instellen binnen outlook, maar het is natuurlijk suf dat hij niet je systeem instellingen overneemt.

“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!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:50
CodeCaster schreef op dinsdag 5 september 2023 @ 08:20:
Gebruik de nieuwe Outlook! We zijn echt superfuckingtrots dat we een mailclient in HTML hebben geschreven! Nu, voor maar 300 MB RAM, en alleen getest in de VS!

[Afbeelding]
Lijkt me UTC tijd, geen VS tijd. Daar is het minimaal 6 uur eerder. :P

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • roeleboel
  • Registratie: Maart 2006
  • Niet online

roeleboel

en zijn beestenboel

systeemtijd versus utc tot daar aan toe, maar een minuut achter lopen lijkt me veel minder wenselijk 8)7

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Nu online
roeleboel schreef op dinsdag 5 september 2023 @ 09:45:
systeemtijd versus utc tot daar aan toe, maar een minuut achter lopen lijkt me veel minder wenselijk 8)7
Er staan geen secondes bij. Het zou zo maar kunnen dat de taaktalk al een rollover had, maar Outlook (blijkbaar in JavaScript) nog niet :+

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is uit de context van het plaatje niet te zien, maar het lijkt mij niet de huidige tijd, maar de tijd van een item, dus de tijd kan wel gewoon kloppen. Ik vermoed dat het vooral over het date-format gaat, maar dat is natuurlijk een beetje gissen ;)

“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!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik maakte het screenshot een minuut na het versturen van de mail. Zo lang duurde het om mijn palm weer van mijn voorhoofd te verwijderen.

Dus ja, het gaat om het datumformaat én het printen in UTC.
Woy schreef op dinsdag 5 september 2023 @ 09:49:
Het is uit de context van het plaatje niet te zien
Jawel, want je ziet de klassieke "reply"-, "reply all"- en "forward"-knoppen, vergezeld door de volstrekt kansloze "like"- en "react"-knoppen.

Ik durf nog steeds niet op "👍" te klikken bij een mail, want ik weet niet bij wie die terechtkomt.

[ Voor 88% gewijzigd door CodeCaster op 05-09-2023 10:15 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
CodeCaster schreef op dinsdag 5 september 2023 @ 10:11:
Jawel, want je ziet de klassieke "reply"-, "reply all"- en "forward"-knoppen, vergezeld door de volstrekt kansloze "like"- en "react"-knoppen.
Dan is er dus wel context van buiten het plaatje nodig ;)

Maar inderdaad zowel het format als de timezone kun je instellen. Afbeeldingslocatie: https://tweakers.net/i/6EF2dCmQdZcKcm80jBI7dQQ5omU=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/eU2HI3CIWHizhrUF1EkXmcCj.png?f=user_large

Maar een setting "Pak mijn system settings", met de optie om die te overschrijven zou wel een stuk gebruikersvriendelijker geweest zijn ja.

[ Voor 11% gewijzigd door Woy op 05-09-2023 10:29 ]

“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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hmz zo te zien geen support voor alternatieve send-from adressen, dus de nieuwe Outlook is sowieso een no go voor mij :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

.oisyn schreef op dinsdag 5 september 2023 @ 10:59:
Hmz zo te zien geen support voor alternatieve send-from adressen, dus de nieuwe Outlook is sowieso een no go voor mij :Y)
Works on my machine?
Afbeeldingslocatie: https://tweakers.net/i/7dakN2mSP7IuWhDOAMrJYqkpvX0=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/6CfAPLWX6cPCiabfrmWB62dS.png?f=user_large

Maar komend van Gmail blijft het dagelijks vechten met Outlook. Gelukkig mail ik niet zo veel meer.

[ Voor 10% gewijzigd door CodeCaster op 05-09-2023 11:19 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
CodeCaster schreef op dinsdag 5 september 2023 @ 11:19:
[...]
Maar komend van Gmail blijft het dagelijks vechten met Outlook. Gelukkig mail ik niet zo veel meer.
Ja ik heb hetzelfde, ik gebruik gmail, maar bij klanten vaak outlook, het blijft een draak van een stuk software

“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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:44

.oisyn

Moderator Devschuur®

Demotivational Speaker

CodeCaster schreef op dinsdag 5 september 2023 @ 11:19:
[...]

Works on my machine?
[Afbeelding]

Maar komend van Gmail blijft het dagelijks vechten met Outlook. Gelukkig mail ik niet zo veel meer.
Is dat een MS account of een gmail account?

.edit: trouwens een beetje offtopic hier :)

[ Voor 4% gewijzigd door .oisyn op 05-09-2023 11:58 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Nu online
Het grootste nadeel van Outlook vond ik altijd dat het niet overweg kan (of inmiddels: kon?) met grote hoeveelheden emails. Ik gooi eigenlijk nooit emails weg, en sta in de CC van veel emails: dus mijn werk mailbox heeft nu door de jaren heen zo'n 40k emails. In mijn huidige mail programma draait dat als een zonnetje, zoeken e.d duurt minder dan een seconde. In outlook crashte dat aan de lopende band.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Screenshot met blurred text van een bekend font, met heel beperkt aantal mogelijke karakters.
Zitten er grote geheimen in @CodeCaster? Dan weet ik of het de moeite waard is. :p

{signature}


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Voutloos schreef op dinsdag 5 september 2023 @ 17:50:
Screenshot met blurred text van een bekend font, met heel beperkt aantal mogelijke karakters.
Zitten er grote geheimen in @CodeCaster? Dan weet ik of het de moeite waard is. :p
Geen informatie die toch al niet open en bloot op het internet aan mij te koppelen is. :+

Maar als je het kunt ontcijferen, DM maar!

[ Voor 5% gewijzigd door CodeCaster op 05-09-2023 18:36 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
CodeCaster schreef op dinsdag 5 september 2023 @ 18:28:
[...]

Geen informatie die toch al niet open en bloot op het internet aan mij te koppelen is. :+

Maar als je het kunt ontcijferen, DM maar!
spoiler:
Een eigen domein, dubbel iets met codecaster, een voornaam en een info-adres.

Hoeveel koelkasten win ik?

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 13:22

F.West98

Alweer 16 jaar hier

Dat hele "nieuwe Outlook" is wel één groot slecht programmeervoorbeeld wat mij betreft. Wat een meuk. Waarom moet dat nou een HTML app worden? De oude versie was misschien wat log soms, maar het werkte en de UI was vlot voor dagelijks gebruik. Mijn "quick actions" in de nieuwe Outlook doen er letterlijk 2 seconden over om een mail te archiveren! En dan werkt het natuurlijk ook nog eens niet als je geen internetverbinding hebt, omdat er naar het schijnt geen mail lokaal wordt gecacht. Fijn hoor, een always-online mail client.
:r :r :r

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

F.West98 schreef op woensdag 6 september 2023 @ 03:26:
Dat hele "nieuwe Outlook" is wel één groot slecht programmeervoorbeeld wat mij betreft. Wat een meuk. Waarom moet dat nou een HTML app worden? De oude versie was misschien wat log soms, maar het werkte en de UI was vlot voor dagelijks gebruik. Mijn "quick actions" in de nieuwe Outlook doen er letterlijk 2 seconden over om een mail te archiveren! En dan werkt het natuurlijk ook nog eens niet als je geen internetverbinding hebt, omdat er naar het schijnt geen mail lokaal wordt gecacht. Fijn hoor, een always-online mail client.
:r :r :r
Omdat ze dat gezien hebben bij Android dat alles in een browser app draait :r

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1 ... 19 20 Laatste

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)