[ create a new paste ] login | about

Project: pajtai
Link: http://pajtai.codepad.org/z3Usv5U7    [ raw code | output | fork ]

pajtai - PHP, pasted on Aug 27:
<?php

      // Size of edge of matrix
    define("SIZE", 8);

      // Create empty array
    $array = array();

      // Fill array with a spiral.
    fillerUp($array);

    // Start at 0 / 0  and recurse
    function fillerUp(& $array, $x = 0, $y = 0, $count = 1, $direction = "right")
    {
          // Insert value
        $array[$x][$y] = $count;
        
          // Try to insert next value. Stop if matrix is full.
        switch ($direction)
        {
        case "right":        
            if (! $array[($x + 1) % SIZE][$y])
                fillerUp($array, $x + 1, $y, ++$count, "right");
            elseif (! $array[$x][($y + 1) % SIZE])
                fillerUp($array, $x, $y + 1, ++$count, "down");        
            break;
        case "down":  
            if (! $array[$x][($y + 1) % SIZE])
                fillerUp($array, $x, $y + 1, ++$count, "down");
            elseif (! $array[($x - 1) % SIZE][$y])
                fillerUp($array, $x - 1, $y, ++$count, "left");        
            break;        
        case "left":   
            if (! $array[abs(($x - 1) % SIZE)][$y])
                fillerUp($array, $x - 1, $y, ++$count, "left");
            elseif (! $array[$x][abs(($y - 1) % SIZE)])
                fillerUp($array, $x, $y - 1, ++$count, "up");        
            break;
        case "up":                   
            if (! $array[$x][abs(($y - 1) % SIZE)])
                fillerUp($array, $x, $y - 1, ++$count, "up");        
            elseif (! $array[($x + 1) % SIZE][$y])
                fillerUp($array, $x + 1, $y, ++$count, "right");            
            break;    
        }
    }

    // Show answer.
    for ($y = 0; $y < SIZE; ++$y)
    {
        for ($x = 0; $x < SIZE; ++$x)    
        {
            echo str_pad($array[$x][$y], 4, " ", STR_PAD_BOTH);
        }
        echo "\n";
    }
    ?>


Output:
1
2
3
4
5
6
7
8
 1   2   3   4   5   6   7   8  
 28  29  30  31  32  33  34  9  
 27  48  49  50  51  52  35  10 
 26  47  60  61  62  53  36  11 
 25  46  59  64  63  54  37  12 
 24  45  58  57  56  55  38  13 
 23  44  43  42  41  40  39  14 
 22  21  20  19  18  17  16  15 


Create a new paste based on this one


Comments: