From 432baae1b49343ea780793330149a285a53bbdc7 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 21 Mar 2025 15:11:30 +0900 Subject: wip --- frontend/app/.server/auth.ts | 2 +- frontend/app/components/GolfPlayApp.tsx | 2 +- frontend/app/routes/golf.$gameId.play.tsx | 28 +-- frontend/app/routes/golf.$gameId.watch.tsx | 30 +-- q-remove-labels.sql | 3 + q1.sql | 14 +- q2.sql | 307 +++++++++++++---------------- q3.sql | 104 ++++++++-- q4.sql | 245 ++++++++++++++--------- 9 files changed, 416 insertions(+), 319 deletions(-) create mode 100644 q-remove-labels.sql diff --git a/frontend/app/.server/auth.ts b/frontend/app/.server/auth.ts index d56c193..3e24638 100644 --- a/frontend/app/.server/auth.ts +++ b/frontend/app/.server/auth.ts @@ -1,4 +1,4 @@ -import { jwtDecode, type JwtPayload } from "jwt-decode"; +import { type JwtPayload, jwtDecode } from "jwt-decode"; import { redirect } from "react-router"; import { Authenticator } from "remix-auth"; import { FormStrategy } from "remix-auth-form"; diff --git a/frontend/app/components/GolfPlayApp.tsx b/frontend/app/components/GolfPlayApp.tsx index 9ba3818..e74edc7 100644 --- a/frontend/app/components/GolfPlayApp.tsx +++ b/frontend/app/components/GolfPlayApp.tsx @@ -68,7 +68,7 @@ export default function GolfPlayApp({ game, player, initialGameState }: Props) { console.log("player:c2s:submit"); handleSubmitCodePre(); await apiClient.postGamePlaySubmit(game.game_id, code); - await new Promise((resolve) => setTimeout(resolve, 2000)); + await new Promise((resolve) => setTimeout(resolve, 1000)); handleSubmitCodePost(); }, 1000, diff --git a/frontend/app/routes/golf.$gameId.play.tsx b/frontend/app/routes/golf.$gameId.play.tsx index 8f41257..d9907aa 100644 --- a/frontend/app/routes/golf.$gameId.play.tsx +++ b/frontend/app/routes/golf.$gameId.play.tsx @@ -1,7 +1,7 @@ import { Provider as JotaiProvider, createStore } from "jotai"; import { useMemo } from "react"; import type { LoaderFunctionArgs, MetaFunction } from "react-router"; -import { useLoaderData } from "react-router"; +import { redirect, useLoaderData } from "react-router"; import { ensureUserLoggedIn } from "../.server/auth"; import { ApiClientContext, createApiClient } from "../api/client"; import GolfPlayApp from "../components/GolfPlayApp"; @@ -20,17 +20,21 @@ export async function loader({ params, request }: LoaderFunctionArgs) { const gameId = Number(params.gameId); - const [{ game }, { state: gameState }] = await Promise.all([ - apiClient.getGame(gameId), - apiClient.getGamePlayLatestState(gameId), - ]); - - return { - apiToken: token, - game, - player: user, - gameState, - }; + try { + const [{ game }, { state: gameState }] = await Promise.all([ + apiClient.getGame(gameId), + apiClient.getGamePlayLatestState(gameId), + ]); + + return { + apiToken: token, + game, + player: user, + gameState, + }; + } catch { + throw redirect("/dashboard"); + } } export default function GolfPlay() { diff --git a/frontend/app/routes/golf.$gameId.watch.tsx b/frontend/app/routes/golf.$gameId.watch.tsx index 07e8c9e..556eb03 100644 --- a/frontend/app/routes/golf.$gameId.watch.tsx +++ b/frontend/app/routes/golf.$gameId.watch.tsx @@ -1,7 +1,7 @@ import { Provider as JotaiProvider, createStore } from "jotai"; import { useMemo } from "react"; import type { LoaderFunctionArgs, MetaFunction } from "react-router"; -import { useLoaderData } from "react-router"; +import { redirect, useLoaderData } from "react-router"; import { ensureUserLoggedIn } from "../.server/auth"; import { ApiClientContext, createApiClient } from "../api/client"; import GolfWatchApp from "../components/GolfWatchApp"; @@ -20,18 +20,22 @@ export async function loader({ params, request }: LoaderFunctionArgs) { const gameId = Number(params.gameId); - const [{ game }, { ranking }, { states: gameStates }] = await Promise.all([ - await apiClient.getGame(gameId), - await apiClient.getGameWatchRanking(gameId), - await apiClient.getGameWatchLatestStates(gameId), - ]); - - return { - apiToken: token, - game, - ranking, - gameStates, - }; + try { + const [{ game }, { ranking }, { states: gameStates }] = await Promise.all([ + await apiClient.getGame(gameId), + await apiClient.getGameWatchRanking(gameId), + await apiClient.getGameWatchLatestStates(gameId), + ]); + + return { + apiToken: token, + game, + ranking, + gameStates, + }; + } catch { + throw redirect("/dashboard"); + } } export default function GolfWatch() { diff --git a/q-remove-labels.sql b/q-remove-labels.sql new file mode 100644 index 0000000..71be7a1 --- /dev/null +++ b/q-remove-labels.sql @@ -0,0 +1,3 @@ +UPDATE users +SET label = NULL +WHERE user_id IN (4, 6, 10, 11); diff --git a/q1.sql b/q1.sql index e2d24b2..5f188f8 100644 --- a/q1.sql +++ b/q1.sql @@ -1,9 +1,15 @@ INSERT INTO problems (title, description, sample_code) VALUES - ('じゃんけん', '', ''), - ('でっかい数字', '', ''); + ('序数', '', ''), + ('Σ', '', ''), + ('漢数字', '', ''), + ('カレンダー', '', ''), + ('ダイナミックFizzBuzz', '', ''); INSERT INTO games (game_type, is_public, display_name, duration_seconds, problem_id) VALUES - ('multiplayer', false, 'オンライン予選1', 86400*5 + 3600*11, (SELECT problem_id FROM problems WHERE title = 'じゃんけん')), - ('multiplayer', false, 'オンライン予選2', 86400*5 + 3600*11, (SELECT problem_id FROM problems WHERE title = 'でっかい数字')); + ('1v1', false, '準々決勝マッチ1', 15*60, (SELECT problem_id FROM problems WHERE title = '序数')), + ('1v1', false, '準々決勝マッチ2', 15*60, (SELECT problem_id FROM problems WHERE title = 'Σ')), + ('1v1', false, '準決勝マッチ1', 15*60, (SELECT problem_id FROM problems WHERE title = '漢数字')), + ('1v1', false, '準決勝マッチ2', 15*60, (SELECT problem_id FROM problems WHERE title = 'カレンダー')), + ('1v1', false, '決勝', 15*60, (SELECT problem_id FROM problems WHERE title = 'ダイナミックFizzBuzz')); diff --git a/q2.sql b/q2.sql index 81be736..33f1bdf 100644 --- a/q2.sql +++ b/q2.sql @@ -1,187 +1,152 @@ UPDATE problems SET -sample_code = $EOF$list($player1_name, $player2_name) = fgetcsv(STDIN, 1024, ',', '"', ''); -while ($row = fgetcsv(STDIN, 1024, ',', '"', '')) { - if (count($row) === 0) { - break; +sample_code = $EOF$while($line = fgets(STDIN)) { + echo preg_replace_callback('/(?P\b[1-9][0-9]*)\b/', function ($m) { + $num = $m['num']; + return toOrd($num); + }, $line); +} + +function toOrd(int $num): string { + $_2 = $num % 100; + if ($_2 === 11 || $_2 === 12 || $_2 === 13) { + return $num . 'th'; } - $player1_hand = $row[0]; - $player2_hand = $row[1]; - switch ($player1_hand) { - case "グー": - printf("%sさん %s", $player1_name, match ($player1_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " vs "; - switch ($player2_hand) { - case "グー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => あいこ\n"; - break; - case "チョキ": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player1_name}の勝ち\n"; - break; - case "パー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player2_name}の勝ち\n"; - break; - } - break; - case "チョキ": - printf("%sさん %s", $player1_name, match ($player1_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " vs "; - switch ($player2_hand) { - case "グー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player2_name}の勝ち\n"; - break; - case "チョキ": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => あいこ\n"; - break; - case "パー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player1_name}の勝ち\n"; - break; + $_1 = $num % 10; + if ($_1 === 1) { + return $num . 'st'; + } elseif ($_1 === 2) { + return $num . 'nd'; + } elseif ($_1 === 3) { + return $num . 'rd'; + } else { + return $num . 'th'; + } +} +$EOF$ +WHERE title = '序数'; + +UPDATE problems +SET +sample_code = $EOF$fscanf(STDIN, "%d", $width); + +foreach (range(1, $width) as $i) { + echo '*'; +} +echo PHP_EOL; - } - break; - case "パー": - printf("%sさん %s", $player1_name, match ($player1_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " vs "; - switch ($player2_hand) { - case "グー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player1_name}の勝ち\n"; - break; - case "チョキ": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => {$player2_name}の勝ち\n"; - break; - case "パー": - printf("%sさん %s", $player2_name, match ($player2_hand) { - "グー" => "\u{270A}", - "チョキ" => "\u{270C}", - "パー" => "\u{270B}", - }); - echo " => あいこ\n"; - break; - } - break; +foreach (range(1, intdiv($width, 2)) as $i) { + foreach (range(0, $i) as $j) { + if ($i === $j) { + echo '*'; + } else { + echo ' '; + } } + echo PHP_EOL; +} +foreach (range(intdiv($width, 2)-1, 1) as $i) { + foreach (range(0, $i) as $j) { + if ($i === $j) { + echo '*'; + } else { + echo ' '; + } + } + echo PHP_EOL; +} +foreach (range(1, $width) as $i) { + echo '*'; } $EOF$ -WHERE title = 'じゃんけん'; +WHERE title = 'Σ'; UPDATE problems SET -sample_code = $EOF$$aa = array_map(fn($s) => explode("\n", $s), [ - <<<'AA' -┌┐ -││ -└┘ -AA, - <<<'AA' - ┐ - │ - ╵ -AA, - <<<'AA' -╶┐ -┌┘ -└╴ -AA, - <<<'AA' -┌┐ - ┤ -└┘ -AA, - <<<'AA' -╷╷ -└┤ - ╵ -AA, - <<<'AA' -┌╴ -└┐ -╶┘ -AA, - <<<'AA' -┌┐ -├┐ -└┘ -AA, - <<<'AA' -┌┐ - │ - ╵ -AA, - <<<'AA' -┌┐ -├┤ -└┘ -AA, - <<<'AA' -┌┐ -└┤ -└┘ -AA, -]); +sample_code = $EOF$while($line = fgets(STDIN)) { + echo preg_replace_callback('/(?P\b[1-9]?[0-9]+)\b/', function ($m) { + $num = $m['num']; + return to漢数字($num); + }, $line); +} + +function to漢数字(int $n): string +{ + $kansuji = [ + 0 => '〇', + 1 => '一', + 2 => '二', + 3 => '三', + 4 => '四', + 5 => '五', + 6 => '六', + 7 => '七', + 8 => '八', + 9 => '九', + ]; -while ($line = fgets(STDIN)) { - $digits = str_split(rtrim($line, "\n")); - $output = ''; - foreach (range(0, 2) as $i) { - foreach ($digits as $digit) { - $output = $output . $aa[$digit][$i]; + do { + $_ = (int)$n % 10; + $digits[] = $kansuji[$_]; + $n = $n / 10; + } while($n >= 1); + + return implode(array_reverse($digits)); +} +$EOF$ +WHERE title = '漢数字'; + +UPDATE problems +SET +sample_code = $EOF$[$year, $month] = explode("-", trim(fgets(STDIN))); +$first_day = strtotime("first day of {$year}-{$month}"); +$last_day = strtotime("last day of {$year}-{$month}"); + +$calendar = []; +$this_week = array_fill(0, idate('w', $first_day), ''); +$days = range(1, idate('d', $last_day)); +while (count($days) > 0) { + $this_week[] = array_shift($days); + if (count($this_week) === 7) { + $calendar[] = $this_week; + $this_week = []; + } +} +$calendar[] = $this_week; + +echo "[", idate('Y', $first_day), "年", idate("n", $first_day), "月]\n"; + +foreach($calendar as $week){ + foreach ($week as $day){ + printf("%3s", $day); + } + echo "\n"; +} +$EOF$ +WHERE title = 'カレンダー'; + +UPDATE problems +SET +sample_code = $EOF$$max = intval(fgets(STDIN)); +$nums = []; +while ($row = fgetcsv(STDIN, escape: ',')) { + [$n, $name] = $row; + $nums[$n] = $name; +} + +foreach (range(1, $max) as $i) { + $s = ''; + foreach ($nums as $n => $name) { + if ($i % $n === 0) { + $s = $s . $name; } - $output = $output . "\n"; } - echo $output; + if ($s === '') { + echo $i, "\n"; + } else { + echo $s, "\n"; + } } $EOF$ -WHERE title = 'でっかい数字'; +WHERE title = 'ダイナミックFizzBuzz'; diff --git a/q3.sql b/q3.sql index 4bc0f7c..39ea76f 100644 --- a/q3.sql +++ b/q3.sql @@ -1,30 +1,96 @@ UPDATE problems SET -description = $EOF$標準入力から改行区切りのデータが入力されます。 -最初の行は「プレイヤー1の名前,プレイヤー2の名前」の形式です。 -次以降の行は「グー,チョキ」「チョキ,パー」のように「プレイヤー1の手,プレイヤー2の手」が入力されます。プレイヤー1の名前が「X」プレイヤー2の名前が「Y」のとき、手の入力に合わせて「Xさん ✊ vs Yさん ✋ => Yの勝ち」「Xさん ✌️ vs Yさん ✋ => Xの勝ち」のように行ごとに出力してください。 -手の種類は「グー」(✊ = "\u{270A}")「チョキ」(✌️ = "\u{270C}")「パー」(✋ = "\u{270B}")の3つです。 -また、最初の行を含めて区切り文字以外に , が入力されることはありません。 +description = $EOF$標準入力から行区切りでテキストが入力されます。テキストに含まれる整数(n>0)を序数表現(1→1st, 2→2nd)のように置換して出力してください。 + +入力: +1 penguin +2 chance +3 time's the charm + +出力: +1st penguin +2nd chance +3rd time's the charm +$EOF$ +WHERE title = '序数'; + +UPDATE problems +SET +description = $EOF$標準入力から整数widthが入力されます。入力した数字から例のような図形を出力してください。ただし、入力は4以上の整数のみです。 + +入力: +6 + +出力: +****** + * + * + * + * + * +****** +$EOF$ +WHERE title = 'Σ'; + +UPDATE problems +SET +description = $EOF$標準入力から行区切りでテキストが入力されます。テキストに含まれる数字を漢数字に置換して出力してください。置換は一桁ずつおこない、数字が連続している場合でも「十」や「百」にはしないでください。 + +入力: +1234567890 +第8回 +ペチパー会議2025 +気温は摂氏7度 +総勢123人 +税込98700円 + +出力: +一二三四五六七八九〇 +第八回 +ペチパー会議二〇二五 +気温は摂氏七度 +総勢一二三人 +税込九八七〇〇円 +$EOF$ +WHERE title = '漢数字'; + +UPDATE problems +SET +description = $EOF$標準入力から「西暦年-月」の形式で 2025-02 のような行が1行入力されます。入力された月に合わせて「[Y年M月]」と出力してから、入力された月のカレンダーを日曜始まり形式で整列して出力してください。日付はすべて「3桁空白右寄せ」で表示します。 + +入力: +2025-02 + +出力 +[2025年2月] + 1 + 2 3 4 5 6 7 8 + 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 + 23 24 25 26 27 28 $EOF$ -WHERE title = 'じゃんけん'; +WHERE title = 'カレンダー'; UPDATE problems SET -description = $EOF$標準入力から数字が改行区切りで入力されます。 -出力例のような横2文字縦3行のサイズの罫線文字から構成される文字として、各桁の文字を横に連結して、入力行ごとに出力してください。 -アスキーアートに含まれる余白部分は、通常の「半角スペース("\x20")」です。 -また、入力される数字は 0 または正の整数です。 +description = $EOF$標準入力の最初の行に出力の最大行数 $max が、次以降の行に置換リストが 数,名前 の形式で改行区切りで入力されます。置換リストに含まれる数は2以上の素数で、昇順に入力されます。1 から $max までの連続した整数を改行区切りで出力してください。その際、出力しようとしている数が置換リストの数の倍数なら対応する名前に置き換え、その数が置換リストに含まれる複数の数の公倍数ならリスト内の数が小さい順に連結して置き換えてください。 入力: -0123456789 -88888 +10 +2,Dizz +3,Fizz +5,Buzz 出力: -┌┐ ┐╶┐┌┐╷╷┌╴┌┐┌┐┌┐┌┐ -││ │┌┘ ┤└┤└┐├┐ │├┤└┤ -└┘ ╵└╴└┘ ╵╶┘└┘ ╵└┘└┘ -┌┐┌┐┌┐┌┐┌┐ -├┤├┤├┤├┤├┤ -└┘└┘└┘└┘└┘ +1 +Dizz +Fizz +Dizz +Buzz +DizzFizz +7 +Dizz +Fizz +DizzBuzz $EOF$ -WHERE title = 'でっかい数字'; +WHERE title = 'ダイナミックFizzBuzz'; diff --git a/q4.sql b/q4.sql index 560ba50..2ec5584 100644 --- a/q4.sql +++ b/q4.sql @@ -1,114 +1,163 @@ INSERT INTO testcases (problem_id, stdin, stdout) VALUES - ((SELECT problem_id FROM problems WHERE title = 'じゃんけん'), - $$X,Y -グー,パー -チョキ,グー -パー,パー -グー,グー -チョキ,グー -グー,チョキ -パー,グー -チョキ,パー -パー,チョキ -グー,チョキ -チョキ,パー + ((SELECT problem_id FROM problems WHERE title = '序数'), + $$1 penguin +2 chance +3 time's the charm $$, - $$Xさん ✊ vs Yさん ✋ => Yの勝ち -Xさん ✌ vs Yさん ✊ => Yの勝ち -Xさん ✋ vs Yさん ✋ => あいこ -Xさん ✊ vs Yさん ✊ => あいこ -Xさん ✌ vs Yさん ✊ => Yの勝ち -Xさん ✊ vs Yさん ✌ => Xの勝ち -Xさん ✋ vs Yさん ✊ => Xの勝ち -Xさん ✌ vs Yさん ✋ => Xの勝ち -Xさん ✋ vs Yさん ✌ => Yの勝ち -Xさん ✊ vs Yさん ✌ => Xの勝ち -Xさん ✌ vs Yさん ✋ => Xの勝ち + $$1st penguin +2nd chance +3rd time's the charm $$), - ((SELECT problem_id FROM problems WHERE title = 'じゃんけん'), - $$グー,チョキ -グー,グー -グー,グー -グー,グー -チョキ,チョキ -チョキ,チョキ -パー,パー -パー,パー -パー,パー -パー,パー + ((SELECT problem_id FROM problems WHERE title = '序数'), + $$aaa 10 11 12 13 14 15 16 17 18 19 20 bbb +ccc 21 22 23 24 25 26 27 28 29 30 ddd +aaa 110 111 112 113 114 bbb $$, - $$グーさん ✊ vs チョキさん ✊ => あいこ -グーさん ✊ vs チョキさん ✊ => あいこ -グーさん ✊ vs チョキさん ✊ => あいこ -グーさん ✌ vs チョキさん ✌ => あいこ -グーさん ✌ vs チョキさん ✌ => あいこ -グーさん ✋ vs チョキさん ✋ => あいこ -グーさん ✋ vs チョキさん ✋ => あいこ -グーさん ✋ vs チョキさん ✋ => あいこ -グーさん ✋ vs チョキさん ✋ => あいこ + $$aaa 10th 11th 12th 13th 14th 15th 16th 17th 18th 19th 20th bbb +ccc 21st 22nd 23rd 24th 25th 26th 27th 28th 29th 30th ddd +aaa 110th 111th 112th 113th 114th bbb $$); INSERT INTO testcases (problem_id, stdin, stdout) VALUES - ((SELECT problem_id FROM problems WHERE title = 'でっかい数字'), - $$0123456789 -88888 + ((SELECT problem_id FROM problems WHERE title = 'Σ'), + $$6 $$, - $$┌┐ ┐╶┐┌┐╷╷┌╴┌┐┌┐┌┐┌┐ -││ │┌┘ ┤└┤└┐├┐ │├┤└┤ -└┘ ╵└╴└┘ ╵╶┘└┘ ╵└┘└┘ -┌┐┌┐┌┐┌┐┌┐ -├┤├┤├┤├┤├┤ -└┘└┘└┘└┘└┘ + $$****** + * + * + * + * + * +****** $$), - ((SELECT problem_id FROM problems WHERE title = 'でっかい数字'), - $$0 -1 + ((SELECT problem_id FROM problems WHERE title = 'Σ'), + $$10 +$$, + $$********** + * + * + * + * + * + * + * + * + * +********** +$$); + +INSERT INTO testcases (problem_id, stdin, stdout) +VALUES + ((SELECT problem_id FROM problems WHERE title = '漢数字'), + $$1234567890 +第8回 +ペチパー会議2025 +気温は摂氏7度 +総勢123人 +税込98700円 +$$, + $$一二三四五六七八九〇 +第八回 +ペチパー会議二〇二五 +気温は摂氏七度 +総勢一二三人 +税込九八七〇〇円 +$$), + ((SELECT problem_id FROM problems WHERE title = '漢数字'), + $$-123 +$$, + $$-一二三 +$$); + +INSERT INTO testcases (problem_id, stdin, stdout) +VALUES + ((SELECT problem_id FROM problems WHERE title = 'カレンダー'), + $$2025-02 +$$, + $$[2025年2月] + 1 + 2 3 4 5 6 7 8 + 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 + 23 24 25 26 27 28 +$$), + ((SELECT problem_id FROM problems WHERE title = 'カレンダー'), + $$2000-02 +$$, + $$[2000年2月] + 1 2 3 4 5 + 6 7 8 9 10 11 12 + 13 14 15 16 17 18 19 + 20 21 22 23 24 25 26 + 27 28 29 +$$), + ((SELECT problem_id FROM problems WHERE title = 'カレンダー'), + $$2025-03 +$$, + $$[2025年3月] + 1 + 2 3 4 5 6 7 8 + 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 + 23 24 25 26 27 28 29 + 30 31 +$$), + ((SELECT problem_id FROM problems WHERE title = 'カレンダー'), + $$2024-02 +$$, + $$[2024年2月] + 1 2 3 + 4 5 6 7 8 9 10 + 11 12 13 14 15 16 17 + 18 19 20 21 22 23 24 + 25 26 27 28 29 +$$); + +INSERT INTO testcases (problem_id, stdin, stdout) +VALUES + ((SELECT problem_id FROM problems WHERE title = 'ダイナミックFizzBuzz'), + $$10 +2,Dizz +3,Fizz +5,Buzz +$$, + $$1 +Dizz +Fizz +Dizz +Buzz +DizzFizz +7 +Dizz +Fizz +DizzBuzz +$$), + ((SELECT problem_id FROM problems WHERE title = 'ダイナミックFizzBuzz'), + $$21 +3,Fizz +7,Pazz +$$, + $$1 2 -3 +Fizz 4 5 -6 -7 +Fizz +Pazz 8 -9 -$$, - $$┌┐ -││ -└┘ - ┐ - │ - ╵ -╶┐ -┌┘ -└╴ -┌┐ - ┤ -└┘ -╷╷ -└┤ - ╵ -┌╴ -└┐ -╶┘ -┌┐ -├┐ -└┘ -┌┐ - │ - ╵ -┌┐ -├┤ -└┘ -┌┐ -└┤ -└┘ -$$), - ((SELECT problem_id FROM problems WHERE title = 'でっかい数字'), - $$748932178947312487291785974195743815794317587413957413 -$$, - $$┌┐╷╷┌┐┌┐┌┐╶┐ ┐┌┐┌┐┌┐╷╷┌┐┌┐ ┐╶┐╷╷┌┐┌┐╶┐┌┐ ┐┌┐┌┐┌╴┌┐┌┐╷╷ ┐┌┐┌╴┌┐╷╷┌┐┌┐ ┐┌╴┌┐┌┐╷╷┌┐ ┐┌┐┌╴┌┐┌┐╷╷ ┐┌┐┌┐┌╴┌┐╷╷ ┐┌┐ - │└┤├┤└┤ ┤┌┘ │ │├┤└┤└┤ │ ┤ │┌┘└┤├┤ │┌┘└┤ │ │├┤└┐└┤ │└┤ │└┤└┐ │└┤ ┤├┤ │└┐ │└┤└┤ ┤ │ │└┐├┤ │└┤ │ ┤└┤└┐ │└┤ │ ┤ - ╵ ╵└┘└┘└┘└╴ ╵ ╵└┘└┘ ╵ ╵└┘ ╵└╴ ╵└┘ ╵└╴└┘ ╵ ╵└┘╶┘└┘ ╵ ╵ ╵└┘╶┘ ╵ ╵└┘└┘ ╵╶┘ ╵└┘ ╵└┘ ╵ ╵╶┘└┘ ╵ ╵ ╵└┘└┘╶┘ ╵ ╵ ╵└┘ +Fizz +10 +11 +Fizz +13 +Pazz +Fizz +16 +17 +Fizz +19 +20 +FizzPazz $$); -- cgit v1.2.3-70-g09d2