15. september 2005 - 13:21
Der er
17 kommentarer og 2 løsninger
matematisk udregning af ugedage
Jeg forsøger at lave en formel for ugens 7 dage, hvor hver dag i ugen har et tal. Umiddelbart kan jeg bedst sammenligne udregningen med filrettigheder i et unix-system. Man: 1 Tirs: 2 Ons: 4 Tors: 8 Fre: 16 Løs: 32 Søn: 64 Fidusen skulle være at man kan ligge dagene sammen, så man får et tal for netop de dage.. Fx ville tallet 113 kun være synonym med fre+lør+søn+man, og ingen andre. Men jeg er på bar bund, hvordan jeg skal lave den udregning, er der nogle kloge hoveder der har en idé?
Annonceindlæg fra Deloitte
15. september 2005 - 13:29
#1
$Man = 1; $Tirs = 2; $Ons = 4; $Tors = 8; $Fre = 16; $Loer = 32; $Soen = 64; $dage = $Man+$Fre+$Loer+$Soen;
15. september 2005 - 13:36
#2
15. september 2005 - 13:43
#3
Det er netop en algoritme jeg er ude efter ikke matematik i PHP :)
15. september 2005 - 13:55
#4
Så må du nok forklare lidt mere om hvad det er du ønsker at kunne gøre.
15. september 2005 - 14:00
#5
Hvordan finder jeg ud af at 113 er fre+lør+søn+man og at 31 er man+tirs+ons+tors+fre og såfremdeles..
15. september 2005 - 14:03
#6
fixxxer: Hvis du skal lave den slags er du nød til at lave en 7 repræsentanter, hvorom der gælder at der ikke findes en operator udført på en delmængde af de 7 der giver netop en af de 7. Det nielle foreslog er en glimrende løsning, i det vi antager at den computer du skal udføre det på har en binær arkitektur. Alternertivt kan du altid implementere et stort matematik librarby med en masse konguensklasser :)
15. september 2005 - 14:07
#7
Altså binære operatore? Ja, det er også noget jeg har tænkt at jeg skulle gøre, men jeg har ikke en disse idé om hvordan jeg gør det..
15. september 2005 - 14:28
#9
Den her ser ud til at køre med klatten... $number = 113; echo (($number & 64) == 64)?'Søndag':''; echo (($number & 32) == 32)?'Lørdag':''; echo (($number & 16) == 16)?'Fredag':''; echo (($number & 8) == 8)?'Torsdag':''; echo (($number & 4) == 4)?'Onsdag':''; echo (($number & 2) == 2)?'Tirsdag':''; echo (($number & 1) == 1)?'Mandag':'';
15. september 2005 - 14:49
#10
Det ser ud til at virke. Det er ganske givet ikke 100% optimalt, men når det nu er PHP går det nok :)
15. september 2005 - 14:59
#11
Det skal være 100% fail-safe, så hvis der er noget der kan gøre mere optimalt, må du meget gerne sige mig hvad det er :) Hvis det er optimalt som i hvor meget cpu load det påfører, så betyder det ikke så meget..
15. september 2005 - 15:01
#12
Det var med hensyn til køretiden, så det burde være failsafe.
15. september 2005 - 15:39
#13
Når man nu allerede har defineret konstanterne: $Man = 1; $Tirs = 2; $Ons = 4; $Tors = 8; $Fre = 16; $Loer = 32; $Soen = 64; - så ville jeg personligt vælge at skrive koden 15/09-2005 14:28:47 på denne form: echo (($number & $Soen) == $Soen) ? 'Søndag' : ''; echo (($number & $Loer) == $Loer) ? 'Lørdag' : ''; echo (($number & $Fre) == $Fre) ? 'Fredag' : ''; echo (($number & $Tors) == $Tors) ? 'Torsdag' : ''; echo (($number & $Ons) == $Ons) ? 'Onsdag' : ''; echo (($number & $Tirs) == $Tirs) ? 'Tirsdag' : ''; echo (($number & $Man) == $Man) ? 'Mandag' : '';
15. september 2005 - 15:41
#14
nielle du havde ret med dit svar, så smid et svar. bromer, hvis du vil, får du lidt point for dit input..
15. september 2005 - 15:42
#15
... og forresten kan kode-eksemplet fra 15/09-2005 13:29:33 også skrives sådan her (og det er måske endda lidt mere optimalt mht. hastigheden): $dage = $Man | $Fre | $Loer | $Soen;
15. september 2005 - 15:44
#16
Jeg lægger gerne et svar, men jeg synes egentlig at bromer burde have de fleste point på denne her :^) ... og et svar :^)
15. september 2005 - 15:56
#17
Det synes jeg så ikke... jeg lægger da gerne et svar, men jeg synes som minimum at vi skal dele, nielle.
15. september 2005 - 17:14
#18
bromer> Fint nok med mig at vi deler lige - jeg mener, det var jo sådan set dig som sluttede de ordentligt af da jeg ikke lige havde tiden :^) fixxxer> Koden: $Man = 1; $Tirs = 2; $Ons = 4; $Tors = 8; $Fre = 16; $Loer = 32; $Soen = 64; - kan i øvrigt skrives på en mere elegant måde: $Man = 1 << 0; $Tirs = 1 << 1; $Ons = 1 << 2; $Tors = 1 << 3; $Fre = 1 << 4; $Loer = 1 << 5; $Soen = 1 << 6;
15. september 2005 - 17:28
#19
Mange tak begge to, jeg har fået en god idé til hvordan jeg løser mit problem, udfra jeres forslag. Tak for hjælpen :)
Vi tilbyder markedets bedste kurser inden for webudvikling