view nun/tasks/findreqs.pl @ 357:b5959a81c3f5 misc

Cleanup.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 27 Jun 2018 15:02:21 +0300
parents 102ac4f0bd22
children 362bd68d5686
line wrap: on
line source

#!/usr/bin/perl -w
use strict;
use warnings;
my %taskList = ();
my %taskNames = ();
my @tmpList = ();
my $wasFound = 0;
my $n;
my $nline = 0;


### Process and parse input logfile
while (defined(my $line = <STDIN>))
{
  $nline++;
  chomp($line);

  if ($line =~ /^New holy task '(.+)' is now available to you\.$/)
  {
    push(@tmpList, $1);
    $wasFound = 1;
    $n = 0;
  }
  elsif ($line =~ /^You now have '(.+)' at ([0-9]+)\% without special bonuses\.$/ && $wasFound)
  {
    my $tmpName = lc($1);
    my $tmpPercentage = $2;
    $n = 10;

    for my $taskName (@tmpList)
    {
      my $lcName = lc($taskName);
      if (defined($taskList{$lcName}{$tmpName}))
      {
        if ($tmpPercentage < $taskList{$lcName}{$tmpName})
        {
          $taskList{$lcName}{$tmpName} = $tmpPercentage;
        }
      }
      else
      {
        $taskList{$lcName}{$tmpName} = $tmpPercentage;
        $taskNames{$lcName} = $taskName;
      }
    }
  }

  if ($n++ >= 6)
  {
    $wasFound = 0;
    for my $taskName (@tmpList)
    {
      my $lcName = lc($taskName);
      if (!defined($taskList{$lcName}))
      {
        $taskList{$lcName} = {};
        $taskNames{$lcName} = $taskName;
      }
    }
    @tmpList = ();
  }
}


sub print_separator()
{
  print "|------------------------------------------------------------------------|\n";
}


sub print_line($$$)
{
  my ($task, $skill, $perc) = @_;
  printf "| %-36s | %-25s | %3d |\n", $task, $skill, $perc;
}


### Print out the results
$n = 0;
if ($#ARGV >= 0) {
  if ($ARGV[0] eq "-tasks")
  {
    for my $taskName (sort keys %taskList)
    {
      print $taskNames{$taskName}."\n";
    }
  }
  elsif ($ARGV[0] eq "-dump")
  {
    for my $taskName (sort keys %taskList)
    {
      my @list = map {
          $_."=".$taskList{$taskName}{$_}
        } sort keys %{$taskList{$taskName}};

      print $taskNames{$taskName}."|".join("|", @list)."\n";
    }
  }
}
else
{
  my $separator = 0;
  print  ",------------------------------------------------------------------------.\n";
  print  "| Task name                            | Skill/spell               | Min |\n";
  print  "+--------------------------------------+---------------------------+-----+\n";
  for my $taskName (sort keys %taskList)
  {
    my $nreqs = scalar keys(%{$taskList{$taskName}});
    
    if ($nreqs == 0)
    {
      # No requirement data for task
      print_separator() if ($separator);
      printf "| %-36s | %-31s |\n", $taskName, "UNKNOWN or no requirements";
      print_separator();
      $separator = 1;
    }
    elsif ($nreqs == 1)
    {
      for my $skillName (sort keys %{$taskList{$taskName}})
      {
        print_line($taskNames{$taskName}, $skillName, $taskList{$taskName}{$skillName});
      }
      $separator = 1;
    }
    else
    {
      print_separator() if ($separator);
      printf "| %-70s |\n", $taskNames{$taskName};
      for my $skillName (sort keys %{$taskList{$taskName}})
      {
        print_line("", $skillName, $taskList{$taskName}{$skillName});
      }
      print_separator();
      $separator = 0;
    }

    $n++;
  }
  print  "|-----------------+--------------------+---------------------------+-----'\n";
  printf "| %3d tasks total |\n", $n;
  print  "`-----------------'\n";
}