hotaruの蛍雪日記

競プロとゲームをしています

【ポケモンユナイト#5】第2シーズンもマスター昇格

ポケモンユナイト、第2シーズンのランクマッチもマスターに昇格しました。

f:id:hotarunx:20220116234850j:plainf:id:hotarunx:20220116234853j:plainf:id:hotarunx:20220116234856j:plain

成績

チームを組まず完全にソロでプレイしました。 ランクマッチのバトル数は84、勝率は57.4%でした。

ピック

りゅうまいカイリュー

  1. 竜巻竜舞破壊光線
  2. おたバリちかハチツメ
  3. なんでもなおし
  4. 中央下

強すぎる。 ちかハチツメとのシナジーが強い。 破壊光線でラストヒット取る。

3Aアマージョ

  1. はっぱカッタートリプルアクセルグラスラ
  2. ちかハチきあハチ弱保
  3. なんでもなおし
  4. 上下中

強い。 女王の威厳を有効発動させて暴れる。

うたうプクリン

  1. はたくうたうマジシャ
  2. おたバリきあハチゴルサポ
  3. きずぐすり
  4. 下上

無難に強い。

【ウマ娘#06】スコーピオ杯ゴールド

チャンピオンズミーティングのスコーピオ杯に出ました。

ゴールドでした。残念。 グレードリーグAグループ決勝ラウンドで2位を取りました。

f:id:hotarunx:20211128220912p:plain

  • 決勝試合
  • 育成方法
    • 1. 出走ウマ娘選択
    • 2. 目標ステータス&サポート編成仮決定
    • 3. 因子厳選目標設定
    • 4. 祖父母因子厳選
    • 5. 親因子厳選
      • タイキの親因子厳選
      • 会長グラスの親因子厳選
    • 6. 本育成
      • タイキ
      • グラス
      • 会長
    • 7. 感想
  • 今後の予定
  • プロファイル
  • サポートカード一覧
続きを読む

oj-prepareした問題をVSCodeとブラウザで開く【oj-prepare-open】

まずはこの動画を見てください。

youtu.be

私はoj-prepareで指定した問題やコンテストに対し、テンプレートをVSCodeで開き、ブラウザで問題ページを開くスクリプトを作成して使っています。

今回はこのスクリプト、名付けてoj-prepare-openを紹介します。

実装

fish-shellスクリプトです。

#!/bin/fish
# oj-prepare-open/hotarunx
# oj-prepareで指定した問題やコンテストに対し、
# テンプレートをVSCodeで開き、ブラウザで問題ページを開く

set templete_code_ext '.cpp' # 開くファイルの拡張子
set interval 60 # インターバル

set download_history ~/.cache/online-judge-tools/download-history.jsonl # ojの履歴ファイルのパス
set histories (tail -n100 $download_history) # 履歴ファイルのレコード最新100

set last_time (echo $histories[-1] | jq -r '.timestamp') # 最後の履歴のタイムスタンプ

# 履歴を走査する
for row in $histories
    # この履歴のタイムスタンプ
    set this_time (echo $row | jq -r '.timestamp')

    # この履歴と、最新の履歴の時間間隔がinterval未満のとき
    if test (math $last_time - $this_time) -le $interval
        # VSCodeで問題のテンプレートを開く
        find (echo $row | jq -r '.directory') -name '*'$templete_code_ext | xargs code
        # ブラウザで問題ページを開く
        open (echo $row | jq -r '.url')
    end
end

github.com

使用方法

使用前にjqをインストールしてください。 シェルはfish-shellを使用してください。 oj-prepare-open.shをダウンロードし、適当な場所に置いてください。

oj-prepareを実行した後、fish oj-prepare-open.shを実行してください。 過去最新のoj-prepareした問題やコンテストに対し、テンプレートをVSCodeで開き、ブラウザで問題ページを開きます。

*.cppファイル以外のテンプレートファイルを開きたいならば、次の行の拡張子を変更してください。

-set templete_code_ext '.cpp' # 開くファイルの拡張子
+set templete_code_ext '.py' # 開くファイルの拡張子

注意事項

  • fish-shellスクリプトなのでbash, zsh, powershell, cmd等々では動きません
  • 開くファイルの拡張子は1つしか指定できません
  • 最後にoj-prepareで指定した問題と、それより60秒前以内にoj-prepareで指定した問題に対してVSCodeとブラウザで開く処理になっています(実装の都合です)。60秒以内に複数回oj-prepareすると挙動がおかしくなります
  • 負荷軽減のため最新100の履歴しか参照しないようにしています。もし問題が100個以上あるコンテストに出るときは定数を変えてください

おまけ

