2020/09/26 土 03:12
paizaリバーシの操作
最近はpaizaというサイトのもんだいをときどきといてます^▽^;
そんななかでAランクレベルアップ問題にあるSTEP 5 リバーシの操作というもんだいをといたのできき☆彡の解答をぺたり☆
けっこうくふうしたつもりです(>▽<;; アセアセ
そんななかでAランクレベルアップ問題にあるSTEP 5 リバーシの操作というもんだいをといたのできき☆彡の解答をぺたり☆
けっこうくふうしたつもりです(>▽<;; アセアセ
my $input_line = <STDIN>; chomp $input_line; my ($H, $W, $Y, $X) = split(/ /,$input_line); ### 外枠を '_' で囲む my @board = ('_' x ($W + 2)); for (my $a = 0; $a < $H; ++$a) { $input_line = <STDIN>; chomp $input_line; push(@board, '_'.$input_line.'_'); } push(@board, '_' x ($W + 2)); substr($board[$Y + 1], $X + 1, 1, '*'); for (my $dy = -1; $dy <= 1; ++$dy) { for (my $dx = -1; $dx <= 1; ++$dx) { next if $dy == 0 && $dx == 0; my $ny = $Y + $dy + 1; my $nx = $X + $dx + 1; my $flg = 0; my $t = substr($board[$ny], $nx, 1); last if $t eq '*'; ### はさんでいる? while($t ne '_') { if ($t eq '*') { $flg = 1; last; } $ny += $dy; $nx += $dx; $t = substr($board[$ny], $nx, 1); } ### はさんでるよ! if ($flg) { $ny = $Y + $dy + 1; $nx = $X + $dx + 1; $t = substr($board[$ny], $nx, 1); for(; $t ne '*'; $ny += $dy, $nx += $dx, $t = substr($board[$ny], $nx, 1)) { substr($board[$ny], $nx, 1, '*'); } } } } for (my $a = 1; $a <= $H; ++$a) { print substr($board[$a], 1, $W)."\n"; }
コメント☆