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