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'は数値で評価すると無限大と扱われる)