Advertisement
Guest User

Untitled

a guest
Nov 5th, 2010
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.47 KB | None | 0 0
  1. <?php
  2.  
  3. function inicjujSekwencje($minimum, $maximum) {
  4.     global $sekwencja;
  5.     global $dlugosc;
  6.     global $sekwIdx;
  7.     $sekwIdx = 0;
  8.     $sekwencja = range($minimum, $maximum);
  9.     $dlugosc = $maximum - $minimum + 1;
  10. }
  11.  
  12. function nastepna() {
  13.     global $dlugosc;
  14.     global $sekwencja;
  15.     global $sekwIdx;
  16.     if ($sekwIdx === $dlugosc) $sekwIdx = 0;
  17.     return $sekwencja[$sekwIdx++];
  18. }
  19.  
  20. function stworzMatryce($kolumny, $wiersze, $wartosc = null) {
  21.     return array_fill(0, $wiersze, array_fill(0, $kolumny, $wartosc));
  22. }
  23.  
  24. function prostokat_1($kolumny, $wiersze, $minimum, $maximum, $matryca) {
  25.     $x = 0;
  26.     $y = 0;
  27.     $pole = $kolumny * $wiersze;
  28.     $matryca[$y][$x] = nastepna();
  29.     $pole--;
  30.     while ( $pole ) {
  31.         while ( $pole ) {
  32.             $matryca[$y][++$x] = nastepna();
  33.             $pole--;
  34.             if ( $x == $kolumny - 1 || $matryca[$y][$x + 1] !== null ) {
  35.                 break;
  36.             }
  37.         }
  38.         while ( $pole ) {
  39.             $matryca[++$y][$x] = nastepna();
  40.             $pole--;
  41.             if ( $y == $wiersze - 1 || $matryca[$y + 1][$x] !== null ) {
  42.                 break;
  43.             }
  44.         }
  45.         while ( $pole ) {
  46.             $matryca[$y][--$x] = nastepna();
  47.             $pole--;
  48.             if ( $x == 0 || $matryca[$y][$x - 1] !== null ) {
  49.                 break;
  50.             }
  51.         }
  52.         while ( $pole ) {
  53.             $matryca[--$y][$x] = nastepna();
  54.             $pole--;
  55.             if ( $y == 0 || $matryca[$y - 1][$x] !== null ) {
  56.                 break;
  57.             }
  58.         }
  59.     }
  60.     return $matryca;
  61. }
  62.  
  63. function prostokat_2($kolumny, $wiersze, $minimum, $maximum) {
  64.     $matryca = array();
  65.     $y = $wiersze - 1;
  66.     $pole = $kolumny * $wiersze;
  67.     while ( $pole ) {
  68.         while ( $pole ) {
  69.             $matryca[$y--][] = nastepna();
  70.             $pole--;
  71.             if ( $y == 0 ) {
  72.                 $matryca[$y][] = nastepna();
  73.                 $pole--;
  74.                 break;
  75.             }
  76.         }
  77.         while ( $pole ) {
  78.             $matryca[$y++][] = nastepna();
  79.             $pole--;
  80.             if ( $y == $wiersze - 1 ) {
  81.                 $matryca[$y][] = nastepna();
  82.                 $pole--;
  83.                 break;
  84.             }
  85.         }
  86.     }
  87.     return $matryca;
  88. }
  89.  
  90. function prostokat_3($kolumny, $wiersze, $minimum, $maximum, $matryca) {
  91.     $y = $wiersze;
  92.     while ( $y-- ) {
  93.         for ($x = 0; $x < $kolumny; $x++) {
  94.             $matryca[$y][$x] = nastepna();
  95.         }
  96.         $matryca[$y] = array_reverse($matryca[$y]);
  97.     }
  98.     return $matryca;
  99. }
  100.  
  101. function wykonaj($kolumny, $wiersze, $minimum, $maximum) {
  102.     $calosc = array();
  103.     if ( $minimum === $maximum ) {
  104.         $tmp = stworzMatryce($kolumny, $wiersze, $minimum);
  105.         $calosc = array($tmp, $tmp, $tmp);
  106.     } else {
  107.         inicjujSekwencje($minimum, $maximum);
  108.         global $sekwIdx;
  109.         $matryca = stworzMatryce($kolumny, $wiersze);
  110.         $calosc[] = prostokat_1($kolumny, $wiersze, $minimum, $maximum, $matryca);
  111.         $sekwIdx = 0;
  112.         $calosc[] = prostokat_2($kolumny, $wiersze, $minimum, $maximum);
  113.         $sekwIdx = 0;
  114.         $calosc[] = prostokat_3($kolumny, $wiersze, $minimum, $maximum, $matryca);
  115.     }
  116.     $wynik = '';
  117.     foreach ($calosc as $value) {
  118.         $temp = '';
  119.         for ($i = 0; $i < $wiersze; $i++) {
  120.             $temp .= implode($value[$i]) . "\n";
  121.         }
  122.         $wynik .= $temp . "\n";
  123.     }
  124.     echo $wynik;
  125. }
  126.  
  127. function modFib($n) {
  128.     $tmp = array();
  129.     for ($i = 0, $a = $n, $b = $n; $i < $n; $i++) {
  130.         list($a, $b) = array($b, $a + $b);
  131.         $tmp[] = $a;
  132.     }
  133.     return $tmp;
  134. }
  135.  
  136. function modRot($znak, $liczbaCofniec) {
  137.     $alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  138.     $calkowitaLiczbaCofniec = stripos($alfabet, $znak) - $liczbaCofniec;
  139.     $reszta = 0;
  140.     if ( $calkowitaLiczbaCofniec < 0 ) {
  141.         $reszta = ceil(abs($calkowitaLiczbaCofniec) / 36);
  142.     }
  143.     return $alfabet{$calkowitaLiczbaCofniec + (36 * $reszta)};
  144. }
  145.  
  146. function odszyfruj($szyfr) {
  147.     $odszyfrowane = implode(array_map('modRot', str_split($szyfr), modFib(strlen($szyfr))));
  148.     preg_match('/K(\d\d?)/', $odszyfrowane, $kolumny);
  149.     preg_match('/W(\d\d?)/', $odszyfrowane, $wiersze);
  150.     preg_match('/A(\d)/', $odszyfrowane, $minimum);
  151.     preg_match('/Z(\d)/', $odszyfrowane, $maximum);
  152.     wykonaj((int)$kolumny[1], (int)$wiersze[1], (int)$minimum[1], (int)$maximum[1]);
  153. }
  154.  
  155. odszyfruj($argv[1]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement