<?php $numberOfReceipts = trim(fgets(STDIN)); //レシート枚数 $point = 0; //ポイント数の合計を求める for ($i = 0; $i < $numberOfReceipts; $i++) { // trimはget〜関数内で処理してるため不要 // これがなかったらLGTMだったのに・・・ $receipt = getLineDatasSplitedBySpace(fgets(STDIN)); $date = $receipt[0]; //日付 $price = $receipt[1]; //購入金額 //日付によって還元率を出し分け if (strstr($date, '3')) { $point += floor($price * 0.03); } elseif (strstr($date, '5')) { $point += floor($price * 0.05); } else { $point += floor($price * 0.01); } } echo $point; //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineDatas = explode(" ", $lineData); return $lineDatas; }
<?php $data = getLineDatasSplitedBySpace(fgets(STDIN)); $numberOfParams = $data[0]; //パラメータ数 $users = $data[1]; //ユーザー数 $rank = $data[2]; //トップ何番目か $params = getLineDatasSplitedBySpace(fgets(STDIN)); //ユーザースコアを求める for ($i = 0; $i < $users; $i++) { $userScore = 0; $userDatas = getLineDatasSplitedBySpace(fgets(STDIN)); // ここ若干ずるい。引数でパラメータ数は与えられているのに・・・ for ($j = 0; $j < $numberOfParams; $j++) { $userScore += $params[$j] * $userDatas[$j]; } $userScores[] = round($userScore); } rsort($userScores); //ユーザースコアを降順にソート //上位$rankのユーザースコアを出力 for ($i = 0; $i < $rank; $i++) { echo $userScores[$i] . "\n"; } //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = explode(" ", $lineData);
<?php // get〜メソッドはそのメソッド内でもtrimしているので、ここでのtrimは不要 $construction = getLineDatasSplitedBySpace(fgets(STDIN)); //[工事現場のx座標, 工事現場のy座標, 工事現場の騒音の届く距離] $shadeNum = trim(fgets(STDIN)); //木陰の数 for ($i = 0; $i < $shadeNum; $i++) { $shadeSites[] = getLineDatasSplitedBySpace(trim(fgets(STDIN))); //[木陰のx座標, 木陰のy座標] } //木陰ごとに騒音の届く距離から離れているか判定 foreach ($shadeSites as $shadeSite) { if (diffBetweenArea($shadeSite, $construction) >= pow($construction[2], 2)) { echo "silent"; } else { echo "noisy"; } echo "\n"; } //工事現場と木陰の距離の差を求める function diffBetweenArea($shadeSite, $construction) { //引数を渡していなかったので、nullになっていた。PHPは関数内でグローバル変数を参照しない $a = pow($shadeSite[0] - $construction[0], 2); $b = pow($shadeSite[1] - $construction[1], 2); $diff = $a + $b; return $diff; } //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData)
<?php $parentCard = getLineDatasSplitedBySpace(fgets(STDIN)); $cardCount = trim(fgets(STDIN)); //子カードの枚数 //子カードの生成 for ($i = 0; $i < $cardCount; $i++) { $childCards[$i] = getLineDatasSplitedBySpace(fgets(STDIN)); } //親カードと子カードの強弱を判定 foreach ($childCards as $childCard) { if ($childCard[0] < $parentCard[0]) { echo "High"; } elseif ($childCard[0] == $parentCard[0]) { if ($childCard[1] > $parentCard[1]) { echo "High"; } else { echo "Low"; } } else { echo "Low"; } echo "\n"; } //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }
<?php $recipeFoodCount = trim(fgets(STDIN)); //レシピの食材の数 for ($i = 0; $i < $recipeFoodCount; $i++) { $recipes[] = getLineDatasSplitedBySpace(fgets(STDIN)); } $possessedFoodCount = trim(fgets(STDIN)); //所持している食材の数 for ($i = 0; $i < $possessedFoodCount; $i++) { $foodstuffs[] = getLineDatasSplitedBySpace(fgets(STDIN)); } foreach ($recipes as $recipe) { $recipeName = $recipe[0]; //レシピの食材の名前 $recipeCount = $recipe[1]; //レシピの食材の量 foreach ($foodstuffs as $foodstuff) { $foodName = $foodstuff[0]; //所持している食材の名前 $foodCount = $foodstuff[1]; //所持している食材の量 //レシピ名と食材名が一致した場合、作れる量を計算 if ($recipeName == $foodName) { $amountOfMake = $foodCount / $recipeCount; if ($amountOfMake > 0) { $amountOfMakes[] = $amountOfMake; } continue; } }
<?php $splitedData = getLineDatasSplitedBySpace(fgets(STDIN)); $devidedNum = $splitedData[0]; $devideNum = $splitedData[1]; echo (int) ($devidedNum / $devideNum) . " " . $devidedNum % $devideNum; //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }
<?php $typhoonInfo = getLineDatasSplitedBySpace(fgets(STDIN)); //台風情報 $radius_1 = $typhoonInfo[2]; //円xの半径 $radius_2 = $typhoonInfo[3]; //円yの半径 $peoples = trim(fgets(STDIN)); //人数 //暴風域にいるか判定する for ($i = 0; $i < $peoples; $i++) { $coordinates = getLineDatasSplitedBySpace(fgets(STDIN)); //人の座標 $range = diffBetweenCoordinates($typhoonInfo, $coordinates); if ($range >= pow($radius_1, 2) && $range <= pow($radius_2, 2)) { echo "yes"; } else { echo "no"; } echo "\n"; } //座標の差を求める function diffBetweenCoordinates($typhoonInfo, $coordinates) { $center_X = $typhoonInfo[0]; //円xの中心座標 $center_y = $typhoonInfo[1]; //円yの中心座標 $x = $coordinates[0]; //人のx座標
<?php $period = trim(fgets(STDIN)); //期間 //始値, 終値, 高値, 安値 $keys = array(start, end, high, low); for ($i = 0; $i < $period; $i++) { $stockPrice = getLineDatasSplitedBySpace(fgets(STDIN)); $stockPrices[$i] = array_combine($keys, $stockPrice); } //期間中の始値と終値を出力 echo $stockPrices[0][start] . " "; //始値 echo $stockPrices[$period - 1][end] . " "; //終値 //期間中の高値と安値を出力 foreach ($stockPrices as $stockPrice) { $daylyHighPrices[] = max($stockPrice); $daylyLowPrices[] = min($stockPrice); } echo max($daylyHighPrices) . " "; echo min($daylyLowPrices); //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }
<?php //処理の数 $numberOfProcess = trim(fgets(STDIN)); $val1 = 0; $val2 = 0; for ($i = 0; $i < $numberOfProcess; $i++) { $inputValues = getLineDatasSplitedBySpace(fgets(STDIN)); $process = $inputValues[0]; //$processの入力値に応じて処理を実行 if (preg_match("/SET/", $process)) { if ($inputValues[1] == 1) { $val1 = $inputValues[2]; } else { $val2 = $inputValues[2]; } } elseif (preg_match("/ADD/", $process)) { $val2 = addVal($val1, $inputValues[1]); } else { $val2 = subVal($val1, $inputValues[1]); } } echo $val1 . " " . $val2; //「変数 1 の値 + a」を計算し、計算結果を変数 2 に代入する function addVal($val, $int) { $val2 = $val + $int; return $val2; } //「変数 1 の値 - a」を計算し、計算結果を変数 2 に代入する function subVal($val, $int)
<?php $hitNumbers = getLineDatasSplitedBySpace(fgets(STDIN)); //当選番号 $tickets = trim(fgets(STDIN)); //チケットの枚数 //当選した数の表示 for ($i = 0; $i < $tickets; $i++) { $ticketNumbers = getLineDatasSplitedBySpace(fgets(STDIN)); displayHitCount($hitNumbers, $ticketNumbers); } /** * 当選数表示関数 * * 引数で受け取った自分のクジの番号の配列と当選番号の配列を基に * 当たった番号の数を表示する * * @param array $hitNumbers * 当選番号の配列 * @param array $ticketNumbers * 自分のクジ番号の配列 **/ function displayHitCount($hitNumbers, $ticketNumbers) { $matchCount = 0; foreach ($hitNumbers as $hitNumber) { foreach ($ticketNumbers as $ticketNumber) { if ($hitNumber === $ticketNumber) { $matchCount++; break; //マッチしたら、ループを抜ける
<?php define("BOX_HEIGHT", 0); define("BOX_WIDTH", 1); define("BOX_DEPTH", 2); $splitedData = getLineDatasSplitedBySpace(fgets(STDIN)); // 箱の個数 $boxCount = $splitedData[0]; // ボールの半径 $ballRadius = $splitedData[1]; $diameter = $ballRadius * 2; for ($i = 1; $i <= $boxCount; $i++) { $boxDetail = getLineDatasSplitedBySpace(fgets(STDIN)); // 箱の縦、横、高さがボールの直径より大きいとき、番号を出力 if ($boxDetail[BOX_HEIGHT] >= $diameter and $boxDetail[BOX_WIDTH] >= $diameter and $boxDetail[BOX_DEPTH] >= $diameter) { echo $i . "\n"; } } /** * 空白で区切られたデータを配列で返却する * */ function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }
<?php $stocks = getLineDatasSplitedBySpace(trim(fgets(STDIN))); for ($i = 1; $i < count($stocks); $i++) { $stocks[$i] = percentToFew($stocks[$i]); } //売れ残った量を出力 $unsold = $stocks[0] - $stocks[0] * $stocks[1]; $unsold = $unsold - $unsold * $stocks[2]; echo $unsold; //%を少数に変換 function percentToFew($num) { $percent = $num / 100; return $percent; } //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }
<?php // winningNumber・・・strikeかhitじゃね? // あと配列なのでNumbersにするべき $winningNumber = getLineDatasSplitedBySpace(fgets(STDIN)); //当選番号 $tickets = trim(fgets(STDIN)); //チケットの枚数 //当選番号とチケット番号の比較 for ($i = 0; $i < $tickets; $i++) { // 代入する変数が配列になっている理由はなんで? $ticket[$i] = getLineDatasSplitedBySpace(fgets(STDIN)); // ◆課題 // array_intersectを使わないで解く $matchNums[] = array_intersect($winningNumber, $ticket[$i]); // この辺でcountをechoすりゃ良くね? // わざわざ下のほうでループさせる分処理がムダ } //マッチした数の出力 foreach ($matchNums as $matchNum) { echo count($matchNum) . "\n"; } //空白で区切られたデータを配列で返却する function getLineDatasSplitedBySpace($lineData) { $lineData = trim($lineData); $lineDatas = split(" ", $lineData); return $lineDatas; }