結果
問題 | No.48 ロボットの操縦 |
ユーザー | sorch |
提出日時 | 2020-12-27 17:54:18 |
言語 | PHP (8.3.4) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,813 bytes |
コンパイル時間 | 1,281 ms |
コンパイル使用メモリ | 30,996 KB |
実行使用メモリ | 31,096 KB |
最終ジャッジ日時 | 2024-10-01 17:20:37 |
合計ジャッジ時間 | 3,275 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 42 ms
30,980 KB |
testcase_01 | AC | 42 ms
30,664 KB |
testcase_02 | WA | - |
testcase_03 | AC | 42 ms
30,796 KB |
testcase_04 | AC | 43 ms
30,896 KB |
testcase_05 | AC | 42 ms
30,820 KB |
testcase_06 | AC | 42 ms
30,680 KB |
testcase_07 | AC | 42 ms
30,728 KB |
testcase_08 | AC | 43 ms
30,904 KB |
testcase_09 | AC | 42 ms
30,648 KB |
testcase_10 | AC | 42 ms
30,856 KB |
testcase_11 | AC | 42 ms
30,800 KB |
testcase_12 | AC | 42 ms
30,656 KB |
testcase_13 | AC | 42 ms
30,480 KB |
testcase_14 | AC | 42 ms
30,740 KB |
testcase_15 | AC | 43 ms
30,972 KB |
testcase_16 | AC | 37 ms
30,776 KB |
testcase_17 | AC | 35 ms
30,864 KB |
testcase_18 | AC | 35 ms
30,616 KB |
testcase_19 | AC | 34 ms
30,836 KB |
testcase_20 | AC | 34 ms
30,844 KB |
testcase_21 | AC | 34 ms
30,500 KB |
testcase_22 | AC | 40 ms
30,700 KB |
testcase_23 | AC | 36 ms
30,688 KB |
testcase_24 | AC | 35 ms
30,576 KB |
コンパイルメッセージ
No syntax errors detected in Main.php
ソースコード
<?php /** * @see https://yukicoder.me/problems/75 */ // main $X = trim(fgets(STDIN)); $Y = trim(fgets(STDIN)); $L = trim(fgets(STDIN)); $robot = new Robot($L); $ret = $robot->move($X, $Y); echo $ret . "\n"; class Robot { /** @var array 現在いる座標*/ private $position; /** @var string 現在向いている方向*/ private $orientation; /** @var integer 一回の前進で移動できる最大値 */ private $maxMigrationLength; /** @var RegisterExecHistoryCommand */ private $RegisterExecHistoryCommand; public function __construct(int $maxMigrationLength) { $this->position = [0, 0]; $this->orientation = Direction::NORTH; $this->maxMigrationLength = $maxMigrationLength; } /** * 指定された座標に移動する * * @param integer $x * @param integer $y * @return void */ public function move(int $x, int $y): int { $positionType = $this->getPositionType($x, $y); switch ($positionType) { case PositonType::ZERO: return 0; case PositonType::ON_X: return $this->calcCntExceed($x) + 1; case PositonType::ON_Y: return $this->calcCntExceed($y) + (($y > 0) ? 0 : 1); case PositonType::FIRST_QUADRANT: case PositonType::SECOND_QUADRANT: return $this->calcCntExceed($x) + $this->calcCntExceed($y) + 1; case PositonType::THIRD_QUADRANT: case PositonType::FOURTH_QUADRANT: return $this->calcCntExceed($x) + $this->calcCntExceed($y) + 2; } } private function calcCntExceed($num) { return ceil(abs($num) / $this->maxMigrationLength); } private function getPositionType(int $x, int $y): int { if ($x == 0 && $y == 0) { return PositonType::ZERO; } elseif ($x != 0 && $y == 0) { return PositonType::ON_X; } elseif ($x == 0 && $y != 0) { return PositonType::ON_Y; } elseif ($x > 0 && $y > 0) { return PositonType::FIRST_QUADRANT; } elseif ($x < 0 && $y > 0) { return PositonType::SECOND_QUADRANT; } elseif ($x < 0 && $y < 0) { return PositonType::THIRD_QUADRANT; } elseif ($x > 0 && $y < 0) { return PositonType::FOURTH_QUADRANT; } } } class PositonType { public const FIRST_QUADRANT = 1; public const SECOND_QUADRANT = 2; public const THIRD_QUADRANT = 3; public const FOURTH_QUADRANT = 4; public const ON_X = 5; public const ON_Y = 6; public const ZERO = 7; } class Direction { public const NORTH = 0; public const SOUTH = 1; public const EAST = 2; public const WEST = 3; }