AppleLinesの出力

30分プログラム、その633。anarchy golf - apple linesにインスパイアされて、apple linesの出力をやってみました。
apple linesが何かは、例を見たほうが早いと思います。

$ perl apple.pl 30
apple*************************
*apple************************
**apple***********************
***apple**********************
****apple*********************
*****apple********************
******apple*******************
*******apple******************
********apple*****************
*********apple****************
**********apple***************
***********apple**************
************apple*************
*************apple************
**************apple***********
***************apple**********
****************apple*********
*****************apple********
******************apple*******
*******************apple******
********************apple*****
*********************apple****
**********************apple***
***********************apple**
************************apple*
*************************apple
e*************************appl
le*************************app
ple*************************ap
pple*************************a
apple*************************

要するに、appleが左から右に流れていくイメージです。

n行目の文字列を、直接生成する形だと分岐が非常に多くなりそうだったので、最初に長い文字列を作って、そこから一部を切り出す形で実現しました。

使い方

$ perl apple.pl 0
apple*************************

$ perl apple.pl 30
apple*************************
*apple************************
**apple***********************
***apple**********************
****apple*********************
*****apple********************
******apple*******************
*******apple******************
********apple*****************
*********apple****************
**********apple***************
***********apple**************
************apple*************
*************apple************
**************apple***********
***************apple**********
****************apple*********
*****************apple********
******************apple*******
*******************apple******
********************apple*****
*********************apple****
**********************apple***
***********************apple**
************************apple*
*************************apple
e*************************appl
le*************************app
ple*************************ap
pple*************************a
apple*************************

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# apple.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/08/06 22:09:02
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#


use strict;
use warnings;

use constant Padding => '*' x (30 - length 'apple');
use constant APPLE_LINE => ('apple'.Padding.'apple'.Padding);

sub apple_line($){
    my ($n) = @_;
    $n %= 30;
    substr APPLE_LINE,30-$n,30;
}

my $n = int($ARGV[0]);

for(0..$n){
    print apple_line($_),"\n";
}