Snippets

sironekotoro 正弦波っぽい何か

Created by sironekotoro last modified
use strict;
use warnings;

# OUTPUT AUTOFLASH
# http://perldoc.jp/docs/perl/5.20.1/perlvar.pod
# 出力を溜め込まず、for 文の中で print 行が
# くる都度表示する特殊変数(特殊変数なので my は不要)
# この行がない場合、処理が全て終わってから一気に結果が描画される
$| = 1;

my $count = 0;      # *の数を表示するカウンター用変数
                    # 最少0, 最大20

my $flag  = 'plus'; # 星の数を増減する判断で利用するフラグ
                    # plus か minus の文字列しか入らない
                    # 想定

# 正弦波のロジックを組み立てられなかったので、以下の
# ように動く変数とフラグ制御を実装
#  - 0から20まで増えるカウンタを用意
#  - カウンタが10で割り切れる時に、* の表示の増減を逆転する
#    フラグ(plus/minus)を用意
#    - フラグが plus の時はカウンタの数だけ * を表示する
#    - フラグが minus の時は 20 - カウンタの数だけ * を表示する
#  - カウンタの数字が20になったら0で上書きする


# for文で1000回処理を繰り返す
for ( 1 .. 1000 ) {
    sleep 1;

    # フラグが plus であれば * を $count の数だけ表示して改行する
    if ( $flag eq 'plus' ) {
        print '*' x $count, "\n";
    }
    # フラグが plus でない(つまり minus )であれば * を
    # 20 - $countの数だけ表示して改行する
    else {
        print '*' x ( 20 - $count ), "\n";
    }

    # カウントを増やす
    $count++;

    # カウントが20で割り切れる値であり、かつ、
    # フラグが plus の場合は $count の最大値に達したと
    # 判断
    # フラグを plus から minus に変更する
    if ( $count % 10 == 0 && $flag eq 'plus' ) {
        $flag = 'minus';
    }
    # カウントが20で割り切れる値であり、かつ、
    # フラグが minus の場合は最小値に達したと
    # 判断
    # フラグを minus から plus に変更する
    elsif ( $count % 10 == 0 && $flag eq 'minus' ) {
        $flag = 'plus';
    }

    # カウントが20に達したらカウントを0にする
    if ( $count == 20 ) {
        $count = 0;
    }
}

Comments (0)