今回もガチャです。シェル関数でガチャ作ります。
前回は、総数が決まっていないタイプのガチャを作りましたが、
今回は、総数を固定させて、全部引いたら必ず当たりが入る仕掛けでガチャを作ります。
ファイルgachaに*を★に見立てて、★1キャラが90個、★2キャラは9個、★3キャラ1個を、保存します。
takk@deb9:~/tmp$ perl -e 'print "***\n" . "**\n"x9 . "*\n"x90' > gacha takk@deb9:~/tmp$ wc -l gacha 100 gacha takk@deb9:~/tmp$
headすると、シャッフルしていないので、いきなり先頭で★3が登場します。
takk@deb9:~/tmp$ head gacha *** ** ** ** ** ** ** ** ** ** takk@deb9:~/tmp$
シャッフルはshufコマンドを使います。
takk@deb9:~/tmp$ mv gacha tmp takk@deb9:~/tmp$ shuf tmp > gacha takk@deb9:~/tmp$
あらためて、headしてみます。
takk@deb9:~/tmp$ head gacha * * * * * * * * * * takk@deb9:~/tmp$
シャッフルされたことで、一番数の多い★1が上の方に集まったようです。
ガチャを引いたら、残りのくじの数を減らさないといけないので、tailコマンドで先頭10個削除しておきます。
takk@deb9:~/tmp$ mv gacha tmp takk@deb9:~/tmp$ tail -n +11 tmp > gacha takk@deb9:~/tmp$
gachaファイルの行数を見てみましょう。
takk@deb9:~/tmp$ wc -l gacha 90 gacha takk@deb9:~/tmp$
10行減って90行になりました。
では、今までの手順をまとめてシェル関数にしてみます。
add_gacha関数では、gachaファイルに100個のくじを追加します。
takk@deb9:~/tmp$ add_gacha(){ > perl -e 'print "***\n" . "**\n"x9 . "*\n"x90' >> gacha > shuf gacha > tmp > mv tmp gacha > } takk@deb9:~/tmp$
gachaファイルがない場合は、新規に100個のくじが入ったgachaファイルを作成します。
作成したシェル関数、add_gachaを使ってみます。
takk@deb9:~/tmp$ rm gacha takk@deb9:~/tmp$ add_gacha takk@deb9:~/tmp$ wc -l gacha 100 gacha takk@deb9:~/tmp$ head gacha * * * * * * * * ** * takk@deb9:~/tmp$
いきなり★2個が出ました。くじ運、良いです。
では、ガチャを回すシェル関数を作ります。
takk@deb9:~/tmp$ roll_gacha(){ > mv gacha tmp > head tmp > tail -n +11 tmp > gacha > } takk@deb9:~/tmp$
使ってみます。
takk@deb9:~/tmp$ wc -l gacha 100 gacha takk@deb9:~/tmp$ roll_gacha * * * * * * * * ** * takk@deb9:~/tmp$ wc -l gacha 90 gacha takk@deb9:~/tmp$
当然ですが、さきほどheadした結果と同じですね。くじ運いいです。
では、★3もすぐ出せるでしょうか。運試ししてみます。
takk@deb9:~/tmp$ roll_gacha | xargs * * ** * * * * * ** * takk@deb9:~/tmp$ !! roll_gacha | xargs * * * * * * * * * * takk@deb9:~/tmp$ !! roll_gacha | xargs * * * * * * * * * * takk@deb9:~/tmp$ !! roll_gacha | xargs * * * * * * * * * * takk@deb9:~/tmp$ !! roll_gacha | xargs * * * ** * * ** * * * takk@deb9:~/tmp$ !! roll_gacha | xargs * * * * * * * * ** * takk@deb9:~/tmp$ !! roll_gacha | xargs * *** * * * * * * * * takk@deb9:~/tmp$ wc -l gacha 20 gacha takk@deb9:~/tmp$
100個中、残り20個になって、ようやく★3出せました。
やはり、くじ運、悪いです。
コメント