Inspired by Len's recent spiralling quine,
I have created a somersaulting camel.
camel.pl:
(Save all text between the ------ lines below)
------------------------------------------------------------------
''=~('(?{'.(
('`')| '%').('['^'-').
('`'|'!'). ('`'|',').'"'.('['
^'(').('[' ^'.'). ('`'|'"').('{'^'[').
'_\\{'.('['^('(')).( '['^'"').('['^('(')).(
'['^'/').('`'|"\%").( '`'|'-').'\\$^'.(('`')^
'/').'=~'.('{'^',') .('`'|')').('`'|'.').'?'.(
'`'^'#').('`'^ ',').('{'^'(').':'."'".("\`"|
'#').('`'|',') .('`'|'%').('`'|'!').('['^"\)").
"'".';'.(('[')^ '+').('['^')').('`'|')').('`'|'.').
('['^'/').'\\$' .'\\"'.('['^'#').'+'.('`'|'!').(('`')|
'"').('['^'('). '('.('^'^('`'|'/')).(':'&'=').'*('.('^'^
('`'|',')).'*' .'\\$|-\\$;)),\\$_,\\$/'.('`'|'&').("\`"|
'/').('['^')') .'\\@_;'.('['^'(').('`'|',').('`'|('%')).(
'`'|'%').('['^'+').('{'^'[').('^'^('`'|'/')).'\\}'.(('`')|
'/').('['^'+').('`'|'%').('`'|'.').'\\$%;'.('`'|'#').("\`"|
'(').('`'|'/').('['^'+').','.('['^'"').',!-~,#,,'.('['^'('
).',(.).?,\\$+,'.('`'|"'").('`'|'&').('`'|'/').('['^(')')).
'\\@~='.('`'|"'").('['^')').('`'|'%').('['^'+').'\\$|--,<'.
('^'^('`'|'.')).'>;\\@;='.('`'|'-').('`'|'!').('['^('+')).
'~~'.('['^')').('`'|'%').('['^'-').('`'|'%').('['^')' ).(
'['^'(').('`'|'%').','.('['^')').('`'|'%').('['^'-' ).(
'`'|'%').('['^')').('['^'(').('`'|('%')). '\\@~;(' .((
'\\')).'$;=\\$_%'.('^'^('`'|'-')).')|' .'|(--' .((
'\\') ).'$|,'.('`'|'-').('`'|"\!").( '['^'+' ).+
'\\{\\$_='.('['^')').('`'|'%' ).('['^ '-'
).("\`"| '%').('['^ ')').( ('[')^ ((
'('))). ('`'|'%' ).'\\' .'}\\' .+
'@~,\\' .'@;),_' .'\\' .'$;' .
"\&".( '^'^('`' |'/' )).+
'?\\@' .';:\\@~' .''. ('`'
|'&') .(('`')| '/') .''.
('['^ (')')). '\\' .'$'
.'%' .'..'. ('^' ^(((
'`') )|+ '/') ).+(
'^'^ ((( '`' ))|
'/' )). '"' .((
'}' )). ')' );(
$:) =(( '.' ))
^+ '~';$~ =(
(( '@')) )|
(( '('));$^ =(
')' )^(( '[')) ;(
$/) ="\`"| '.'; $_=
'('^ "\}";$,= '`' |'!'
;($\)= (')')^
"\}";$:= '.'^'~'
------------------------------------------------------------------
To run this program, save as camel.pl (say), then:
perl camel.pl
and watch the camel somersault across the screen.
camel.pl above was created with:
perl gencamel.pl >camel.pl
where gencamel.pl is:
use Acme::EyeDrops qw(sightly);
my $src = <<'END_SRC_STR';
sub _{system$^O=~Win?CLS:'clear';
print$"x+abs(18*(2*$|-$;)),$_,$/for@_;sleep 1}
open$%;
chop,y,!-~,#,,s,(.).?,$+,gfor@~=grep$|--,<0>;
@;=map~~reverse,reverse@~;
($;=$_%3)||(--$|,map{$_=reverse}@~,@;),
_$;&1?@;:@~for$%..11
END_SRC_STR
$src =~ tr/\n//d;
my $prog = sightly( { Regex => 1,
Compact => 1,
Shape => 'camel',
SourceString => $src } );
my @a = split(/\n/, $prog);
my $max = 0; length > $max and $max = length for @a;
$_ .= ' ' x ($max - length) for @a;
print " $_ \n" for @a;
It was quite a struggle to make this program small enough
to fit into a single camel shape, so any further golfing
improvements to gencamel.pl above are most welcome.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.