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";
}
コメント☆