Apple Lines の出力

AppleLinesの出力 - みずぴー日記 にインスパイヤされてこの問題を解いてみます。 元はanarchy golf - apple lines です。

ここではAppleLinesの出力 - みずぴー日記と同じく、最初に長い文字列を作って、そこから一部を切り出す形でプログラムしてあります。

#! /usr/local/bin/nawk -f
# apple_lines.awk
# Apple Lines の出力
# usage: nawk -f apple_lines.awk num

BEGIN {
    num = ARGV[1];

    init_str = "apple*************************";

    print init_str;
    for (i = 1; i <= num; i++) {
        new_str = apple_lines(new_str ? new_str : init_str);
        print new_str;
    }
}

# apple_lines():    Apple Lines を返す
#   in:     文字列 (str)
#   out:    ひとつ後の Apple Lines
function apple_lines(str) {
    return substr(str, length(str)) substr(str, 1, length(str) - 1);
}

実際に実行してみましょう。

$ nawk -f apple_lines.awk 0
apple*************************

$ nawk -f apple_lines.awk 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*************************

awk の substr() 関数を用いて比較的簡単に表現できました。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png