たのしい 記号Perlプログラミング

Dec 10, 2011

Hokkaido.pm #6 LT

id:sugyan

Self-introduction

my $profile = +{
    id   => 'sugyan',
    name => 'すぎゃーん',
    age  => 0x1C,
    lang => ['Perl', 'Node.js'],
};
      

Self-introduction

my $profile = +{
    id   => 'sugyan',
    name => 'すぎゃーん',
    age  => 0x1C,
    lang => ['Perl', 'Node.js'],
};
# TODAY
$profile->{age}++;
      


Hokkaido.pm

                                                                                                    
                               ''                                                                   
                          =~(('(').                                                                 
                          ((''=='').(                                                               
                          '')^'~'^'.'^(                                                             
                          '^')).((''=='')                                                           
                          .''^')'^'='^'^')                                                          
                           .('^'^'.'^('=')^                                                         
                            '(').('^'^'(').((                                                       
                             '~')^'.'^(''=='').                                                     
                              '').('='^')'^('~')^                                                   
                              '('^'.').('='^(''=='')                                                
                              .''^'.').('^'^'.').('='^(                               '~'           
                             )^(''=='').'').('('^'^'^'.'^((                          ('')           
                             )=='').'').((''=='').''^')'^'^'^(                     '(')).           
                            ('~'^(''=='').''^'.'^'='^'(').('~'^'^').('='         ^'.'^(             
                             '~')^(''=='').'').('.'^'='^(''=='').'').('~'^     (''=='')             
                             .''^')'^'.').('.'^'^'^'('^'=').('='^'.'^')'^'~'^'(').(')'              
                             ^'='^'~'^'('^'.').('^'^(''=='').'').('='^'^'^'~'^(''=='')              
                            .'').('~'^'^').('.'^(''=='').''^')'^'~').((''=='').''^('^')).(          
                         '('^'='^'~').('~'^'('^'=').((''=='').''^'.'^'~').('('^'^'^'.'^(''          
                         =='').'').(')'^'='^'.'^'^').((''=='').''^'^').('.').('.'^('^')).(     '='  
                         ^'.'^'~').('('^')'^'^'^'~').('('^'='^'.'^(''=='').'').('='^'.'^(''  =='')  
                         .''^'~').((''=='').''^'='^'.').('.'^'='^'(').('.'^'('^'^'^'=').('('^'~'^(  
                         '.')).('.'^'^'^(''=='').''^'(').('~'^'.'^(''=='').''^'('^'=').((''==''     
           ).             ''^'='^'.').('('^'='^(''=='').''^'.').('='^(''=='').''^'('^'.').(((       
         '')==''   )     .''^'('^'.'^'=').('='^'('^(''=='').''^'.').('='^'.'^'('^(''==''            
         ).'').('('^'.'^(''=='').''^'=').('('^'.'^'='^(''=='').'').('='^(''=='').(  ''              
         )^'.'^'(').((''=='').''^'.'^'('^'=').((''=='').''^'.'^'('^'=').(  '='^((                   
           '')=='').''^'('^'.').('='^(''=='').''^'.'^'(').((''=='').''                              
           ^'.'^'('^'=').('='^'.'^'('^(''=='').'').('('^'.'^'='^((''                                
          )=='').'').('='^'.'^'('^(''=='').'').('('^'='^(''=='').(                                  
      '')^'.').('.'^(''=='').''^'='^'(').('('^'.'^'='^(''=='').(                                    
  '')).('='^'.'^(''=='').''^'(').('('^'='^'.'^(''=='').'').('.'                                     
  ^'('^'='^(''=='').'').(('.')^    '='^(''=='').''^'(').('.'^                                       
  '='^'('^((''   )=='').'')            .('('^(''=='').''^'='                                        
  ^('.')).(        ('.')^                  '('^'='^(''=='').                                        
 '').('='^           ((                       '')=='').''^'.'                                       
 ^'(').('='^(                                     '(')^'.'^((                                       
 '')=='').'').('('                                      ^(''                                        
    =='').''^'='^'.')                                                                               
      .('^'^'~').(('~')^                                                                            
        '^').('.'^')'^'^'^                                                                          
       (''=='').''^'='^'('                                                                          
      ).(')').((     '')                                                                            
     ).''.''.                                                                                       
     ''.('').                                                                                       
      ''.'')                                                                                        
        

