シェル関数でガチャを作る

今回もガチャです。シェル関数でガチャ作ります。

前回は、総数が決まっていないタイプのガチャを作りましたが、
今回は、総数を固定させて、全部引いたら必ず当たりが入る仕掛けでガチャを作ります。

ファイル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出せました。
やはり、くじ運、悪いです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA