Beispiel #1
0
<?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;
}
Beispiel #2
0
<?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--) {
Beispiel #3
0
<?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
 */
Beispiel #4
0
// トランプの番号を保持する配列
$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";
}
/**
 * めくったトランプがマッチしているか判定する
 *
Beispiel #5
0
<?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;
Beispiel #6
0
<?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++;
            }
        }
    }
}
// 各ブロックの平均値を出力する