Tråd: Fizzbuzz!
View Single Post
Prøvde å løse denne oppgaven på lignende måte som jeg prøvde i "Hello World"-tråden. Har brukt PHP, siden det er det språket jeg har arbeidet mest med (kun på amatørplan).

http://freak.no/forum/attachment.php?attachmentid=10994&stc=1&d=1390233659

Har her laget et bilde på 500 x 500 piksler, som består av 10 x 10 kvadrater. Disse kvadratene representerer tallene fra 1 til 100, henholdvis fra venstre mot høyre, og fra topp til bunn.

Fargene betyr:
gul: et "vanlig" tall, skal vises som seg selv
svart: er delelig på 3, skal vises som "fizz"
grønn: er delelig på 5, skal vises som "buzz"
blå: er delelig både på 3 og 5, skal vises som "fizzbuzz"

Koden nedenfor finner fargene på kvadratene, og gjør dette om til enten fizz, buzz, fizzbuzz eller lar tallet stå. Funker fint hos meg, men kan sikkert bli skrevet på en penere måte.

Har lagt inn kommentarer underveis i koden.

Kode

<?php
//husker ikke helt hvor jeg opprinneling fant denne funksjonen, men har i hvert fall ikke skrevet den selv
function rgb2hex($r, $g, $b){
    $r=dechex($r);
    if (strlen($r)<2)
    $r='0'.$r;

    $g=dechex($g);
    if (strlen($g)<2)
    $G='0'.$g;

    $b=dechex($b);
    if (strlen($b)<2)
    $b='0'.$b;

    return $r . $g . $b;
}


// henter inn bildefilen og finner dimensjonene. 
$image = 'image.png';
list($width, $height) = getimagesize($image);


// sjekker om bildet er kvadratisk - hvis ja: går ut fra at bildet er delt opp i 10 like deler per lengde, og finner hvor mange pixler man må flytte seg for å komme til neste del
if ($width == $height) {
	$step = $width / 10;
	}
else {
	die("Bildet er ikke kvadratisk.");
	}


// $xcor og $yxor = koordinatene på bildefila
// $x teller antall ganger loopen kjøres
// $y teller hvor mange ganger $xcor har oversteget bildets bredde
$image = imagecreatefrompng($image);
$xcor = $step - 1;
$ycor = 0;
$x = 1; 
$y = 1; 



while($x<=100)
    {
    
    // sjekker om X-koordinatet er større en bildets bredde, og øker Y-koordinatet hvis det er tilfelle
    if ($xcor >= $width) {
	    $xcor = $step - 1;
	    $ycor = $step * $y;
	    $y++;
	    }
    
    
	// array med hexadesimaler og tilhørende navn
    $hex = array("00000", "008040", "000ff");
    $txt = array("fizz", "buzz", "fizzbuzz");
    
    
    // finner RGB-verdien utifra koordinatene, gjør om til hexadesimaler og endrer til navnene i arrayet overfor
    $rgb = imagecolorat($image, $xcor, $ycor);
    $output = str_replace($hex, $txt, (rgb2hex(($rgb >> 16) & 0xFF, ($rgb >> 8) & 0xFF, $rgb & 0xFF)));
    
    
    // echoer $x (antall ganger loopen har kjørt) hvis feltet er gult. Ellers echoes navnet som er funnet overfor
    if ($output != "ffff00") {
	    echo $output;
	    }
    else {
	    echo $x;
	    }
    
    echo '<br />';
    
    
    // finner nytt X-koordinatet og looper koden
    $xcor = $xcor + $step;
    $x++;
    } 

?>