aboutsummaryrefslogtreecommitdiff
path: root/challenge-008
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-05-19 09:15:43 +0100
committerGitHub <noreply@github.com>2019-05-19 09:15:43 +0100
commit52fea1445bc68fa8d04c9ba706f4e4d552bee82f (patch)
tree955822dc10a73c3f8044efbe09e830479474d312 /challenge-008
parentc1c48ca16cf0dea89e84c34ae69929cfbc420009 (diff)
parent14526d111693bd2edda7120763e3e8957c7196c8 (diff)
downloadperlweeklychallenge-club-52fea1445bc68fa8d04c9ba706f4e4d552bee82f.tar.gz
perlweeklychallenge-club-52fea1445bc68fa8d04c9ba706f4e4d552bee82f.tar.bz2
perlweeklychallenge-club-52fea1445bc68fa8d04c9ba706f4e4d552bee82f.zip
Merge pull request #159 from adamcrussell/challenge-008
Challenge 008
Diffstat (limited to 'challenge-008')
-rw-r--r--challenge-008/adam-russell/blog.txt1
-rw-r--r--challenge-008/adam-russell/perl5/ch-1.pl31
-rw-r--r--challenge-008/adam-russell/perl5/ch-1t.pl61
-rw-r--r--challenge-008/adam-russell/perl5/ch-1x.pl21
-rw-r--r--challenge-008/adam-russell/perl5/ch-1xt.pl51
-rw-r--r--challenge-008/adam-russell/perl5/ch-2.pl49
-rw-r--r--challenge-008/adam-russell/perl5/ext/MYMETA.json37
-rw-r--r--challenge-008/adam-russell/perl5/ext/MYMETA.yml21
-rw-r--r--challenge-008/adam-russell/perl5/ext/Makefile1058
-rw-r--r--challenge-008/adam-russell/perl5/ext/Makefile.pl6
-rw-r--r--challenge-008/adam-russell/perl5/ext/Perfect.bs0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/arch/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/arch/auto/Perfect/.exists0
-rwxr-xr-xchallenge-008/adam-russell/perl5/ext/blib/arch/auto/Perfect/Perfect.bundlebin0 -> 19980 bytes
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/bin/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/lib/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/lib/Makefile.pl6
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/lib/auto/Perfect/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/lib/perfect.pm95
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/lib/temp.pl14
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/man1/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/man3/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/blib/script/.exists0
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect.cxx25
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect.h11
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect.i7
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect.obin0 -> 1232 bytes
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect.pm95
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect_wrap.cxx2178
-rw-r--r--challenge-008/adam-russell/perl5/ext/perfect_wrap.obin0 -> 13188 bytes
-rw-r--r--challenge-008/adam-russell/perl5/ext/pm_to_blib0
31 files changed, 3767 insertions, 0 deletions
diff --git a/challenge-008/adam-russell/blog.txt b/challenge-008/adam-russell/blog.txt
new file mode 100644
index 0000000000..851cfcef8b
--- /dev/null
+++ b/challenge-008/adam-russell/blog.txt
@@ -0,0 +1 @@
+https://adamcrussell.livejournal.com/2607.html
diff --git a/challenge-008/adam-russell/perl5/ch-1.pl b/challenge-008/adam-russell/perl5/ch-1.pl
new file mode 100644
index 0000000000..31c954ab9e
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ch-1.pl
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+##
+# Write a script that computes the first five perfect numbers.
+# A perfect number is an integer that is the sum of its positive
+# proper divisors (all divisors except itself).
+##
+use constant PERFECT_COUNT => 5;
+
+sub factor{
+ my($n) = @_;
+ my @factors = (1);
+ foreach my $j (2..sqrt($n)){
+ push @factors, $j if $n % $j == 0;
+ push @factors, ($n / $j) if $n % $j == 0 && $j ** 2 != $n;
+ }
+ return @factors;
+}
+
+my $i = 2;
+my $count = 0;
+do{
+ my @factors = factor($i);
+ my $sum = unpack("%32I*", pack("I*", @factors));
+ if($sum == $i){
+ print "$i ";
+ $count++;
+ }
+ $i++;
+}while($count < PERFECT_COUNT);
+print "\n";
diff --git a/challenge-008/adam-russell/perl5/ch-1t.pl b/challenge-008/adam-russell/perl5/ch-1t.pl
new file mode 100644
index 0000000000..a3913366c9
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ch-1t.pl
@@ -0,0 +1,61 @@
+use strict;
+use warnings;
+##
+# Write a script that computes the first five perfect numbers.
+# A perfect number is an integer that is the sum of its positive
+# proper divisors (all divisors except itself).
+##
+use Thread;
+
+use constant THREAD_COUNT => 4;
+use constant PERFECT_COUNT => 5;
+use constant RANGE_SIZE => 100_000;
+sub factor{
+ my($n) = @_;
+ my @factors = (1);
+ foreach my $j (2..sqrt($n)){
+ push @factors, $j if $n % $j == 0;
+ push @factors, ($n / $j) if $n % $j == 0 && $j ** 2 != $n;
+ }
+ return @factors;
+}
+
+sub is_perfect{
+ my @numbers = @_;
+ my @perfects = ();
+ foreach my $n (@numbers){
+ my @factors = factor($n);
+ my $sum = unpack("%32I*", pack("I*", @factors));
+ if($sum == $n){
+ push @perfects, $n;
+ }
+ }
+ return \@perfects;
+}
+
+##
+# Main
+##
+my @threads;
+my $count = 0;
+my $lower = 2;
+my $upper = RANGE_SIZE;
+do{
+ for(0..(THREAD_COUNT - 1)){
+ my $t = Thread->new(\&is_perfect, ($lower..$upper));
+ push @threads, $t;
+ $lower = $upper + 1;
+ $upper = $lower + RANGE_SIZE;
+ }
+ foreach my $t (@threads){
+ my $perfects = $t->join();
+ foreach my $p (@{$perfects}){
+ print "$p ";
+ $count++;
+ }
+ }
+ @threads = ();
+}while($count < PERFECT_COUNT);
+print "\n";
+
+
diff --git a/challenge-008/adam-russell/perl5/ch-1x.pl b/challenge-008/adam-russell/perl5/ch-1x.pl
new file mode 100644
index 0000000000..8bf6e76687
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ch-1x.pl
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+##
+# Write a script that computes the first five perfect numbers.
+# A perfect number is an integer that is the sum of its positive
+# proper divisors (all divisors except itself).
+##
+use Perfect;
+use constant PERFECT_COUNT => 5;
+
+my $i = 2;
+my $count = 0;
+my $p = new Perfect::Perfect();
+do{
+ if($p->isPerfect($i)){
+ print "$i ";
+ $count++;
+ }
+ $i++;
+}while($count < PERFECT_COUNT);
+print "\n";
diff --git a/challenge-008/adam-russell/perl5/ch-1xt.pl b/challenge-008/adam-russell/perl5/ch-1xt.pl
new file mode 100644
index 0000000000..543978b56d
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ch-1xt.pl
@@ -0,0 +1,51 @@
+use strict;
+use warnings;
+##
+# Write a script that computes the first five perfect numbers.
+# A perfect number is an integer that is the sum of its positive
+# proper divisors (all divisors except itself).
+##
+use Thread;
+use Perfect;
+
+use constant THREAD_COUNT => 4;
+use constant PERFECT_COUNT => 5;
+use constant RANGE_SIZE => 100_000;
+
+my $p = new Perfect::Perfect();
+
+sub is_perfect{
+ my @numbers = @_;
+ my @perfects = ();
+ foreach my $n (@numbers){
+ if($p->isPerfect($n)){
+ push @perfects, $n;
+ }
+ }
+ return \@perfects;
+}
+
+##
+# Main
+##
+my @threads;
+my $count = 0;
+my $lower = 2;
+my $upper = RANGE_SIZE;
+do{
+ for(0..(THREAD_COUNT - 1)){
+ my $t = Thread->new(\&is_perfect, ($lower..$upper));
+ push @threads, $t;
+ $lower = $upper + 1;
+ $upper = $lower + RANGE_SIZE;
+ }
+ foreach my $t (@threads){
+ my $perfects = $t->join();
+ foreach my $p (@{$perfects}){
+ print "$p ";
+ $count++;
+ }
+ }
+ @threads = ();
+}while($count < PERFECT_COUNT);
+print "\n";
diff --git a/challenge-008/adam-russell/perl5/ch-2.pl b/challenge-008/adam-russell/perl5/ch-2.pl
new file mode 100644
index 0000000000..97db2d1bcb
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ch-2.pl
@@ -0,0 +1,49 @@
+use strict;
+use warnings;
+##
+# Write a function, "center", whose argument is a list of strings, which
+# will be lines of text. The function should insert spaces at the beginning
+# of the lines of text so that if they were printed, the text would be
+# centered, and return the modified lines.
+##
+sub center{
+ my @words = @_;
+ my @padded_words;
+ my %line_length;
+ my $max_length = -1;
+ my $center;
+ my $i = 0;
+ foreach my $line (@words){
+ $line_length{$i} = do{
+ $line =~ tr/ [a-z][A-Z]//;
+ };
+ $max_length = $line_length{$i} if $line_length{$i} > $max_length;
+ $i++;
+ }
+ $center = int($max_length / 2);
+ for(my $i = 0; $i < @words; $i++){
+ my $middle = int($line_length{$i} / 2);
+ my $padding = $center - $middle;
+ $padded_words[$i] = " " x $padding . $words[$i];
+ }
+ return @padded_words;
+}
+
+##
+# Main
+##
+my @words;
+do{
+ local $/;
+ @words = split(/\n/, <DATA>);
+};
+my @centered = center(@words);
+foreach my $w (@centered){
+ print "$w\n";
+}
+
+__DATA__
+This
+is
+a test of the
+center function
diff --git a/challenge-008/adam-russell/perl5/ext/MYMETA.json b/challenge-008/adam-russell/perl5/ext/MYMETA.json
new file mode 100644
index 0000000000..41819df740
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ext/MYMETA.json
@@ -0,0 +1,37 @@
+{
+ "abstract" : "unknown",
+ "author" : [
+ "unknown"
+ ],
+ "dynamic_config" : 0,
+ "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
+ "license" : [
+ "unknown"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : 2
+ },
+ "name" : "Perfect",
+ "no_index" : {
+ "directory" : [
+ "t",
+ "inc"
+ ]
+ },
+ "prereqs" : {
+ "build" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ },
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ }
+ },
+ "release_status" : "stable",
+ "version" : "",
+ "x_serialization_backend" : "JSON::PP version 2.97001"
+}
diff --git a/challenge-008/adam-russell/perl5/ext/MYMETA.yml b/challenge-008/adam-russell/perl5/ext/MYMETA.yml
new file mode 100644
index 0000000000..aa27a91c8f
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ext/MYMETA.yml
@@ -0,0 +1,21 @@
+---
+abstract: unknown
+author:
+ - unknown
+build_requires:
+ ExtUtils::MakeMaker: '0'
+configure_requires:
+ ExtUtils::MakeMaker: '0'
+dynamic_config: 0
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
+license: unknown
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: '1.4'
+name: Perfect
+no_index:
+ directory:
+ - t
+ - inc
+version: ''
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/challenge-008/adam-russell/perl5/ext/Makefile b/challenge-008/adam-russell/perl5/ext/Makefile
new file mode 100644
index 0000000000..3a8291aab3
--- /dev/null
+++ b/challenge-008/adam-russell/perl5/ext/Makefile
@@ -0,0 +1,1058 @@
+# This Makefile is for the Perfect extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 7.34 (Revision: 73400) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+# ANY CHANGES MADE HERE WILL BE LOST!
+#
+# MakeMaker ARGV: ()
+#
+
+# MakeMaker Parameters:
+
+# BUILD_REQUIRES => { }
+# CONFIGURE_REQUIRES => { }
+# NAME => q[Perfect]
+# OBJECT => q[perfect.o perfect_wrap.o]
+# PREREQ_PM => { }
+# TEST_REQUIRES => { }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level/Config.pm).
+# They may have been overridden via Makefile.PL or on the command line.
+AR = ar
+CC = cc
+CCCDLFLAGS =
+CCDLFLAGS =
+DLEXT = bundle
+DLSRC = dl_dlopen.xs
+EXE_EXT =
+FULL_AR = /usr/bin/ar
+LD = cc
+LDDLFLAGS = -mmacosx-version-min=10.14 -bundle -undefined dynamic_lookup -L/usr/local/lib -L/opt/local/lib -fstack-protector-strong
+LDFLAGS = -mmacosx-version-min=10.14 -fstack-protector-strong -L/usr/local/lib -L/opt/local/lib
+LIBC =
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = darwin
+OSVERS = 18.2.0
+RANLIB = ranlib
+SITELIBEXP = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/site_perl/5.28.0
+SITEARCHEXP = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/site_perl/5.28.0/darwin-thread-multi-2level
+SO = dylib
+VENDORARCHEXP =
+VENDORLIBEXP =
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = Perfect
+NAME_SYM = Perfect
+VERSION =
+VERSION_MACRO = VERSION
+VERSION_SYM =
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION =
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1
+MAN3EXT = 3
+INSTALLDIRS = site
+DESTDIR =
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0
+SITEPREFIX = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0
+VENDORPREFIX =
+INSTALLPRIVLIB = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/site_perl/5.28.0
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB =
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/site_perl/5.28.0/darwin-thread-multi-2level
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH =
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN =
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLSITESCRIPT = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin
+DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT)
+INSTALLVENDORSCRIPT =
+DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT)
+INSTALLMAN1DIR = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR =
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR =
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0
+PERL_ARCHLIB = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level
+PERL_ARCHLIBDEP = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = Makefile.old
+MAKE_APERL_FILE = Makefile.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level/CORE
+PERL_INCDEP = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/darwin-thread-multi-2level/CORE
+PERL = "/Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin/perl"
+FULLPERL = "/Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/bin/perl"
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_DIR = 755
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/ExtUtils/MakeMaker.pm
+MM_VERSION = 7.34
+MM_REVISION = 73400
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+MAKE = make
+FULLEXT = Perfect
+BASEEXT = Perfect
+PARENT_NAME =
+DLBASE = $(BASEEXT)
+VERSION_FROM =
+OBJECT = perfect$(OBJ_EXT) perfect_wrap$(OBJ_EXT)
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP =
+
+# Handy lists of source code files:
+XS_FILES =
+C_FILES = perfect.cxx \
+ perfect_wrap.cxx
+O_FILES = perfect.o \
+ perfect_wrap.o
+H_FILES = perfect.h
+MAN1PODS =
+MAN3PODS =
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_INCDEP)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR = $(INST_LIB)
+INST_ARCHLIBDIR = $(INST_ARCHLIB)
+
+INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT)
+INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT)
+INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
+
+# Extra linker info
+EXPORT_LIST =
+PERL_ARCHIVE =
+PERL_ARCHIVEDEP =
+PERL_ARCHIVE_AFTER =
+
+
+TO_INST_PM = Makefile.pl \
+ perfect.pm \
+ temp.pl
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 7.34
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$$$ARGV[0], $$$$ARGV[1], 0, 1, 1)' --
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+XSUBPPDIR = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/ExtUtils
+XSUBPP = "$(XSUBPPDIR)$(DFSEP)xsubpp"
+XSUBPPRUN = $(PERLRUN) $(XSUBPP)
+XSPROTOARG =
+XSUBPPDEPS = /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/ExtUtils/typemap /Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/ExtUtils$(DFSEP)xsubpp
+XSUBPPARGS = -typemap '/Users/adamcrussell/perl5/perlbrew/perls/perl-5.28.0/lib/5.28.0/ExtUtils/typemap'
+XSUBPP_EXTRA_ARGS =
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(TRUE)
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
+FALSE = false
+TRUE = true
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
+DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
+UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
+MACROSTART =
+MACROEND =
+USEMAKEFILE = -f
+FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
+CP_NONEMPTY = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'cp_nonempty' --
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt : all
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = COPY_EXTENDED_ATTRIBUTES_DISABLE=1 COPYFILE_DISABLE=1 tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip --best
+SUFFIX = .gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = Perfect
+DISTVNAME = Perfect-
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+CCFLAGS = -fno-common -DPERL_DARWIN -mmacosx-version-min=10.14 -fno-strict-aliasing -pipe -fstack-protector-strong -I/opt/local/include -DPERL_USE_SAFE_PUTENV
+OPTIMIZE = -O3
+PERLTYPE =
+MPOLLUTE =
+
+
+# --- MakeMaker const_loadlibs section:
+
+# Perfect might depend on some other libraries:
+# See ExtUtils::Liblist for details
+#
+
+
+# --- MakeMaker const_cccmd section:
+CCCMD = $(CC) -c $(PASTHRU_INC) $(INC) \
+ $(CCFLAGS) $(OPTIMIZE) \
+ $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \
+ $(XS_DEFINE_VERSION)
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ OPTIMIZE="$(OPTIMIZE)"\
+ PREFIX="$(PREFIX)"\
+ PASTHRU_DEFINE='$(DEFINE) $(PASTHRU_DEFINE)'\
+ PASTHRU_INC='$(INC) $(PASTHRU_INC)'
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir pure_all subdirs clean_subdirs makemakerdflt manifypods realclean_subdirs subdirs_dynamic subdirs_pure_nolink subdirs_static subdirs-test_dynamic subdirs-test_static test_dynamic test_static
+
+
+
+# --- MakeMaker c_o section:
+
+.c.i:
+ cc -E -c $(PASTHRU_INC) $(INC) \
+ $(CCFLAGS) $(OPTIMIZE) \
+ $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \
+ $(XS_DEFINE_VERSION) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c > $*.i
+
+.c.s :
+ $(CCCMD) -S $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c
+
+.c$(OBJ_EXT) :
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c
+
+.cpp$(OBJ_EXT) :
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cpp
+
+.cxx$(OBJ_EXT) :
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cxx
+
+.cc$(OBJ_EXT) :
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cc
+
+.C$(OBJ_EXT) :
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.C
+
+
+# --- MakeMaker xs_c section:
+
+.xs.c:
+ $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc
+ $(MV) $*.xsc $*.c
+
+
+# --- MakeMaker xs_o section:
+.xs$(OBJ_EXT) :
+ $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc
+ $(MV) $*.xsc $*.c
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+ $(NOECHO) $(NOOP)
+
+pure_all :: config pm_to_blib subdirs linkext
+ $(NOECHO) $(NOOP)
+
+ $(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+ $(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+ $(NOECHO) $(NOOP)
+
+$(O_FILES) : $(H_FILES)
+
+help :
+ perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+ $(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+ $(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
+ $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
+ $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_BIN)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
+ $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_SCRIPT)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
+ $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: dynamic
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic_bs section:
+BOOTSTRAP = $(BASEEXT).bs
+
+# As Mkbootstrap might not write a file (if none is required)
+# we use touch to prevent make continually trying to remake it.
+# The DynaLoader only reads a non-empty file.
+$(BASEEXT).bs : $(FIRST_MAKEFILE) $(BOOTDEP)
+ $(NOECHO) $(ECHO) "Running Mkbootstrap for $(BASEEXT) ($(BSLOADLIBS))"
+ $(NOECHO) $(PERLRUN) \
+ "-MExtUtils::Mkbootstrap" \
+ -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
+ $(NOECHO) $(TOUCH) "$(BASEEXT).bs"
+ $(CHMOD) $(PERM_RW) "$(BASEEXT).bs"
+
+$(INST_ARCHAUTODIR)/$(BASEEXT).bs : $(BASEEXT).bs $(INST_ARCHAUTODIR)$(DFSEP).exists
+ $(NOECHO) $(RM_RF) $(INST_ARCHAUTODIR)/$(BASEEXT).bs
+ - $(CP_NONEMPTY) $(BASEEXT).bs $(INST_ARCHAUTODIR)/$(BASEEXT).bs $(PERM_RW)
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) config $(INST_BOOT) $(INST_DYNAMIC)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_lib section:
+# This section creates the dynamically loadable objects from relevant
+# objects and possibly $(MYEXTLIB).
+ARMAYBE = :
+OTHERLDFLAGS =
+INST_DYNAMIC_DEP =
+INST_DYNAMIC_FIX =
+
+$(INST_DYNAMIC) : $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVEDEP) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
+ $(RM_F) $@
+ $(LD) $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) \
+ $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST) \
+ $(INST_DYNAMIC_FIX)
+ $(CHMOD) $(PERM_RWX) $@
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists
+ $(RM_F) "$@"
+ $(FULL_AR) $(AR_STATIC_ARGS) "$@" $(OBJEC