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() 関数を用いて比較的簡単に表現できました。




