From 8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 26 May 2014 01:50:28 -0400 Subject: start working on a command line interface for this --- bin/smt_fusion | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 bin/smt_fusion (limited to 'bin/smt_fusion') diff --git a/bin/smt_fusion b/bin/smt_fusion new file mode 100644 index 0000000..aeee940 --- /dev/null +++ b/bin/smt_fusion @@ -0,0 +1,55 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +use List::Util 'max'; + +use Games::SMTNocturne::Demons; + +sub _demon { Games::SMTNocturne::Demons::demon(@_) } +sub _fuse { Games::SMTNocturne::Demons::fuse(@_) } +sub _fusions_for { Games::SMTNocturne::Demons::fusions_for(@_) } + +my $command = shift @ARGV; + +if ($command !~ /^_/ && defined &$command) { + { no strict 'refs'; &{ $command }(@ARGV) } +} +else { + die "unknown command $command"; +} + +sub demon { + my ($demon) = @_; + print _demon($demon), "\n"; +} + +sub fuse { + my ($demon1, $demon2) = @_; + print _fuse($demon1, $demon2), "\n"; +} + +sub fusions_for { + my ($demon) = @_; + print join("\n", _fusions_for($demon)), "\n"; +} + +sub min_level_for { + my ($demon) = @_; + + my @fusions = _fusions_for($demon); + my $min_level = 99; + my @min_level_fusions; + for my $fusion (@fusions) { + my $max_level = max(map { $_->level } $fusion->all_demons); + if ($max_level < $min_level) { + @min_level_fusions = ($fusion); + $min_level = $max_level; + } + elsif ($max_level == $min_level) { + push @min_level_fusions, $fusion; + } + } + print "Level $min_level:\n"; + print join("\n", @min_level_fusions), "\n"; +} -- cgit v1.2.3