○問題文http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1240
○解説文字列sがs'に変換され、s'が入力として与えられます。
なのでその逆の変換をしてあげればよいです。
文字列mの長さが奇数の場合、strlen($m) / 2の値は整数にならないのでキャストしてやる必要があります。
○提出したコード<?php
fscanf(STDIN, "%d", $n);
while ($n--) {
fscanf(STDIN, "%s", $o);
fscanf(STDIN, "%s", $m);
$o = strrev($o);
for ($i = 0; $i < strlen($o); $i++) {
$ch = $o[$i];
if ($ch == 'J') {
$m = substr($m, strlen($m) - 1) . substr($m, 0, strlen($m) - 1);
} else if ($ch == 'C') {
$m = substr($m, 1) . substr($m, 0, 1);
} else if ($ch == 'E') {
if (strlen($m) % 2) {
$m = substr($m, (int)(strlen($m) / 2) + 1) . $m[(int)(strlen($m) / 2)] . substr($m, 0, (int)(strlen($m) / 2));
} else {
$m = substr($m, strlen($m) / 2) . substr($m, 0, strlen($m) / 2);
}
} else if ($ch == 'A') {
$m = strrev($m);
} else if ($ch == 'P') {
for ($j = 0; $j < strlen($m); $j++) {
if (is_numeric($m[$j])) {
$m[$j] = (string)(((int)$m[$j] - 1 + 10) % 10);
}
}
} else if ($ch == 'M') {
for ($j = 0; $j < strlen($m); $j++) {
if (is_numeric($m[$j])) {
$m[$j] = (string)(((int)$m[$j] + 1) % 10);
}
}
}
}
print $m . "\n";
}