2020/10/03 土 23:42
時刻に伴う移動
paizaのレベルアップ問題「時刻に伴う移動」 もといてみちゃった^-^*
わりとみじかいコードでできたかな~(〃⌒ー⌒〃)ゞ エヘヘ
(補足:文字列の'Inf'は数値で評価すると無限大と扱われる)
わりとみじかいコードでできたかな~(〃⌒ー⌒〃)ゞ エヘヘ
my %reldirec = (
'L' => 3,
'R' => 1
);
my @mvcord = (
[-1, 0],
[ 0, 1],
[ 1, 0],
[ 0, -1]
);
my $input_line = <STDIN>;
chomp $input_line;
my ($H, $W, $sy, $sx, $N) = split(/ /, $input_line);
my @field = ();
for (my $a = 0; $a < $H; ++$a) {
$input_line = <STDIN>;
chomp $input_line;
push(@field,[split(//, $input_line)]);
}
my $event_count = 0;
my @event_list = ();
for (my $c = 0; $c < $N; ++$c) {
$input_line = <STDIN>;
chomp $input_line;
push(@event_list, [split(/ /, $input_line)]);
}
push(@event_list, ['Inf', '']);
$field[$sy][$sx] = '*';
my $di = 0;
for (my $g_time = 0; $g_time <= 99; ++$g_time) {
my $od = $di;
if ($g_time == $event_list[$event_count][0]) {
$od = ($od + $reldirec{$event_list[$event_count][1]}) % 4;
++$event_count;
}
my $stop = 0;
my $oy = $sy + $mvcord[$od][0];
my $ox = $sx + $mvcord[$od][1];
if(
$oy >= 0 && $oy < $H &&
$ox >= 0 && $ox < $W &&
$field[$oy][$ox] ne '#'
){
$di = $od;
$sy = $oy;
$sx = $ox;
$field[$sy][$sx] = '*';
} else {
$stop = 1;
}
if ($stop) {
print "Stop";
last;
} else {
print $sy.' '.$sx."\n";
}
}
(補足:文字列の'Inf'は数値で評価すると無限大と扱われる)