<?php $cardData = getLineDataSplitedBySpace(fgets(STDIN)); $pocketNumber = $cardData[0]; // ポケットの数 $cardNumber = $cardData[1]; // カードの番号 $backCardNumber = 0; // 裏側のカードの番号 // 下のような配列でやればよかった.. // [1, 2, 3] // [6, 5, 4] $binderNumber = ceil($cardNumber / $pocketNumber); // カードが入っているバインダーの番号 $lastOrder = $pocketNumber - 1; // ポケット内の最後のカードの順番 if ($binderNumber % 2 == 0) { // カードの入ったバインダーが偶数の場合 $backBinderNumber = $binderNumber - 1; $cardOrder = $pocketNumber * $binderNumber % $cardNumber; // ポケット内のカードの順番 $maxNumber = $pocketNumber * $backBinderNumber; $backCardNumber = $maxNumber - ($lastOrder - $cardOrder); } else { // カードの入ったバインダーが奇数の場合 $backBinderNumber = $binderNumber + 1; $cardOrder = ($cardNumber - 1) % $pocketNumber; // ポケット内のカードの順番 $maxNumber = $pocketNumber * $backBinderNumber; $backCardNumber = $maxNumber - $cardOrder; }
<?php $coordinates = getLineDataSplitedBySpace(fgets(STDIN)); $x = $coordinates[0]; // x座標 $y = $coordinates[1]; // y座標 $z = $coordinates[2]; // z座標 for ($i = 0; $i < $z; $i++) { // 正面から立方体を見た図 $cubeFromFrontView = ""; for ($j = 0; $j < $y; $j++) { $cubeFromFrontView .= "."; } for ($j = 0; $j < $x + 1; $j++) { $cubeData = trim(fgets(STDIN)); // y軸方向に並んだ立方体の配置データ if ($cubeData === "--") { break; } // x軸の手前に立方体が存在する場合、正面からも立方体が見える for ($k = 0; $k < $y; $k++) { if ($cubeFromFrontView[$k] == "." && $cubeData[$k] == "#") { $cubeFromFrontView[$k] = "#"; } } } $cubeFromFrontViews[$i] = $cubeFromFrontView; } for ($i = count($cubeFromFrontViews) - 1; 0 <= $i; $i--) {
<?php $splitedData = getLineDataSplitedBySpace(fgets(STDIN)); $membership = $splitedData[0]; // 会員数 $numOfLives = $splitedData[1]; // ライブ数 $maximumAnnualSales = 0; // 年間最高売上 for ($i = 0; $i < $numOfLives; $i++) { $sales = getLineDataSplitedBySpace(fgets(STDIN)); // ライブ1回の売上データ配列 $sale = 0; // 1人あたりの売上 $totalSalesPerLive = 0; // ライブ1回の総売上 // ライブ1回の総売上を算出 foreach ($sales as $sale) { $totalSalesPerLive += $sale; } // 総売上が0以上の場合、年間売上に加算 if ($totalSalesPerLive >= 0) { $maximumAnnualSales += $totalSalesPerLive; } } echo $maximumAnnualSales; /** * 空白で区切られたデータを配列で返却する * * @param array $lineData */
// トランプの番号を保持する配列 $matchedTrumpOfPlayers = []; // プレイヤーごとにマッチしたトランプの数を保持する配列 // トランプの配置情報をトランプ配列に代入 for ($i = 0; $i < $numOfColsTrump; $i++) { $trump[$i] = getLineDataSplitedBySpace(fgets(STDIN)); } // $matchedTrumpOfPlayers配列の初期化 for ($i = 0; $i < $numOfPlayer; $i++) { $matchedTrumpOfPlayers[$i] = 0; } $turn = trim(fgets(STDIN)); $currentPlayer = 0; // 現在のプレイヤー for ($i = 0; $i < $turn; $i++) { $turnOverTrumps = getLineDataSplitedBySpace(fgets(STDIN)); // めくったトランプ $matchFlag = checkMatchTrumpNumber($turnOverTrumps, $trump); if ($matchFlag) { $matchedTrumpOfPlayers[$currentPlayer] += 2; } else { $playerCounter++; $currentPlayer = $playerCounter % $numOfPlayer; } } foreach ($matchedTrumpOfPlayers as $matchedTrumpOfPlayer) { echo $matchedTrumpOfPlayer . "\n"; } /** * めくったトランプがマッチしているか判定する *
<?php // 親のカード $parentCard = getLineDataSplitedBySpace(fgets(STDIN)); // 子の情報 $childrenCount = trim(fgets(STDIN)); for ($i = 0; $i < $childrenCount; $i++) { // 子のカード $childCard = getLineDataSplitedBySpace(fgets(STDIN)); judge($parentCard, $childCard); } // High and Lowの判定 function judge($parentCard, $childCard) { $result = "Low"; // 親の1枚目のほうが子の1枚目より // 親の1枚目と子の1枚目が同じとき、親の2枚目が子の2枚目より小さい if ($parentCard[0] > $childCard[0] || $parentCard[0] === $childCard[0] && $parentCard[1] < $childCard[1]) { $result = "High"; } echo $result . "\n"; } /** * 空白で区切られたデータを配列で返却する * */ function getLineDataSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas;
<?php $imageData = getLineDataSplitedBySpace(fgets(STDIN)); $numOfPixelLine = $imageData[0]; // 一辺のpixelの数 $ratio = $imageData[1]; $pixelPerRatio = $numOfPixelLine / $ratio; for ($i = 0; $i < $numOfPixelLine; $i++) { $pixels[] = getLineDataSplitedBySpace(fgets(STDIN)); } $newPixels = []; // 新しく生成するpixel配列 $blocks = []; // pixelをひとまとめにした配列 // まずpixelを横に等分したブロックを作る $blocks = array_chunk($pixels, $ratio); // pixelを縦に等分する foreach ($blocks as $row => $block) { for ($i = 0; $i < $ratio; $i++) { $pos = 0; // ブロックの合計値を$newPixelsに格納 for ($j = 0; $j < $numOfPixelLine; $j++) { $newPixels[$row][$pos] += $block[$i][$j]; // $ratioで割り切れたら次のブロックなので、$newPixelsの添字を更新 if (($j + 1) % $ratio == 0) { $pos++; } } } } // 各ブロックの平均値を出力する