Contact Registreren Bezoekers Programmeertips

Huidige bezoekers: 1 gast
Welkom op mijn website, kom nog eens terug
Employee Work Schedule

Employee Work Schedule
Only $22


For scheduling employees and/or spaces or you can use it as a multi-calendar.
Nieuw bericht toevoegen

BERICHT TOEVOEGEN




ga naar het berichtenarchief

Berichtenarchief

(219 ~ 10 privƩ)
ga naar het berichtenarchief


calendar solution

MySQL Datagenerator
Only $15


Generate real-life testdata
and import directly into your database or export to SQL, CSV, JSON or PHP array ..
avatar

PHP calculator

Paul Wolbers | 22-03-2010 | programmeren |
 reageer op dit bericht

Deze calculator heb ik als oefening gemaakt in de tweede week van de opleiding. (medio 2007) Als ik het nu (begin 2009) nog eens zou moeten doen, zou ik het heel anders doen, nl. met ajaxcalls of helemaal met javascript.
avatar

PHP script voor het oplossen van een Magic square met afbeeldingen

Paul Wolbers | 26-01-2010 | programmeren |
 reageer op dit bericht

Het doel van het spel is om de 9 kaarten zo neer te leggen dat de (halve) afbeeldingen op de kaarten matchen met de (halve) afbeelding op de kaart die er naast ligt (en onder) ligt. Er staan 4 verschillende afbeeldingen verdeeld over de kaarten. De kaarten kunnen ook steeds een kwartslag gedraaid worden.
Tips die mij verder hielpen

1 - Geef de vier halve plaatjes op elke kaart een nummer van 1 t/m 8 in de volgende combinaties: 1/8, 2/7, 3/6, 4/5. Dit betekent dat als de som van de twee naast elkaar liggende kaarten 9 is, de kaarten goed liggen.

2 - Begin met alle mogelijkheden voor de eerste kaart in een array te zetten. Daarna ga je bij al deze mogelijkheden een tweede kaart zoeken. Als er bij de eerste kaart geen tweede gevonden kan worden verwijder je die mogelijkheid uit de array. Dan op zoek naar de derde kaart.

Eerste poging:
Mijn eerste poging was om te beginnen met een willekeurige kaart, daar een tweede bij te zoeken (de eerste die klopte), dan een derde kaart erbij zoeken enzovoort. Het was dan mijn bedoeling om als er geen kaart meer gevonden werd die klopte een stap terug te gaan en daar een andere kaart bij te zoeken en dan weer verder te gaan. Je zou dan vanzelf steeds verder terug gaan en uiteindelijk de juiste combinatie krijgen. In theorie moet het lukken, ik raakte alleen al gauw verstrikt in de if-jes en je zou een heleboel gegevens moeten gaan onthouden zodat je weet welke stap je bent en waar je naar toe moet als je geen match vindt. Na een vijftal avonden heb ik dit maar opgegeven.

Brute Force:
Alle mogelijke kaartcombinaties (300 miljard ofzo) langs gaan en steeds controleren of de kanten die moeten matchen inderdaad matchen. Het was nodig om de timelimit en de memorylimit zo hoog mogelijk te zetten en dan nog ging het niet goed. Na 2,5 uur was het script klaar, maar de browser kon het niet aan en crashte.

Derde poging:
Met tip 2 in gedachten weer met frisse moed begonnen. Dit bleek de gouden tip te zijn, want hiermee lukte het. Het was nog wel een heel gedoe om de array zo te krijgen dat ik er gemakkelijk mee kon werken en om de rotaties te vertalen naar code, maar het resultaat was goed.

De oplossing wordt verbluffend snel gevonden. In 0.1 seconde heeft het script ontdekt wat de goede combinatie is. Eigenlijk zijn er 4 combinaties mogelijk, maar dat zijn dezelfde alleen anders geroteerd.
Oplossing Magic Square

Bij een andere gelijksoortige puzzel zijn er 4 oplossingen, dit komt omdat er twee kaarten identiek zijn.
avatar

Paul Wolbers | 14-01-2010 | programmeren |
 reageer op dit bericht

De items moeten van boven naar beneden toegevoegd worden.
Voorbeeld:
Item 1    Item 4     Item 7
Item 2    Item 5     Item 8
Item 3    Item 6


Je zou denken dat een tabel de oplossing is. Dat is het echter niet ... Een tabel wordt nl. van links naar rechts opgebouwd, dat betekent dus dat als de itemvolgorde van boven naar beneden moet lopen, je de itemvolgorde al in de array moet aanpassen voordat je ze in de tabel stopt. Dat kan wel maar is lastig.

Een andere mogelijkheid is div-jes gebruiken. (Met float:left kun je de kolommen naast elkaar plaatsen) Deze kun je wel van boven naar beneden vullen. Het enige dat je dan moet weten is welk item in een div de laatste moet zijn. Zodat je de met de volgende kolom kunt beginnen.

Ik heb de mogelijkheden op een rijtje gezet, met willekeurige aantallen items en willekeurige aantallen kolommen en toen bleek er een bepaalde regelmaat in te zitten.

Codefragment PHP:
$cnt_columns = $arr_display_options['faq_nr_columns'];
$cnt_items = count($arr_categories);       
       
foreach($arr_categories as $key => &$cat) {
  $obj_faq_question     = new FaqItem();           
    $obj_faq_question->set_faq_id($obj_repository_item->get_Item_id());
    $obj_faq_question->setCat_id($cat['cat_id']);
            
    $cat['cnt_questions']    = $obj_faq_question->find(true);
           
    if($cnt_columns == 2) {
        if(   $key == ($cnt_items - 1)/2 ) {
            $cat['column_close'] = true;
        }
    }
    if($cnt_columns == 3) {
        if(   $key == floor(($cnt_items - 1)/3) OR  $key == ($cnt_items - 1) - floor($cnt_items/3) ) {
            $cat['column_close'] = true;
        }
    }
    if($cnt_columns == 4) {
        $rest = $cnt_items % 4;
        $sec_key = ($rest > 1) ? floor(($cnt_items - 1)/4)+floor($cnt_items/4)+1 : floor(($cnt_items - 1)/4)+floor($cnt_items/4);
       
        if(   $key == floor(($cnt_items - 1)/4) OR  $key == $sec_key OR  $key == ($cnt_items - 1) - floor($cnt_items/4) ){
            $cat['column_close'] = true;
        }
    }
}

?>


Codefragment template:
avatar

Paul Wolbers | 25-11-2009 | programmeren |
 reageer op dit bericht


avatar

AppCRM

Paul Wolbers | 25-10-2009 | programmeren |
 reageer op dit bericht

Een applicatie waarmee App klanten, organisaties, opdrachten, licentieadministratie e.d. kan worden bijgehouden.
avatar

Stageopdracht

Paul Wolbers | 25-10-2009 | programmeren |
 reageer op dit bericht

Mijn opdracht was AppReport verder oppakken......
avatar

Textwrapper

Paul Wolbers | 25-10-2009 | programmeren |
 reageer op dit bericht

Functie die tekst omvormt in kolomtekst. Aantal kolommen, breedte van kolommen en max. aantal regels kunnen worden opgegeven.


Voorbeeld aanroep functie: $string = String::textwrap($string, '', 33, 3, 1);

Parameters: string, div-breedte, aantal letters op regel, aantal regels, aantal kolommen, lettertype, lettergrootte.




Berichten printen