Hokkaido.pm

$ ls
Hokkaido.pm

$ perl -e 'use Hokkaido'
Hello, Hokkaido.pm!

$ perl -MHokkaido
Hello, Hokkaido.pm!

7 symbols program

no Alphanumerics;

extended regular expression

''=~/(?{print "hoge\n"})/
      

no Alphanumerics;

extended regular expression

''=~('(?{'.'print "hoge\n"'.'})')
      

no Alphanumerics;

extended regular expression

''=~('(?{'.'print "hoge\n"'.'})')
      

no Alphanumerics;

XOR operator

A B A^B
0 0 0
0 1 1
1 0 1
1 1 0

no Alphanumerics;

XOR operator

+ ("\x2b") 0b00101010
[ ("\x5b") 0b01011010
^ p ("\x70") 0b01110000

no Alphanumerics;

XOR operator

print('p');

equals:

print('+'^'[');
      

no Alphanumerics;

XOR operator

print('print');

equals:

print('+)).)'^'[[@@]');
      

no Alphanumerics;

XOR operator

''=~('(?{'.'print "hoge\n"'.'})')

equals:

''=~('(?{'.(
    '+)).)@^(/:%!.^'^'[[@@]`|@@]@}@|'
).'})')
      
my %table = (
    "\x00" => ('='^'='),
    "\x01" => ('('^')'),
    "\x02" => ('='^'='^'='^'~'^'^'^'.'^((''=='').'')),
    "\x03" => ('='^'~'^'('^')'^'^'^'.'^((''=='').'')),
    "\x04" => ('='^'='^'='^'~'^'('^'^'^((''=='').'')),
    "\x05" => ('='^'='^'='^'~'^')'^'^'^((''=='').'')),
    "\x06" => ('('^'.'),
    "\x07" => (')'^'.'),
    "\x08" => ('~'^'('^'^'),
    "\x09" => ('~'^')'^'^'),
    "\x0A" => ('='^'='^'='^'('^'.'^((''=='').'')),
    "\x0B" => ('='^'='^'='^')'^'.'^((''=='').'')),
    "\x0C" => ('='^'='^'='^'='^'='^((''=='').'')),
    "\x0D" => ('='^'='^'='^'('^')'^((''=='').'')),
    "\x0E" => ('~'^'^'^'.'),
    "\x0F" => ('~'^'('^')'^'^'^'.'),
    "\x10" => ('='^'='^'~'^'('^')'^'^'^((''=='').'')),
    "\x11" => ('='^'='^'='^'='^'~'^'^'^((''=='').'')),
    "\x12" => ('='^'('^')'^'.'),
    "\x13" => ('='^'.'),
    "\x14" => ('='^')'),
    "\x15" => ('='^'('),
    "\x16" => ('='^'='^'~'^')'^'^'^'.'^((''=='').'')),
    "\x17" => ('='^'='^'~'^'('^'^'^'.'^((''=='').'')),
    "\x18" => ('='^'='^'='^'='^')'^((''=='').'')),
    "\x19" => ('='^'='^'='^'='^'('^((''=='').'')),
    "\x1A" => ('='^'~'^')'^'^'^'.'),
    "\x1B" => ('='^'~'^'('^'^'^'.'),
    "\x1C" => ('='^'~'^'('^')'^'^'),
    "\x1D" => ('='^'~'^'^'),
    "\x1E" => ('='^'='^'('^')'^'.'^((''=='').'')),
    "\x1F" => ('='^'='^'='^'='^'.'^((''=='').'')),
    "\x20" => ('~'^'^'),
    "\x21" => ('~'^'('^')'^'^'),
    "\x22" => ('='^'='^'='^'='^'='^'.'^((''=='').'')),
    "\x23" => ('='^'='^'='^'('^')'^'.'^((''=='').'')),
    "\x24" => ('='^'='^'='^'='^'='^'('^((''=='').'')),
    "\x25" => ('='^'='^'='^'='^'='^')'^((''=='').'')),
    "\x26" => ('~'^'('^'^'^'.'),
    "\x27" => ('~'^')'^'^'^'.'),
    "\x28" => ('('),
    "\x29" => (')'),
    "\x2A" => ('='^'~'^'('^'^'^'.'^((''=='').'')),
    "\x2B" => ('='^'~'^')'^'^'^'.'^((''=='').'')),
    "\x2C" => ('='^'='^'='^'~'^'^'^((''=='').'')),
    "\x2D" => ('='^'~'^'('^')'^'^'^((''=='').'')),
    "\x2E" => ('.'),
    "\x2F" => ('('^')'^'.'),
    "\x30" => ('='^'='^'='^'='^'('^')'^((''=='').'')),
    "\x31" => ('='^'='^'='^'='^'='^'='^((''=='').'')),
    "\x32" => ('='^'~'^'('^')'^'^'^'.'),
    "\x33" => ('='^'~'^'^'^'.'),
    "\x34" => ('='^'~'^')'^'^'),
    "\x35" => ('='^'~'^'('^'^'),
    "\x36" => ('='^'='^'='^'='^')'^'.'^((''=='').'')),
    "\x37" => ('='^'='^'='^'='^'('^'.'^((''=='').'')),
    "\x38" => ('='^'='^'~'^')'^'^'^((''=='').'')),
    "\x39" => ('='^'='^'~'^'('^'^'^((''=='').'')),
    "\x3A" => ('='^')'^'.'),
    "\x3B" => ('='^'('^'.'),
    "\x3C" => ('='^'('^')'),
    "\x3D" => ('='),
    "\x3E" => ('~'^'('^')'^'^'^'.'^((''=='').'')),
    "\x3F" => ('='^'='^'~'^'^'^'.'^((''=='').'')),
    "\x40" => ('='^'='^'('^')'^'^'^'.'^((''=='').'')),
    "\x41" => ('='^'='^'='^'='^'^'^'.'^((''=='').'')),
    "\x42" => ('='^'~'^'('^')'),
    "\x43" => ('='^'~'),
    "\x44" => ('='^'~'^')'^'.'),
    "\x45" => ('='^'~'^'('^'.'),
    "\x46" => ('='^'='^'='^'='^')'^'^'^((''=='').'')),
    "\x47" => ('='^'='^'='^'='^'('^'^'^((''=='').'')),
    "\x48" => ('='^'='^'~'^')'^'.'^((''=='').'')),
    "\x49" => ('='^'='^'~'^'('^'.'^((''=='').'')),
    "\x4A" => ('='^')'^'^'),
    "\x4B" => ('='^'('^'^'),
    "\x4C" => ('='^'('^')'^'^'^'.'),
    "\x4D" => ('='^'^'^'.'),
    "\x4E" => ('='^'='^'~'^'('^')'^((''=='').'')),
    "\x4F" => ('='^'='^'='^'='^'~'^((''=='').'')),
    "\x50" => ('~'^'.'),
    "\x51" => ('~'^'('^')'^'.'),
    "\x52" => ('='^'='^'='^'='^'='^'^'^((''=='').'')),
    "\x53" => ('='^'='^'='^'('^')'^'^'^((''=='').'')),
    "\x54" => ('='^'='^'='^'('^'^'^'.'^((''=='').'')),
    "\x55" => ('='^'='^'='^')'^'^'^'.'^((''=='').'')),
    "\x56" => ('~'^'('),
    "\x57" => ('~'^')'),
    "\x58" => ('('^'^'^'.'),
    "\x59" => (')'^'^'^'.'),
    "\x5A" => ('='^'='^'='^'~'^'('^((''=='').'')),
    "\x5B" => ('='^'='^'='^'~'^')'^((''=='').'')),
    "\x5C" => ('='^'='^'='^'~'^'.'^((''=='').'')),
    "\x5D" => ('='^'~'^'('^')'^'.'^((''=='').'')),
    "\x5E" => ('^'),
    "\x5F" => ('('^')'^'^'),
    "\x60" => ('='^'='^'~'^'('^')'^'.'^((''=='').'')),
    "\x61" => ('='^'='^'='^'='^'~'^'.'^((''=='').'')),
    "\x62" => ('='^'('^')'^'^'),
    "\x63" => ('='^'^'),
    "\x64" => ('='^')'^'^'^'.'),
    "\x65" => ('='^'('^'^'^'.'),
    "\x66" => ('='^'='^'='^'='^'~'^')'^((''=='').'')),
    "\x67" => ('='^'='^'='^'='^'~'^'('^((''=='').'')),
    "\x68" => ('='^'='^')'^'^'^'.'^((''=='').'')),
    "\x69" => ('='^'='^'('^'^'^'.'^((''=='').'')),
    "\x6A" => ('='^'~'^')'),
    "\x6B" => ('='^'~'^'('),
    "\x6C" => ('='^'~'^'('^')'^'.'),
    "\x6D" => ('='^'~'^'.'),
    "\x6E" => ('='^'='^'('^')'^'^'^((''=='').'')),
    "\x6F" => ('='^'='^'='^'='^'^'^((''=='').'')),
    "\x70" => ('^'^'.'),
    "\x71" => ('('^')'^'^'^'.'),
    "\x72" => ('='^'='^'='^'='^'='^'~'^((''=='').'')),
    "\x73" => ('='^'='^'='^'~'^'('^')'^((''=='').'')),
    "\x74" => ('='^'='^'='^'~'^'('^'.'^((''=='').'')),
    "\x75" => ('='^'='^'='^'~'^')'^'.'^((''=='').'')),
    "\x76" => ('('^'^'),
    "\x77" => (')'^'^'),
    "\x78" => ('~'^'('^'.'),
    "\x79" => ('~'^')'^'.'),
    "\x7A" => ('='^'='^'='^'('^'^'^((''=='').'')),
    "\x7B" => ('='^'='^'='^')'^'^'^((''=='').'')),
    "\x7C" => ('='^'='^'='^'^'^'.'^((''=='').'')),
    "\x7D" => ('='^'('^')'^'^'^'.'^((''=='').'')),
    "\x7E" => ('~'),
    "\x7F" => ('~'^'('^')'),
    "\x80" => ~('~'^'('^')'),
    "\x81" => ~('~'),
    "\x82" => ~('='^'('^')'^'^'^'.'^((''=='').'')),
    "\x83" => ~('='^'='^'='^'^'^'.'^((''=='').'')),
    "\x84" => ~('='^'='^'='^')'^'^'^((''=='').'')),
    "\x85" => ~('='^'='^'='^'('^'^'^((''=='').'')),
    "\x86" => ~('~'^')'^'.'),
    "\x87" => ~('~'^'('^'.'),
    "\x88" => ~(')'^'^'),
    "\x89" => ~('('^'^'),
    "\x8A" => ~('='^'='^'='^'~'^')'^'.'^((''=='').'')),
    "\x8B" => ~('='^'='^'='^'~'^'('^'.'^((''=='').'')),
    "\x8C" => ~('='^'='^'='^'~'^'('^')'^((''=='').'')),
    "\x8D" => ~('='^'='^'='^'='^'='^'~'^((''=='').'')),
    "\x8E" => ~('('^')'^'^'^'.'),
    "\x8F" => ~('^'^'.'),
    "\x90" => ~('='^'='^'='^'='^'^'^((''=='').'')),
    "\x91" => ~('='^'='^'('^')'^'^'^((''=='').'')),
    "\x92" => ~('='^'~'^'.'),
    "\x93" => ~('='^'~'^'('^')'^'.'),
    "\x94" => ~('='^'~'^'('),
    "\x95" => ~('='^'~'^')'),
    "\x96" => ~('='^'='^'('^'^'^'.'^((''=='').'')),
    "\x97" => ~('='^'='^')'^'^'^'.'^((''=='').'')),
    "\x98" => ~('='^'='^'='^'='^'~'^'('^((''=='').'')),
    "\x99" => ~('='^'='^'='^'='^'~'^')'^((''=='').'')),
    "\x9A" => ~('='^'('^'^'^'.'),
    "\x9B" => ~('='^')'^'^'^'.'),
    "\x9C" => ~('='^'^'),
    "\x9D" => ~('='^'('^')'^'^'),
    "\x9E" => ~('='^'='^'='^'='^'~'^'.'^((''=='').'')),
    "\x9F" => ~('='^'='^'~'^'('^')'^'.'^((''=='').'')),
    "\xA0" => ~('('^')'^'^'),
    "\xA1" => ~('^'),
    "\xA2" => ~('='^'~'^'('^')'^'.'^((''=='').'')),
    "\xA3" => ~('='^'='^'='^'~'^'.'^((''=='').'')),
    "\xA4" => ~('='^'='^'='^'~'^')'^((''=='').'')),
    "\xA5" => ~('='^'='^'='^'~'^'('^((''=='').'')),
    "\xA6" => ~(')'^'^'^'.'),
    "\xA7" => ~('('^'^'^'.'),
    "\xA8" => ~('~'^')'),
    "\xA9" => ~('~'^'('),
    "\xAA" => ~('='^'='^'='^')'^'^'^'.'^((''=='').'')),
    "\xAB" => ~('='^'='^'='^'('^'^'^'.'^((''=='').'')),
    "\xAC" => ~('='^'='^'='^'('^')'^'^'^((''=='').'')),
    "\xAD" => ~('='^'='^'='^'='^'='^'^'^((''=='').'')),
    "\xAE" => ~('~'^'('^')'^'.'),
    "\xAF" => ~('~'^'.'),
    "\xB0" => ~('='^'='^'='^'='^'~'^((''=='').'')),
    "\xB1" => ~('='^'='^'~'^'('^')'^((''=='').'')),
    "\xB2" => ~('='^'^'^'.'),
    "\xB3" => ~('='^'('^')'^'^'^'.'),
    "\xB4" => ~('='^'('^'^'),
    "\xB5" => ~('='^')'^'^'),
    "\xB6" => ~('='^'='^'~'^'('^'.'^((''=='').'')),
    "\xB7" => ~('='^'='^'~'^')'^'.'^((''=='').'')),
    "\xB8" => ~('='^'='^'='^'='^'('^'^'^((''=='').'')),
    "\xB9" => ~('='^'='^'='^'='^')'^'^'^((''=='').'')),
    "\xBA" => ~('='^'~'^'('^'.'),
    "\xBB" => ~('='^'~'^')'^'.'),
    "\xBC" => ~('='^'~'),
    "\xBD" => ~('='^'~'^'('^')'),
    "\xBE" => ~('='^'='^'='^'='^'^'^'.'^((''=='').'')),
    "\xBF" => ~('='^'='^'('^')'^'^'^'.'^((''=='').'')),
    "\xC0" => ~('='^'='^'~'^'^'^'.'^((''=='').'')),
    "\xC1" => ~('~'^'('^')'^'^'^'.'^((''=='').'')),
    "\xC2" => ~('='),
    "\xC3" => ~('='^'('^')'),
    "\xC4" => ~('='^'('^'.'),
    "\xC5" => ~('='^')'^'.'),
    "\xC6" => ~('='^'='^'~'^'('^'^'^((''=='').'')),
    "\xC7" => ~('='^'='^'~'^')'^'^'^((''=='').'')),
    "\xC8" => ~('='^'='^'='^'='^'('^'.'^((''=='').'')),
    "\xC9" => ~('='^'='^'='^'='^')'^'.'^((''=='').'')),
    "\xCA" => ~('='^'~'^'('^'^'),
    "\xCB" => ~('='^'~'^')'^'^'),
    "\xCC" => ~('='^'~'^'^'^'.'),
    "\xCD" => ~('='^'~'^'('^')'^'^'^'.'),
    "\xCE" => ~('='^'='^'='^'='^'='^'='^((''=='').'')),
    "\xCF" => ~('='^'='^'='^'='^'('^')'^((''=='').'')),
    "\xD0" => ~('('^')'^'.'),
    "\xD1" => ~('.'),
    "\xD2" => ~('='^'~'^'('^')'^'^'^((''=='').'')),
    "\xD3" => ~('='^'='^'='^'~'^'^'^((''=='').'')),
    "\xD4" => ~('='^'~'^')'^'^'^'.'^((''=='').'')),
    "\xD5" => ~('='^'~'^'('^'^'^'.'^((''=='').'')),
    "\xD6" => ~(')'),
    "\xD7" => ~('('),
    "\xD8" => ~('~'^')'^'^'^'.'),
    "\xD9" => ~('~'^'('^'^'^'.'),
    "\xDA" => ~('='^'='^'='^'='^'='^')'^((''=='').'')),
    "\xDB" => ~('='^'='^'='^'='^'='^'('^((''=='').'')),
    "\xDC" => ~('='^'='^'='^'('^')'^'.'^((''=='').'')),
    "\xDD" => ~('='^'='^'='^'='^'='^'.'^((''=='').'')),
    "\xDE" => ~('~'^'('^')'^'^'),
    "\xDF" => ~('~'^'^'),
    "\xE0" => ~('='^'='^'='^'='^'.'^((''=='').'')),
    "\xE1" => ~('='^'='^'('^')'^'.'^((''=='').'')),
    "\xE2" => ~('='^'~'^'^'),
    "\xE3" => ~('='^'~'^'('^')'^'^'),
    "\xE4" => ~('='^'~'^'('^'^'^'.'),
    "\xE5" => ~('='^'~'^')'^'^'^'.'),
    "\xE6" => ~('='^'='^'='^'='^'('^((''=='').'')),
    "\xE7" => ~('='^'='^'='^'='^')'^((''=='').'')),
    "\xE8" => ~('='^'='^'~'^'('^'^'^'.'^((''=='').'')),
    "\xE9" => ~('='^'='^'~'^')'^'^'^'.'^((''=='').'')),
    "\xEA" => ~('='^'('),
    "\xEB" => ~('='^')'),
    "\xEC" => ~('='^'.'),
    "\xED" => ~('='^'('^')'^'.'),
    "\xEE" => ~('='^'='^'='^'='^'~'^'^'^((''=='').'')),
    "\xEF" => ~('='^'='^'~'^'('^')'^'^'^((''=='').'')),
    "\xF0" => ~('~'^'('^')'^'^'^'.'),
    "\xF1" => ~('~'^'^'^'.'),
    "\xF2" => ~('='^'='^'='^'('^')'^((''=='').'')),
    "\xF3" => ~('='^'='^'='^'='^'='^((''=='').'')),
    "\xF4" => ~('='^'='^'='^')'^'.'^((''=='').'')),
    "\xF5" => ~('='^'='^'='^'('^'.'^((''=='').'')),
    "\xF6" => ~('~'^')'^'^'),
    "\xF7" => ~('~'^'('^'^'),
    "\xF8" => ~(')'^'.'),
    "\xF9" => ~('('^'.'),
    "\xFA" => ~('='^'='^'='^'~'^')'^'^'^((''=='').'')),
    "\xFB" => ~('='^'='^'='^'~'^'('^'^'^((''=='').'')),
    "\xFC" => ~('='^'~'^'('^')'^'^'^'.'^((''=='').'')),
    "\xFD" => ~('='^'='^'='^'~'^'^'^'.'^((''=='').'')),
    "\xFE" => ~('('^')'),
    "\xFF" => ~('='^'='),
);
        

7 symbols program

"Hello world!"

''=~(('(').('~'^'.'^(''=='').''^'^').('^'^(''=='').''^')'^'=').('('^'^'^'='^'.').('^'^'(').((''=='').''^'.'^'~').('('^'~'^'.'^')'^'=').('.'^(''=='').''^'=').('.'^'^').((''=='').''^'~'^'=').('^'^'('^(''=='').''^'.').('^'^')'^(''=='').''^'(').('~'^'='^(''=='').''^'('^'.').('.'^'='^'~'^(''=='').'').('='^'.'^(''=='').'').('~'^(''=='').''^')'^'.').('^'^'='^'('^'.').(')'^'('^'='^'~'^'.').('~'^'('^')'^'.'^'=').('^'^(''=='').'').('^'^'~').('^'^')').((''=='').''^'^').('~'^(''=='').''^'=').('='^')'^'('^'.'^'~').('.'^')'^'='^'^').('('^'~'^')'^'^').('('^'='^'.'^(''=='').'').((''=='').''^'='^'~'^'.').((''=='').''^'='^'.').('.'^'='^(''=='').'').('^'^')'^'='^'('^(''=='').''^'.').(')'))

Acme::HeptaSymbolize

https://github.com/sugyan/Acme-HeptaSymbolize

Acme::HeptaSymbolize

$ cat hello.pl
print "Hello world!\n";

$ perl -MAcme::HeptaSymbolize hello.pl
$ cat hello.pl
''=~(('(').('~'^(''=='').''^'^...

$ perl hello.pl
Hello world!
      

Acme::HeptaSymbolize v0.02

$ cat hello.pl
print "Hello world!\n";

$ perl -MAcme::HeptaSymbolize=shape.txt hello.pl
$ cat hello.pl
...
      

Hokkaido.pmの作り方

適当な画像を用意

Hokkaido.pmの作り方

縦方向に1/2縮小

Hokkaido.pmの作り方

適当に縮小

Hokkaido.pmの作り方

ピクセル抽出

Hokkaido.pmの作り方

ピクセル抽出

                                                                                
                        ###                                                     
                     ########                                                   
                     ##########                                                 
                     ############                                               
                     #############                                              
                      ##############                                            
                       ###############                                          
                        ################                                        
                        ###################                           ##        
                        #######################                     ####        
                       ###########################                 #####        
                       ###################################       #####          
                       ###############################################          
                       ##############################################           
                      ##################################################        
                    ###################################################         
                    ####################################################   #### 
                    ########################################################### 
                    #########################################################   
        ###          ######################################################     
       ##########   ##################################################          
       ###########################################################              
        #################################################                       
         ##############################################                         
      ###############################################                           
   ################################################                             
 #################################################                              
 #####################        ###################                               
 ########      #####              ###############                               
 #########                            ###########                               
 ##############                            ######                               
   ##############                             ##                                
     ################                                                           
      ###############                                                           
    ######### #######                                                           
    #######                                                                     
    #######                                                                     
      

Hokkaido.pmの作り方

$ echo -n 'print"Hello, Hokkaido.pm!\n"' | perl -MAcme::HeptaSymbolize=hokkaido.txt

                        '.'                                                     
                     =~(('(')                                                   
                     .('~'^((''                                                 
                     )=='').('')^                                               
                     '.'^'^').('^'                                              
                      ^')'^'='^(''==                                            
                       '').'').(('(')^                                          
                        '.'^'='^('^')).(                                        
                        '^'^'(').('.'^(''==                           ''        
                        ).''^'~').('~'^'.'^'='^                     '('^        
                       ')').((''=='').''^'='^'.').                 ('^'^        
                       '.').('='^(''=='').''^'~').('^'^'('       ^'.'^          
                       (''=='').'').(')'^'^'^'('^(''=='').'').('~'^'('          
                       ^(''=='').''^'='^'.').((''=='').''^'='^'~'^'.'           
                      ).('.'^'='^(''=='').'').((''=='').''^'~'^'.'^')').        
                    ('.'^'='^'('^'^').('.'^'='^'('^')'^'~').('.'^('=')^         
                    '~'^'('^')').('^'^(''=='').'').('~'^(''=='').''^'='^   '^') 
                    .('^'^'~').(')'^'~'^'.'^(''=='').'').('^'^(''=='').'').('=' 
                    ^'('^'~').('='^'~'^'(').('.'^(''=='').''^'~').((''=='').(   
        '')          ^'('^'^'^'.').('^'^'.'^')'^'=').('^'^(''=='').'').('.'     
       ).('^'^'.'   ).('='^'.'^'~').('~'^'^'^'('^')').('='^'.'^(''==''          
       ).''^'(').((''=='').''^'='^'.'^'~').('.'^'='^(''=='').'').(              
        '.'^'='^(''=='').'').('='^'.'^(''=='').''^'(').((                       
         '.')^'='^'('^(''=='').'').('.'^(''=='').''^'('                         
      ^'=').('('^(''=='').''^'='^'.').('='^'('^(''==(                           
   '')).''^'.').('.'^'('^'='^(''=='').'').('='^((''                             
 )=='').''^'('^'.').('('^'='^(''=='').''^'.').('.'                              
 ^'('^(''=='').''^'=')        .('('^'.'^'='^(''==                               
 '').'').      ('.'^              '='^'('^(''==''                               
 ).('')).(                            '('^'.'^'='                               
 ^(''=='').'').                            ('^'^(                               
   '(')^')'^'='^(                             ((                                
     '.')))^(''=='').                                                           
      '').(')').('').                                                           
    ''.''.''. ''.~''.                                                           
    ''.~''.                                                                     
    ''.~'')                                                                     
      
#!/usr/bin/env perl
use strict;
use warnings;

use Getopt::Compact;
use Imager;

my $gc = Getopt::Compact->new(
    struct => [
        [['image', 'i'] => 'image', '=s'],
        [['width', 'w'] => 'width', ':i'],
    ],
);
my $opts = $gc->opts;
die $gc->usage unless $opts->{image};

my $img = Imager->new(file => $opts->{image})
    or die Imager->errstr;

my $newimg = $img->scaleY(
    scalefactor => 0.5,
)->scale(
    scalefactor => ($opts->{width} || 80.0) / $img->getwidth,
);

for my $y (0 .. $newimg->getheight - 1) {
    my @colors = $newimg->getscanline(y => $y);
    for my $color (@colors) {
        # threshold
        print +($color->rgba)[1] > 128 ? '#' : ' ';
    }
    print "\n";
}
        

demo

整形

...#########  ########...
...'.'^'='^'  ('^'~'.....   # NG!
...'.'^'='^(  '(')^'~'...   # OK!

整形

...##########
....(')'))         # NG!
....(')').'')      # OK!

整形

...###########
....(')'))         # NG!
....(')').~'')     # OK!

