このブログは本田未央Advent Calendarの14日目です。
本田未央Advent Calendar
まだまだ参加者募集中なのでよければぜひ。(主催なのにあんまり企画の話ができていなくて申し訳ないです…)
せっかくなのでAdvent Calendarらしいことをしようかと思って、みお言語インタープリターを作りました。
「み」「お」「っ」の三文字だけであらゆるプログラムを実装できるすごいやつだよ。
これにより、未央は移動するときの音にあらゆるプログラムをコードできるようになりました。やったね。
まあ例にもれずぶっちゃけwhitespaceのパクリです…。
正直大石泉とかでもうありそう。
https://github.com/lunashade/miolang
遊び方
GithubのリリースページからOSとCPUアーキテクチャがあったものをダウンロードして解凍。
CPUアーキテクチャについてはx86_64が64bit用、i386が32bit用です。
解凍して出てきたmiolang(.exe)に第一引数にソースコードのパスを渡すと実行。
たとえばGithubに上げたサンプルコードをダウンロードしてきて、
コマンドプロンプトで
> ./miolang.exe miomio.mio
のようにして起動すると、
「みおみおみおっ」という文字列を印字して終了します。
中身について
中身はWhitespaceで、
スペースを「み」、タブ文字を「お」、改行を「っ」にしただけです。
Whitespaceは見た目の割には結構多機能なので、詳しい解説はWhitespace超入門なんかを参考にしてみてください。こちらのPDFには大変お世話になりました。
インタープリタ自体はGo製です。
独自仕様っぽいところ
- intの精度について。本来の仕様は無限の精度を許容するらしいんですが、今の所Goのintと同じ精度。ラベルとかも同様です。
- IOについて、ASCIIだけでなくUTF-8の対応するコードポイントを入力・出力する。まぁ「みおみおみお」を印字したいプログラムなので…
- 入力に整数を期待するところでいきなり終端記号「っ」(LF)が来た場合は0が入力されたものとみなす。これはラベルについても同様。
すなわち、整数「みみっ」と「っ」が同じく0。
- プログラムの終端が「っっっ」で終わっていなくても入力の終端に来たら終了する。
やってみた感想
Brainf**kは作ったことあったんですが、それの気分でWhitespaceに向き合うと機能が多すぎてびっくりするんですよね。
ラベル貼ってジャンプできるしサブルーチンもあれば、スタックもヒープもあるので、そのへんの仕組みを結構実装してあげないといけないという。
Goをあまり使う機会がなかったので割と色々試せてよかったなあという気持ちがあります。
go generate
使ったことがなかったので、とかどう使うのがいいのか(tools.goを用意してバージョン固定する・go run経由ならダウンロードしてビルドしてくれる)とかをしれたり- パーサをRob PikeのLexical Scanning in Goにインスパイアされた感じで書いてみたり
結構色々と学びが多くて楽しかったです。
まだエラー処理とかが雑で結構完成度低いので、気が向いたらもう少し色々と仕上げたいですね…。
参考文献
最近やりだしたアルバハHLソロ。
救援がろくにこないし、人集めもしんどいので、ソロでできるようにした上で救援流して~みたいなことをやっている。
天司をフルオートでやって天破という手もないではないが、まぁ輪っかが一戦2個ペースだから自発フルオートのみじゃ足んないよなーという。
それは流石に面倒なので…
ただまぁトリガー覚えてなくてガバり散らかすので、一回まとめておこうねという。
マジェの本数があればもっと楽なのにね…
編成
闇です。
ランバー・シス・バレクラ・ゾーイ/ニーア・レイ
ゾーイはコンジャクデスで即落とし。
主人公アビは「クリアオール」「木漏れ日」「リヴァイブ」。
石は「テュポーン」「黒麒麟」「トール(75~50用)」「デス」。
今のところ50~30%はギリなのでどうにもね…
タイムライン
今やっている編成のメモ書きなので完全に自分用です。
100~95
今昔デスいれて頭3ターンかける。
95で1万ダイダ。高揚はクラリス3を当てる。
2ターンで95%踏むとクラリスのHPが足りなかったし、クリティカルで15000になること考えると多分ほかも足りない。
受けきれないならニーア2を入れて軽減する。
95~86
CT
- 通常: 1万ダイダ / レギンレイヴ(強圧)
- OD: 1万ダイダ / キルフレア
85にキルフレア。この区間はCTを受けるしかない。
ダイダなら楽なんですけど、まぁニーア2を主人公に入れながら顔面受けしかないんですかね…。たぶん受かってない。
グラビは入らず、スロウは入るのでクラリス奥義を打てればそれでも。
85~75
こっからグラビ通る。この区間はスロウNG。
CT
- 通常: 1万ダイダ / レギンレイヴ(強圧)
- OD: 無属性ダイダ / キルフレア
早めにニーアを落としておきたい。ハデス睡眠またはシス3恐怖を入れたりしつつ特殊を打たせないようにする。無ダイダとキルフレアの両対応は辛い…。
80CTMAXに注意してうまく調整してからバレクラ3のグラビいれたいですね。
76近辺でbreakできるので、レイ1→シスとかしながらそこまで頑張って殴る。
75バスコンは幻影受けが望ましい。
超えるまではニーアにリヴァイブを入れない。
75~50
グラビ・スロウが通る。
CT
- 通常: バスコン
- OD: 神撃 / キルフレア(防ダウン石化)
75リヴァイブ→ニーアしてトール。
木漏れ日やシューニャ奥義はマウントのために使っていく。
70神撃・55キルフレア(防ダウン石化)あたりを受けたい。
70神撃バフはレイ奥義で消したい。
このへんでレイ4が上がっているので、何か(CTのキルフレアあたり)をレイ3を使って受けて、レイ4でリキャを回すとかがありなんかなーという感じ
50~30
50, 40の無シリウスはオルポ飲んで頑張る。
45, 35の属性シリウスはいうて顔面でも受かる印象。シス2奥義かレイ3。
DPSチェックはテュなしでぬけられたことが一回しかないです。
なんかガバってレイが落ちてるのが原因だと思いますけど…
30~15
正味この区間は意識ない。
CT
- 通常: ゴッドヴォイス / オメガブラスト
- OD: 破局
28CTMAX、22オメガブラスト。
スロウも入るし、通常も単体だし、15%への準備区間という感じ。
一応特殊はバレクラ1のブロックとかで受けたいですね
15~
15破局はレイ3で受ける。渇望残ってればあとはなんとでもなる
10ビッグバンはシス2。5キルフレアは顔面。
1%は踏まないようにする。
だめなら救援で。
出典
機運が出てきたのでブログ環境を作ることにした。
設定について。
Github Actionsによるビルド
全面的にこちらのQiita記事GitHub Actions による GitHub Pages への自動デプロイを参考にした。
https://github.com/lunashade/blog で管理することにした。
記事の作成
基本hugo new **.md
だけ知ってれば十分
ただまあ色々面倒なので、cargo-make
を導入してやることにした。
makers post <title>
でpostを作成してエディタが開く。
コマンドは色々と実装していこう…