LoginSignup
0
0

More than 5 years have passed since last update.

問い:条件に合うようにシャッフルし並べよ

Last updated at Posted at 2017-08-07

(実際にあるわけでは)ないです。こういうプログラムを作りたくなったっていうのをまとめただけです。

LTイベントを開催することとなった。
事前に申し込みのあった100人を以下の条件に合うように並べよ。

前提0:PHPで記述すること
前提1:現在の時刻は正午である
前提2:一人の持ち時間は5分である

条件1:100人のうち、20人は午後5時に帰宅するので、それまでに全員の発表を終えること。
条件2:100人のうち、35人は午後7時に帰宅するので、それまでに全員の発表を終えること。
条件3:100人のうち、45人は最後の懇親会まで残るので、ランダムに並べること。
条件4:8人が当日飛び込みで申し込みをしてきた。4人は午後7時に帰宅するので、それまでに全員の発表を終えること。
条件5:8人が当日飛び込みで申し込みをしてきた。4人は最後の懇親会まで残るので、ランダムに並べること。

条件6:条件4と条件5はあとから並び替えられるように記述すること。

まったくどう書けばいいか思いつかん…

junban.php
<?php
//タイムゾーンを設定
date_default_timezone_set('Asia/Tokyo');

$arraylist1 = array(1,2,3,4,5);//5時組
$arraylist2 = array(6,7,8,9,10);//7時組
$arraylist3 = array(11,12,13,14,15);//一般

//要素の数を数える
$arraylist_count1 = array_count($arraylist1);
$arraylist_count2 = array_count($arraylist2);
$arraylist_count3 = array_count($arraylist3);

function array_count($count_array){
  $array_count = count($count_array);
  return $array_count;
}
echo "list count1:".$arraylist_count1."\r\n<br />";
echo "list count2:".$arraylist_count2."\r\n<br />";
echo "list count3:".$arraylist_count3."\r\n<br />";

//各組の歌唱時間合計を算出
function playtime($arraylist_count, $SPT){
  $arraylist_time_raw = $arraylist_count * $SPT;
  $arraylist_time     = sprintf("%02d時間 %02d分", floor($arraylist_time_raw/60), $arraylist_time_raw%60);
  return $arraylist_time;
}
$setting__playing_time = 5;
$nokori_list1 = playtime($arraylist_count1, $setting__playing_time);
$nokori_list2 = playtime($arraylist_count2, $setting__playing_time);
$nokori_list3 = playtime($arraylist_count3, $setting__playing_time);

echo "list1playtime:".$nokori_list1."\r\n<br />";
echo "list2playtime:".$nokori_list2."\r\n<br />";
echo "list3playtime:".$nokori_list3."\r\n<br />";

//順番をシャッフルする
$shuffled_arraylist1 = shufflearray($arraylist1);
$shuffled_arraylist2 = shufflearray($arraylist2);
$shuffled_arraylist3 = shufflearray($arraylist3);

function shufflearray($shuffled){
  shuffle($shuffled);
  return $shuffled;
}

//順番を表示する
preview($shuffled_arraylist1);
preview($shuffled_arraylist2);
preview($shuffled_arraylist3);

function preview($s_arraylist){
  echo "順番:";
  foreach($s_arraylist as $previewticket){
    echo $previewticket;
    if ($previewticket != end($s_arraylist)) {
      // 最後でなければ
      echo "→";
    }
  }
  echo "\r\n<br />";
}

//現在時刻から各組の残り時間を算出
function interval($ET){
  $currenttime_raw = new DateTime();
  $endtime_raw     = new DateTime($ET);

  $interval_raw    = $currenttime_raw->diff($endtime_raw);
  $interval        = $interval_raw->format('%R%a days %H:%I:%S');

  //return用に整形
  $currenttime     = $currenttime_raw->format('Y-m-d H:i:s');
  $endtime         = $endtime_raw->format('Y-m-d H:i:s');

  return array($currenttime, $endtime, $interval);
}

//全通組
$endtime = "2018-02-10 22:00:00";
list($currenttime, $endtime, $interval) = interval($endtime);
echo "current:".$currenttime."\r\n<br />";
echo "end:".$endtime."\r\n<br />";
echo "list3 diff:".$interval."\r\n<br />\r\n<br />";
unset($endtime);

//7時組
$endtime = "2018-02-10 19:00:00";
list($currenttime, $endtime, $interval) = interval($endtime);
echo "current:".$currenttime."\r\n<br />";
echo "end:".$endtime."\r\n<br />";
echo "list2 diff:".$interval."\r\n<br />\r\n<br />";
unset($endtime);

//5時組
$endtime = "2018-02-09 17:00:00";
list($currenttime, $endtime, $interval) = interval($endtime);
echo "current:".$currenttime."\r\n<br />";
echo "end:".$endtime."\r\n<br />";
echo "list1 diff:".$interval."\r\n<br />\r\n<br />";
unset($endtime);



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0