整形

...############
....(')'))         # NG!
....(')').(''))    # OK!

整形

...#############
....(')'))         # NG!
....(')').(~''))   # OK!

整形

''=~('(?{'."CODE".'})')

''=~('(?{'."CODE" . " ".'})')

''=~('(?{'."CODE" . "\n".'})')
      
                                         '.'                                                    
                                        =~((((                                                  
                                        '(')))                                                  
                                        .('.'^   (''=='')                                       
                               .''^'~'^'^').('^'^'='^')'^((                                     
                      '')=='').'').('('^'^'^'.'^'=').('^'^(                                     
                '(')).('~'^'.'^(''=='').'').(('~')^    ((                                       
              '='))^')'^'.'^'(')         .('.'^                                                 
              (''=='').''                ^'=').                                                 
               ('^'^               '.'   ).('~'                                                 
                                ^(''=='').('')^                                                 
                              '=').('^'^'.'^(''                                                 
                             =='').''^'(').(')'                                                 
                            ^'('^'^'   ^(''==(                                                  
                           '')).''      ).('('                                                  
                           ^((''        )=='').                                                 
                           ('')^        '~'^'.'                                                 
                           ^'=')       .(('.')^                (       '=')^                    
                           (''==''    ).''^'~').             ('='^      (''==                   
                            '').''^'.').('~'^')'             ^'='^(     '(')^(                  
                              ''=='').'').(('=')^             ('~')^     ')'^((                 
                                   ('')    )=='').       ''   ^'.').      ('('^                 
                                            (''=='').''^'~').  ('.'^(     ')')^(                
                                        '~')).('.'^'~'^(''==(  '')).(      '')).(               
                                  '^'^')'^(''=='').''^'('       ).(((       '='))               
                              ^'('^(''=='').''^'.').             ('='^       '~'^(              
                              ''=='').''^(     '.')).      ('.'^'='^(''      =='')              
                                .'').           ((''=='').''^'='^'.').(       '='^              
                                                 (''=='').''^'('^'.').(         (               
                                           ''=='').''^'.'^'='                                   
                                     ^'(').('='^'('^'.'^                                        
                                (''=='').'').('('^'='^(''                                       
                                =='').''^'.').      ((''==                                      
                                 '').''^            ('.')^                                      
                                                     ('=')^                                     
                                                    '(').((                                     
                                 ((                 '^')))                                      
                               ^'('^(                '.'                                        
                                )^(')')^                                                        
                                 '='^(''==''                                                    
                                    ).'').(')').                                                
                                       ''.(~'').~''.                                            
                                           ''.('').''.                                          
                                               ''.'')                                           
        


Thank you for your attention.