diff options
Diffstat (limited to 'q2.sql')
| -rw-r--r-- | q2.sql | 307 |
1 files changed, 136 insertions, 171 deletions
@@ -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<num>\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<num>\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'; |
