aboutsummaryrefslogtreecommitdiffhomepage
path: root/q2.sql
diff options
context:
space:
mode:
Diffstat (limited to 'q2.sql')
-rw-r--r--q2.sql307
1 files changed, 136 insertions, 171 deletions
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<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';