Avatar billede fixxxer Nybegynder
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é?
Avatar billede nielle Nybegynder
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;
Avatar billede nielle Nybegynder
15. september 2005 - 13:36 #2
Yderlig manipulation kræver brug af de binære operatore:

http://dk2.php.net/manual/da/language.operators.bitwise.php
Avatar billede fixxxer Nybegynder
15. september 2005 - 13:43 #3
Det er netop en algoritme jeg er ude efter ikke matematik i PHP :)
Avatar billede nielle Nybegynder
15. september 2005 - 13:55 #4
Så må du nok forklare lidt mere om hvad det er du ønsker at kunne gøre.
Avatar billede fixxxer Nybegynder
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..
Avatar billede bromer Nybegynder
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 :)
Avatar billede fixxxer Nybegynder
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..
Avatar billede bromer Nybegynder
15. september 2005 - 14:11 #8
Nå.. på den måde.. du kan se alle de binære operatoerer på [1]. Der er en masse eksempler i den sektion, som du bør læse.

[1] http://dk2.php.net/manual/en/language.operators.bitwise.php
Avatar billede fixxxer Nybegynder
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':'';
Avatar billede bromer Nybegynder
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 :)
Avatar billede fixxxer Nybegynder
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..
Avatar billede bromer Nybegynder
15. september 2005 - 15:01 #12
Det var med hensyn til køretiden, så det burde være failsafe.
Avatar billede nielle Nybegynder
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'  : '';
Avatar billede fixxxer Nybegynder
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..
Avatar billede nielle Nybegynder
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;
Avatar billede nielle Nybegynder
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 :^)
Avatar billede bromer Nybegynder
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.
Avatar billede nielle Nybegynder
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;
Avatar billede fixxxer Nybegynder
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 :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester