2020/09/27 日 23:31
いつかAランクをゆめみて・・
Aランクレベルアップをめざしてといたれんしゅ~もんだい「陣取りゲーム」
3じかんくらいふんと~しながらやっととけました~!
どうすれば効率よくとけるか・・ターンごとに全マスチェックしていたのでは時間がかかりすぎるよね・・・なるべく手間を減らすには・・・??とかんがえてたらいいほうほうをひらめいちゃいました^-^*
んがっ、それをコードにするのにずいぶんくろ~しちゃった・・w
というわけできき☆彡の解答~^-^*
3じかんくらいふんと~しながらやっととけました~!どうすれば効率よくとけるか・・ターンごとに全マスチェックしていたのでは時間がかかりすぎるよね・・・なるべく手間を減らすには・・・??とかんがえてたらいいほうほうをひらめいちゃいました^-^*
んがっ、それをコードにするのにずいぶんくろ~しちゃった・・w
というわけできき☆彡の解答~^-^*
my %pid = ('A' => 0, 'B' => 1);
my @pname = ('A', 'B');
my @cord = ([-1, 0], [0, 1], [0, -1], [1, 0]);
my $input_line = <STDIN>;
chomp $input_line;
my ($H, $W) = split(/ /,$input_line);
my $N = <STDIN>;
chomp $N;
# フィールドの初期状態
my @field = ();
my @new_territory = ([], []);
my @score = (0, 0);
for(my $a = 0; $a < $H; ++$a){
$input_line = <STDIN>;
chomp $input_line;
push(@field,[split(//, $input_line)]);
for(my $b = 0; $b < $W; ++$b) {
if (defined($pid{$field[$a][$b]})) {
push(@{$new_territory[ $pid{$field[$a][$b]} ]}, [$a, $b]);
++$score[$pid{$field[$a][$b]}];
}
}
}
my $flg = 1;
my $turn = $pid{$N};
my $pass = 0;
#ゲーム開始!
while($flg) {
$flg = 0;
my $painted = [];
foreach $pick (@{$new_territory[$turn]}) {
for(my $a = 0; $a < 4; ++$a) {
my $ny = $$pick[0] + $cord[$a][0];
my $nx = $$pick[1] + $cord[$a][1];
if (
$ny >= 0 && $ny < $H &&
$nx >= 0 && $nx < $W &&
$field[$ny][$nx] eq '.'
) {
# 侵略!<s>イカ娘</s>
$field[$ny][$nx] = $pname[$turn];
++$score[$turn];
push(@$painted, [$ny, $nx]);
$flg = 1;
}
}
}
$new_territory[$turn] = $painted;
if ($flg) {
$pass = 0;
}
# 連続パス
if (!$flg && !$pass) {
$pass = 1;
$flg = 1;
}
$turn = 1 - $turn;
}
#けっかはっぴょ~♪
print join(' ',@score)."\n";
print $score[0] > $score[1] ? "A\n" : "B\n";