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"; }