【Aランクレベルアップメニュー】> 【座標系での向きの変わる移動】STEP: 4 座標系での規則的な移動 (paizaランク B 相当) [難易度: 1830 ±12]
※リンク先へ移動するためには[paiza]へのログインが必要です。

開始時点の x , y 座標と移動の歩数 N が与えられます。
以下の図のように時計回りに渦を巻くように移動を N 歩行った後の x , y 座標 を答えてください。
なお、マスの座標系は下方向が y 座標の正の向き、右方向が x 座標の正の向きとします。

入力値(例)
0 0 3
出力値(例)
0 1
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php list($x, $y, $n) = explode(" ", trim(fgets(STDIN))); //右下左上 $dx = [1, 0, -1, 0]; $dy = [0, 1, 0, -1]; list($k, $step, $counter) = [0, 1, 0]; while ($n > 0) { $x += min($n, $step) * $dx[$k]; $y += min($n, $step) * $dy[$k]; $n -= $step; $counter++; if ($counter == 2) { $counter = 0; $step++; } $k = ($k + 1) % 4; } echo sprintf("%d %d\n", $x, $y); ?> |

感想
またまたpaizaの森の解答を参考にさせていただきました。ぐるぐるが難しかったです。(*'ω'*)