[ALG] Zien of een bit geset is *

Pagina: 1
Acties:

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Hoi, ik heb geen idee hoe dit heet of hoe dit moet, dus daarom vraag ik het hier. Op google kon ik niets vinden en hier ook niet.

Heel simpel, en bekend bij velen hier (weet ik zeker :D):

Je hebt 3 keuzes waarbij je ook meerdere keuzes kan hebben.

Keuze A, Keuze B, Keuze C

Nou wil ik dit opslaan en uitlezen met een getal.

Als dat getal 1, 2 of 4 is dan heb je resp. keuze A, B of C.

Heb je getal 3, dan is dat (1+2) dus keuze A en B
Heb je getal 5, dan is dat (4 + 1) dus keuze A en C
Heb je getal 6, dan is dat (4 + 2) dus keuze B en C
Heb je getal 7, dan is dat (1 + 2 + 4) dus A B en C

Dit is tot 3 opties, maar dat moet uiteraard ook met meerdere kunnen (1 2 4 8 16 32 etc)

[ Voor 53% gewijzigd door Guillome op 12-07-2007 10:21 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • lier
  • Registratie: Januari 2004
  • Laatst online: 21:55

lier

MikroTik nerd

Hahaha, the answer to ur question is 42...

Iets te snel gereageerd...

Wat je kan doen is recursieviteit toepassen:

Verzameling {1, 2, 3}
Waarde = X

X - hoogste < 0, haal hoogste uit verzameling en begin opnieuw
X - hoogste(verzameling) = 0, klaar
X - hoogste(verzameling) > 0, haal hoogste uit verzameling, trek deze van de waarde af en begin opnieuw


Maar...probeer zelf eens eerst iets...?


@André: Verzameling van 1 - 1.000.000...?

[ Voor 94% gewijzigd door lier op 12-07-2007 10:19 ]

Eerst het probleem, dan de oplossing


  • André
  • Registratie: Maart 2002
  • Laatst online: 02-12 14:48

André

Analytics dude

Een case select?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case 1
  functie 1
case 2
  functie 3
case 3
  functie 3
case 4
  functie 1
  functie 3
case 5
  functie 2
  functie 3
case 6
  functie 1
  functie 2
  functie 3

[ Voor 90% gewijzigd door André op 12-07-2007 10:14 ]


  • Guillome
  • Registratie: Januari 2001
  • Niet online
lier schreef op donderdag 12 juli 2007 @ 10:11:
Maar...probeer zelf eens eerst iets
Dah :P Dat probeer ik al een tijd, maar ik kom er niet uit.

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • lier
  • Registratie: Januari 2004
  • Laatst online: 21:55

lier

MikroTik nerd

Guillome schreef op donderdag 12 juli 2007 @ 10:15:
[...]
Dah :P Dat probeer ik al een tijd, maar ik kom er niet uit.
Zie ik niets van terug... :)
Laat je wel even je cijfer weten !?

Eerst het probleem, dan de oplossing


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Welk cijfer jong? Ik zit niet meer op school.
Ik ben nu zover:
PHP:
1
2
3
4
5
6
7
8
9
10
          $tmp_uur = 3;
          $max_uur = 3;
          for ($uur = 1; $uur <= $max_uur; $uur++)
          { 
            for ($tmp = 8; $tmp > $tmp_uur; $tmp--)
            {
              if ($tmp > $tmp_uur) continue;
              $tmp_uur -= $tmp;
            }
            if ($tmp_uur != $uur) continue;


Als tmp_uur nou 4 of 5 of 6 is moet hij dus meerdere pakken (dus niet 'continue-en')

[ Voor 9% gewijzigd door Guillome op 12-07-2007 10:19 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Is nu toch niet zoooo moeilijk wel?

Zoals Lier zegt: kijken of de hoogste waarde in je variabele gaat.

Zoja > selecteren + waarde van variabele aftrekken + volgende waarde checken, net zolang tot je op nu staat
Zonee > niet selecteren, controle van 2de hoogste waarde , etc.

*edit*
tip: gebruik een do-while structuur

*edit2*
[quote]Creepy schreef op donderdag 12 juli 2007 @ 10:20:
Overigens roep je nu twee dingen bij optie "3". De eerste keer zeg je dat het een losse optie is, daaronder zeg je dat het optie "1" en "2" zijn. Alleen in het laatste geval kan je met bitwise operators aan de slag.
[/quote]
Inderdaad, vloekt als een tang op een varken :)

[ Voor 45% gewijzigd door Blacksnak op 12-07-2007 10:34 . Reden: grmbl ;) ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

Volgens mij leg je het redelijk krom uit maar volgens mij wil je gewoon weten of een bepaald bit is geset. Kijk eens naar de bitwise operators (of zoek eens op bit sets) hoe je dat kan regelen. Ga in elk geval niet rommelen met getalletjes optellen en aftrekken, nergens voor nodig.

Overigens roep je nu twee dingen bij optie "3". De eerste keer zeg je dat het een losse optie is, daaronder zeg je dat het optie "1" en "2" zijn. Alleen in het laatste geval kan je met bitwise operators aan de slag. Je hebt het aangepast. Bitwise operators dus :)