VSCodeタスク連携

hotarunx.hatenablog.com この記事で解説したテンプレート生成とサンプルのダウンロードのタスクの後にoj-prepare-openを実行したいならば、次のように書きます。

        {
            "label": "oj-prepare: テンプレート生成とサンプルのダウンロード",
            "type": "shell",
            "command": "oj-prepare",
            "args": [
                "${input:URL}",
                ";",
                "fish",
                "oj-prepare-open.sh"
            ],
            "group": "test"
        },

実装方法

oj-prepare-openの実装方法について説明します。

まず、ojは以下のような内容の履歴ファイルを持ちます。

~/.cache/online-judge-tools/download-history.jsonl

{"timestamp": 1636281672, "directory": "/home/hotaru/procon/atcoder.jp/abs/practice_1/atcoder.jp/abs/practice_1", "url": "https://atcoder.jp/contests/abs/tasks/practice_1"}
{"timestamp": 1636281672, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc086_a/atcoder.jp/abs/abc086_a", "url": "https://atcoder.jp/contests/abs/tasks/abc086_a"}
{"timestamp": 1636281673, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc081_a/atcoder.jp/abs/abc081_a", "url": "https://atcoder.jp/contests/abs/tasks/abc081_a"}
{"timestamp": 1636281674, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc081_b/atcoder.jp/abs/abc081_b", "url": "https://atcoder.jp/contests/abs/tasks/abc081_b"}
{"timestamp": 1636281674, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc087_b/atcoder.jp/abs/abc087_b", "url": "https://atcoder.jp/contests/abs/tasks/abc087_b"}
{"timestamp": 1636281675, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc083_b/atcoder.jp/abs/abc083_b", "url": "https://atcoder.jp/contests/abs/tasks/abc083_b"}
{"timestamp": 1636281676, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc088_b/atcoder.jp/abs/abc088_b", "url": "https://atcoder.jp/contests/abs/tasks/abc088_b"}
{"timestamp": 1636281676, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc085_b/atcoder.jp/abs/abc085_b", "url": "https://atcoder.jp/contests/abs/tasks/abc085_b"}
{"timestamp": 1636281677, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc085_c/atcoder.jp/abs/abc085_c", "url": "https://atcoder.jp/contests/abs/tasks/abc085_c"}
{"timestamp": 1636281678, "directory": "/home/hotaru/procon/atcoder.jp/abs/arc065_a/atcoder.jp/abs/arc065_a", "url": "https://atcoder.jp/contests/abs/tasks/arc065_a"}
{"timestamp": 1636281679, "directory": "/home/hotaru/procon/atcoder.jp/abs/arc089_a/atcoder.jp/abs/arc089_a", "url": "https://atcoder.jp/contests/abs/tasks/arc089_a"}
{"timestamp": 1636282092, "directory": "/home/hotaru/procon/atcoder.jp/abs/practice_1", "url": "https://atcoder.jp/contests/abs/tasks/practice_1"}
{"timestamp": 1636282092, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc086_a", "url": "https://atcoder.jp/contests/abs/tasks/abc086_a"}
{"timestamp": 1636282092, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc081_a", "url": "https://atcoder.jp/contests/abs/tasks/abc081_a"}
{"timestamp": 1636282093, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc081_b", "url": "https://atcoder.jp/contests/abs/tasks/abc081_b"}
{"timestamp": 1636282094, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc087_b", "url": "https://atcoder.jp/contests/abs/tasks/abc087_b"}
{"timestamp": 1636282094, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc083_b", "url": "https://atcoder.jp/contests/abs/tasks/abc083_b"}
{"timestamp": 1636282095, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc088_b", "url": "https://atcoder.jp/contests/abs/tasks/abc088_b"}
{"timestamp": 1636282096, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc085_b", "url": "https://atcoder.jp/contests/abs/tasks/abc085_b"}
{"timestamp": 1636282097, "directory": "/home/hotaru/procon/atcoder.jp/abs/abc085_c", "url": "https://atcoder.jp/contests/abs/tasks/abc085_c"}
{"timestamp": 1636282098, "directory": "/home/hotaru/procon/atcoder.jp/abs/arc065_a", "url": "https://atcoder.jp/contests/abs/tasks/arc065_a"}
{"timestamp": 1636282099, "directory": "/home/hotaru/procon/atcoder.jp/abs/arc089_a", "url": "https://atcoder.jp/contests/abs/tasks/arc089_a"}
{"timestamp": 1636286446, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_a", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_a"}
{"timestamp": 1636286447, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_b", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_b"}
{"timestamp": 1636286447, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_c", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_c"}
{"timestamp": 1636286448, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_d", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_d"}
{"timestamp": 1636286449, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_e", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_e"}
{"timestamp": 1636286450, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_f", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_f"}
{"timestamp": 1636286450, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_g", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_g"}
{"timestamp": 1636286451, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_h", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_h"}
{"timestamp": 1636790564, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_a", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_a"}
{"timestamp": 1636790564, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_b", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_b"}
{"timestamp": 1636790565, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_c", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_c"}
{"timestamp": 1636790566, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_d", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_d"}
{"timestamp": 1636790566, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_e", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_e"}
{"timestamp": 1636790567, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_f", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_f"}
{"timestamp": 1636790567, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_g", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_g"}
{"timestamp": 1636790568, "directory": "/home/hotaru/procon/atcoder.jp/abc226/abc226_h", "url": "https://atcoder.jp/contests/abc226/tasks/abc226_h"}
{"timestamp": 1636790683, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_a", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_a"}
{"timestamp": 1636790683, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_b", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_b"}
{"timestamp": 1636790684, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_c", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_c"}
{"timestamp": 1636790684, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_d", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_d"}
{"timestamp": 1636790685, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_e", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_e"}
{"timestamp": 1636790686, "directory": "/home/hotaru/procon/atcoder.jp/agc055/agc055_f", "url": "https://atcoder.jp/contests/agc055/tasks/agc055_f"}

このファイルに、oj-prepareで指定した問題のディレクトリとURLがJSONL形式で書いてあります。 そこで、Linux向けJSON操作コマンドであるjqでこのファイルをパースします。 そうしてcodeでテンプレートをVSCodeで開き、openコマンドでブラウザで開きます。

さて、1回のoj-prepareコマンドで複数の問題を指定可能です。 しかし、この履歴ファイルでは、ある時実行したoj-prepareコマンドでどの問題を指定したのかわかりません。 oj-prepare-openでは過去最新のoj-prepareした問題やコンテストに対し、テンプレートをVSCodeで開き、ブラウザで問題ページを開きたいです。困りました。 そこで最後の履歴から、60秒前までの履歴が、過去最新のoj-prepareした問題という仮定を置きました。

VSCodeのショートカットでonline-judge-toolsを実行する

まずはこの動画を見てください。

www.youtube.com

この動画の通り、私は競技プログラミングをするとき、VSCodeのショートカットから次の操作をしています。

  • アクティブなファイルのテスト
  • アクティブなファイルの提出
  • テンプレート生成とサンプルのダウンロード

この裏では、VSCodeのショートカットはonline-judge-tools(以下oj)を呼び出してテスト実施等々を行っています。ojは競プロ支援ツールです。

競技プログラミング中に、ショートカットから問題のテスト、提出ができると非常に便利です。今回はこの設定方法を紹介したいと思います。

VSCodeのショートカットからojを走らせたい人、またはVSCodeのショートカットから他のコマンドを走らせたい人は参考にしてください。

  • 前提条件
  • 環境構築
    • oj-prepareの設定変更
  • タスク作成
    • タスク作成 Python3の場合の変更点
  • ショートカット作成
  • おまけ
  • FIXME
続きを読む

【ポケモンユナイト#4】311戦でマスター昇格

f:id:hotarunx:20211106232236j:plainf:id:hotarunx:20211106232238j:plainf:id:hotarunx:20211106232240j:plain

ポケモンユナイト、第1シーズンのランクマッチでマスターに昇格しました。 チームを組まず完全にソロでプレイしました。 ランクマッチは311戦しました。 マスターに昇格するのにかかったバトル数がちょっと多いかな。

ここ数十戦はまずヨクバリス、取られたときはプクリンをピックしました。

ヨクバリス

f:id:hotarunx:20211106232259j:plain

キャラスペックが高く、ルカリオゼラオラより手に馴染むヨクバリスをメインでピック。 もうこうダンベルで攻撃を高める戦略です。ゴールサポーターでゴールしやすくします。 ユナイトわざ発動を止められがちなので、きあいのハチマキをおたすけバリアに交換すべきかも。 わざはスペックが高いゲップ&ほしがるを選択。

プクリン

f:id:hotarunx:20211106232308j:plain

ヨクバリスがピックできないときは使い慣れていてまあまあ強いプクリンをピック。 もちものはプクリンの役目であるサポートを遂行するため耐久力を上げるものを選択。

感想

ポケモンユナイト、とても面白いです。ほとんどはMOBAの魅力かもしれませんが。 マスターに到達して、ポケモンユナイトを遊ばなければならない義務感から開放されました。 別のゲームを遊びたいです。

【ウマ娘#05】ライブラ杯ゴールド

続きを読む