From c0c0cc19b2c17028a86d4a49868b4f1404d34291 Mon Sep 17 00:00:00 2001 From: klarkxy <278370456@qq.com> Date: Sun, 12 Apr 2026 12:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E4=BC=98=E5=8C=96=E6=A0=B7?= =?UTF-8?q?=E4=BE=8B=E8=BE=93=E5=85=A5=E8=BE=93=E5=87=BA=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=B9=B6=E5=A2=9E=E5=BC=BA=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/template/syzoj/problem.php | 191 ++++++++++++++++++++++++--------- 1 file changed, 139 insertions(+), 52 deletions(-) diff --git a/web/template/syzoj/problem.php b/web/template/syzoj/problem.php index 31a7460..d766080 100644 --- a/web/template/syzoj/problem.php +++ b/web/template/syzoj/problem.php @@ -254,41 +254,139 @@ if ($pr_flag) { ", ">", $sinput); - $soutput = str_replace("<", "<", $row['sample_output']); - $soutput = str_replace(">", ">", $soutput); + function normalize_sample_text($text) + { + return str_replace(array("\r\n", "\r"), "\n", (string)$text); + } + + function trim_sample_chunk($text) + { + return trim(normalize_sample_text($text), "\n"); + } + + function compact_sample_chunks($chunks) + { + $result = array(); + foreach ($chunks as $chunk) { + $chunk = trim_sample_chunk($chunk); + if ($chunk !== '') { + $result[] = $chunk; + } + } + return $result; + } + + function split_sample_chunks_with_pattern($text, $pattern) + { + $chunks = preg_split($pattern, normalize_sample_text($text)); + if ($chunks === false) { + return array(); + } + return compact_sample_chunks($chunks); + } + + function build_sample_pairs($input, $output) + { + $input = normalize_sample_text($input); + $output = normalize_sample_text($output); + if ($input === '' || $output === '') { + return array(); + } + + $patterns = array( + '/^\s*(?:sample|example|样例)\s*\d+\s*$/imu', + '/^\s*(?:[-=*_]{3,})\s*$/m', + "/\n\s*\n/" + ); + + foreach ($patterns as $pattern) { + $inputChunks = split_sample_chunks_with_pattern($input, $pattern); + $outputChunks = split_sample_chunks_with_pattern($output, $pattern); + + if (count($inputChunks) > 1 && count($inputChunks) === count($outputChunks)) { + $pairs = array(); + for ($index = 0; $index < count($inputChunks); $index++) { + $pairs[] = array( + 'input' => $inputChunks[$index], + 'output' => $outputChunks[$index] + ); + } + return $pairs; + } + } + + return array(); + } + + function format_sample_code($text) + { + return htmlspecialchars(trim_sample_chunk($text), ENT_NOQUOTES, 'UTF-8'); + } + + function format_sample_attr($text) + { + return htmlentities(trim_sample_chunk($text), ENT_QUOTES, 'UTF-8'); + } + + $sampleInputText = normalize_sample_text($row['sample_input']); + $sampleOutputText = normalize_sample_text($row['sample_output']); + $samplePairs = build_sample_pairs($sampleInputText, $sampleOutputText); + $showSampleIndex = count($samplePairs) > 1; + $singleSampleInput = trim_sample_chunk($sampleInputText); + $singleSampleOutput = trim_sample_chunk($sampleOutputText); ?> - 0 && $sinput != "\n" || isset($_GET['spa'])) { ?> -
+
+ $samplePair) { ?>
+
+
-
+
+
+
+