[ Voor 58% gewijzigd door Creepy op 12-07-2007 10:25 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Was ik al goed op weg dus ;) Ik probeer even verder

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kun je voortaan ook een wat omschrijvender topictitel verzinnen? "Algoritme" is nogal héél breed :X

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Wat voor titel had ik moeten geven? Ik wist niet hoe het heette en hoe het moest. Dat laatste overigens nog steeds niet :(

[ Voor 20% gewijzigd door Guillome op 12-07-2007 10:58 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

En wat heb je dan geprobeerd? Als je zoekt op <taal die je gebruikt> en bitwise dan moet je een heel eind kunnen komen Zoeken op php en bitwise levert bruikbare resultaten op.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Guillome schreef op donderdag 12 juli 2007 @ 10:59:
Wat voor titel had ik moeten geven? Ik wist niet hoe het heette en hoe het moest. Dat laatste overigens nog steeds niet :(
Je moet de AND-operator gebruiken.

Indien ( getal AND 1 ) ongelijk aan 0 » 1 zit in getal
Indien ( getal AND 2 ) ongelijk aan 0 » 2 zit in getal
Indien ( getal AND 4 ) ongelijk aan 0 » 4 zit in getal enz.

Developer Accused Of Unreadable Code Refuses To Comment


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

* Creepy mept Icelus. Zeg het ff voor ;)
En zorgt dat je de bitwise AND gebruikt!

[ Voor 30% gewijzigd door Creepy op 12-07-2007 11:11 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Guillome
  • Registratie: Januari 2001
  • Niet online
:?:? Jemig wat heerst hier een apparte sfeer. Je mag mensen alleen cryptische omschrijvingen geven, maar oh jeej geef het antwoord niet... Dank je wel Icelus!

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Kixtart
  • Registratie: Mei 2004
  • Niet online

Kixtart

Destruction = Improvement

Guillome schreef op donderdag 12 juli 2007 @ 11:12:
:?:? Jemig wat heerst hier een apparte sfeer. Je mag mensen alleen cryptische omschrijvingen geven, maar oh jeej geef het antwoord niet... Dank je wel Icelus!
Als je te snel een antwoord geeft leren veel mensen er vaak niks van. En dan denkt een andere user: Ohw hij krijgt gelijk een antwoord, laat ik even snel een topic aanmaken ipv zoeken. ;)

☻/
/▌
/ \


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

Guillome schreef op donderdag 12 juli 2007 @ 11:12:
:?:? Jemig wat heerst hier een apparte sfeer. Je mag mensen alleen cryptische omschrijvingen geven, maar oh jeej geef het antwoord niet... Dank je wel Icelus!
Het is hier dan ook een discussie forum en geen helpdesk. Als je zelf achter de oplossing komt dan vergeet je het niet meer en weet je precies hoe het werkt. Als je hier direct een kant en klare oplossing geeft dan kopie & paste je dat. Op dat moment heb je vaak niet door hoe het nu echt in elkaar steekt en leer je er dus niks van zodat je de volgende keer hier weer een (soortgelijke) vraag dumpt. We doen het dus niet om je te pesten ;)

Daarnaast: bitwise operators en hun werking zijn basiskennis van een beetje ontwikkelaar en worden op een beetje opleiding of in een beetje programmeer boek echt wel uitgelegd.

[ Voor 18% gewijzigd door Creepy op 12-07-2007 11:22 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-11 09:35

leuk_he

1. Controleer de kabel!

Icelus schreef op donderdag 12 juli 2007 @ 11:09:
[...]
Je moet de (bitwise) AND-operator gebruiken.
Of een shift commando

Er is in de startpost geen taal gespecificeeerd.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Dat is dan generaliseren. Ik leer daar wel van, want ik ben er in geintereseerd, en doe het niet voor mn huiswerk ofzo... Toch bedankt :)

PHP:
1
2
3
4
5
6
7
8
9
10
          while ($max_uur >= 0)
          {
            $tmp = pow(2, $max_uur);
            if (($tmp_uur & $tmp) != 0) { array_push($toon_uren, $tmp); }
            $tmp_uur -= $tmp; 
            $max_uur--;
          }
          for ($uur = 1; $uur <= 3; $uur++)
          {
            if (!inarray($toon_uren,pow(2, $uur-1))) continue;

Hmmmmm :D Jippie hij werkt :D Dank jullie wel!!

edit
Nu nog dynamisch kunnen bekijken wat de maximale bitwaarde is. (van 7 is dat bijv. 8, van 9 is dat 16)

[ Voor 109% gewijzigd door Guillome op 12-07-2007 12:00 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Tip: begin aan de achterkant, daarvan weet je altijd dat het 1 is. Wanneer je moet stoppen is ook makkelijk.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het kan ook zonder loop, met 2log, of gewoon wat bitneukerij:

PHP:
1
2
3
4
5
6
7
8
9
10
function nextPowerOfTwo($x)
{
    $x = (int)$x - 1;
    $x |= $x >> 1;
    $x |= $x >> 2;
    $x |= $x >> 4;
    $x |= $x >> 8;
    $x |= $x >> 16;
    return $x + 1;
}

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.


  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 18-11 12:58

kokx

WIN

Guillome schreef op donderdag 12 juli 2007 @ 11:20:
Dat is dan generaliseren. Ik leer daar wel van, want ik ben er in geintereseerd, en doe het niet voor mn huiswerk ofzo... Toch bedankt :)

PHP:
1
2
3
4
5
6
7
8
9
10
          while ($max_uur >= 0)
          {
            $tmp = pow(2, $max_uur);
            if (($tmp_uur & $tmp) != 0) { array_push($toon_uren, $tmp); }
            $tmp_uur -= $tmp; 
            $max_uur--;
          }
          for ($uur = 1; $uur <= 3; $uur++)
          {
            if (!inarray($toon_uren,pow(2, $uur-1))) continue;

Hmmmmm :D Jippie hij werkt :D Dank jullie wel!!

edit
Nu nog dynamisch kunnen bekijken wat de maximale bitwaarde is. (van 7 is dat bijv. 8, van 9 is dat 16)
Niet echt de handigste manier.

In PHP heb je de bitwise operators, oftewel gebruik zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$bitwise = 5; // A + C

if ($bitwise & 1) {
    // A
}
if ($bitwise & 2) {
    // B
}
// de rest kun je denk zelf wel

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
kokx schreef op donderdag 12 juli 2007 @ 22:00:
[...]


Niet echt de handigste manier.

In PHP heb je de bitwise operators, oftewel gebruik zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$bitwise = 5; // A + C

if ($bitwise & 1) {
    // A
}
if ($bitwise & 2) {
    // B
}
// de rest kun je denk zelf wel
precies... die is ook al een paar keer genoemd in dit topic, maar omdat er niemand letterlijk code heeft gepost is dit waarschijnlijk niet geprobeerd door TS... terwijl dit me toch DE manier lijkt...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

Edwardvb schreef op vrijdag 13 juli 2007 @ 08:59:
[...]


precies... die is ook al een paar keer genoemd in dit topic, maar omdat er niemand letterlijk code heeft gepost is dit waarschijnlijk niet geprobeerd door TS... terwijl dit me toch DE manier lijkt...
Eeh.. hij post deze code: if (($tmp_uur & $tmp) != 0). Daar staat toch echt een bitwise AND in.

Dat optellen handiger is dan aftrekken is al genoemd. Daarnaast is het niet nodig om $tmp_uur -= $tmp; te doen aangezien de bitwise and op 1 specifiek bit checkt en je dus steeds met dezelfde waarde kan blijven checken. Maar niks mis met het gebruik van de bitwise and ;)

[ Voor 24% gewijzigd door Creepy op 13-07-2007 09:09 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Bovendien werkt het helemaal niet goed, hij trekt de bit er altijd af, ookal is ie niet gezet.

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.


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Creepy schreef op vrijdag 13 juli 2007 @ 09:08:
[...]

Eeh.. hij post deze code: if (($tmp_uur & $tmp) != 0). Daar staat toch echt een bitwise AND in.

Dat optellen handiger is dan aftrekken is al genoemd. Daarnaast is het niet nodig om $tmp_uur -= $tmp; te doen aangezien de bitwise and op 1 specifiek bit checkt en je dus steeds met dezelfde waarde kan blijven checken. Maar niks mis met het gebruik van de bitwise and ;)
oops... je hebt gelijk... reageerde alleen op de reactie, zonder de quote te lezen... my mistake... excuses...

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Whoa 25 posts voor een bitcheck vraag...

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com

Pagina: 1