该计划基于一个人在城市中行走(Perl)

时间:2017-11-21 01:04:10

标签: perl

我正在尝试阅读包含字母'n','s','e','w'的文件。

如何查找这些字母并将其添加到名为$ns$ew的变量中,

  • $ns表示添加'n'或减去's'。

  • $ew表示添加'e'或减去'w'。

这就是我所拥有的:

open (FILE, 'randwalk1')

or die "Could not open file";

my $ns = 0;

my $ew = 0;

while (my $file1 = <FILE>) {
    if ($file1 =~ /n+/) {
        $ns = $ns + 1;
    } elsif ($file1 =~ /s/) {
        $ns = $ns - 1;
    } elsif ($file1 =~ /e/) {
        $ew = $ew + 1;
    } elsif ($file1 =~ /w/) {
        $ew = $ew - 1;
    }
}

输入文件(randwalk1)如下所示:

ensweswewnnewwwsweenwsssssnewwennnesewewwewsnnewwwsewsenssns‌
newnwssswennesnseewn‌​wsnwnwnnwwwewes
neesnwnsenwsnnnewwswnnneesswssnswenwsnnwewswwsnennneeeeswewe‌​  

1 个答案:

答案 0 :(得分:6)

您检查该行是否有n,找到一行,然后忽略该行的其余部分。您需要检查该行的每个字符。

my $home_returns = 0;
my $ns = 0;
my $ew = 0;
while (my $line = <>) {
   chomp($line);
   for my $char (split //, $line) {
      if    ($char eq "n") { ++$ns; }
      elsif ($char eq "s") { --$ns; }
      elsif ($char eq "e") { ++$ew; }
      elsif ($char eq "w") { --$ew; }

      ++$home_returns if $ns == 0 && $ew == 0;
   }
}

my $home_returns = 0;
my %counts = map { $_ => 0 } qw( n s e w );
while (my $line = <>) {
   chomp($line);
   for my $char (split //, $line) {
      ++$counts{$char};
      ++$home_returns
         if $counts{n} == $counts{s}
         && $counts{e} == $counts{w};
   }
}