2013年4月14日日曜日

php; ビンゴカードを生成するにゃ?

php-5.4でビンゴカードを生成するにゃ?
以上・w・

<?php

print_r(generate_bingo_card());
exit(0);

final class conf
{
  const bingo_number_min =   1;
  const bingo_number_max = 100;
  const bingo_size       =   5;
  const bingo_free       = true;
}

function mt_shuffle(Array &$a)
{
  $p = function($p, $q)
    { return mt_rand() - (mt_getrandmax() >> 1); };
  return usort($a, $p);
}

function generate_bingo_card()
{
  // generate a cell numbers
  $bingo_numbers = range
    ( conf::bingo_number_min
    , conf::bingo_number_max
    );
  mt_shuffle($bingo_numbers);
  $bingo_size_sq = conf::bingo_size * conf::bingo_size;
  $card_numbers = array_slice
    ( $bingo_numbers
    , 0
    , $bingo_size_sq
    );
  
  // define cell coordinate generators
  $fa = function($a){ return       $a % conf::bingo_size ; };
  $fb = function($b){ return (int)($b / conf::bingo_size); };
  
  // generate cells
  $card = array_map
    ( null
    , array_map($fa, range(0, $bingo_size_sq - 1))
    , array_map($fb, range(0, $bingo_size_sq - 1))
    , $card_numbers
    );
  
  // set free cell
  if(conf::bingo_free)
    $card[$bingo_size_sq >> 1][2] = 0;
  
  return $card;
}

サンプルを見れば特に解説の必要な事も無かろ?ヽ(´ー`)ノ

強いて言えばarray_map()の応用くらいじゃろうか。

0 件のコメント:

コメントを投稿