競プロテンプレートファイルメモ

ヘッダーにいろいろ書いて楽々コーディング
必要に応じて増やすけど、現在はこんな感じです。

#include<iostream>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<bitset>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

#define mod 1000000007LL
#define eps 0.0001
#define pi acos(-1)
#define INF 10000000000000000

#define rep(i, n) for(i = 0;i < n;++i)
#define rep1(i, n) for(i = 1;i < n;++i)
#define pri(x) cout << (x) << "\n"
#define pri2(x, y) cout << (x) << " " << (y) << "\n"
#define pri3(x, y, z) cout << (x) << " " << (y) << " " << (z) << "\n"

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    // ---------------------
    // コーディング開始
    // ---------------------
    string n;
    cin >> n;

    return 0;
}

vim-lspが重かったのを解消した話

競技プログラミングに参加するにあたって、vim-lspを導入したんですけど、
デスクトップでは軽いのにノートPCだとなんか重く、タイピング本気でやると応答がなくなる始末でした。
clangdの動作が重いのかなーとかそんなこと考えて調べてました。
でも一応ノートPCもCPUi5だし、インクルードファイルの内容によってはHDD性能とかが足引っ張る事例も見かけはするものの、SSD・・・

エラーチェックオフにするといいよーと言われ、オフにしても変わらず。

色々切り分けてみると単純なことで解決しまいした。

重かった原因はこいつ↓
let g:lsp_log_file = expand(‘~/vim-lsp.log’)
let g:lsp_log_verbose = 1

lspでなにかするとログを残してくれるデバッグオプション。
そりゃがりがりioしてたら遅いよね、と。

私の環境だと何故か
let g:lsp_log_verbose = 0
にしてもログがはかれていました。
g:lsp_log_file も指定しないとエラーはいてしまうようなので、
let g:lsp_log_file = “”
“let g:lsp_log_verbose = 1
とすることで解決。

ノートPCでも爆速動作するようになりました。

■雑談
エラーチェックで段がずれる問題ですけど、aleだとエラー出す列を出しっぱなしにするオプションがあるらしい。
kaoriya番は2019/8/25の最新バージョンでは対応していないけれど、最新のVimではエラー表示をnumber列にだすようにかえるオプションがあるので、
kaoriya版が更新されたら設定いじってみるつもり

C++の補完環境をclangd+LSPで導入しようとしたらめちゃくちゃ苦労した話

LSP環境構築にあまり慣れていないくせに使ったことのない言語で

■調べてつまずいたポイント
Windowsでclangdの導入方法がどこにも書いてない(clangの導入方法ばっか出てくる)
LSPから通知されるiostream file not found いやいやいや、g++は通るから!
compile_flags.txtの配置場所
ランゲージサーバー側のエラーログの確認方法
そもそもWindowsでやってる人すくない

■最終的に
補完が思ったように動作するようになりました。
環境設定の問題か、PCスペックの問題か、OSの問題かわからないけれど、
ネットで見るほどエラーチェック早くないけど、とりえず動けばよい!(わかる人に教わりたい)

■手順(本題)
私の最終的に設定した方法と参考にしたサイトを紹介していきます。

前提として、コンパイラはMinGWを利用します。
※WSLでg++流すとかイケイケなことしたかったけど、様々な課題があり、断念。

【1】まずランゲージサーバーの導入を行います。
・LLVM Clang の Windows へのインストールと使い方
http://yohshiy.blog.fc2.com/blog-entry-294.html
・MinGW(gcc) の Windows へのインストールと使い方
http://yohshiy.blog.fc2.com/blog-entry-292.html

【補足とか】
LLVMをインストールすれば、clangdはインストールされます。clangも。
MinGWはインストールパスを変えないようにしましょう的なこと書いてあるけど、そもそもclangdはmingwみてくれてないので関係なかったです。
パスは通す設定にしましょう。
僕は以下みたいなパスが通ってる状態です。
C:\MinGW\bin
あと32bit版mingw入れていたらto_string使えない問題が勃発して結局64bit版に乗り換えた。

【2】VIM側のLSPの導入をします。
ここは別記事でいずれ紹介するため、割愛。
主に以下のサイトを参考にしました。

・vim8,neovimで補完使うならdeopleteよりvim-lsp使おうぜ

さて、ここまでやってうまく動かないはずです。
※少なくとも僕は動きませんでした。
慌てずに解決策を以下に記載します。

【3】うまく認識されない問題の洗い出し(解決策を知りたい方は4まで飛ばしてよいです。)
試しにhelloworldプログラムを書こうとすると、includeにエラーが・・・
原因を探す手順をいくつか紹介します。

1. VIMで表示されたエラーの内容を確認する
vimrcに以下のグローバル変数を追加
let g:lsp_diagnostics_echo_cursor = 1
これを行うことで、vim内でエラー行にカーソルを合わせたときになぜエラーとなったか表示されます

2. iostream file not found
g++を利用したQuickRunは通るのになぜかファイルがねーよといわれる。
これは利用するコンパイラからファイルが見えていないため。
以下のブログを参考にしたけど、いまいちわからず、

・ClangdでC++ソースコードを補完する際にコンパイルオプションを指定する方法

執筆者の方に連絡して、アドバイス頂きました。(本当に助かりました。)
今回のファイルがみつからない問題と違うと判断(結果的にはこのブログ記載の手順を使うことになります。)

3. ではコマンドプロンプトから直接やったらどうか?
コマンドプロンプトで以下をたたく
g++ [ファイル名] → 通る
clang++ [ファイル名] →  iostream file not foundがでる。これだ!
※そもそもコマンドたたけないならパスが通ってないか、インストールしてないです。
※clang++ でのコンパイルが通ればclangdのエラーチェックにも引っかからなくなる。

clang++ -v [ファイル名] で再度実行すると、includeファイルをどこに探しにいっているかみれる。
私の場合、visualstudioのフォルダを探しにいっていて、そもそもVSはいれていないため、見つからなかったようだ。

4. clang++ でコンパイルを通すには・・・・?
同じ問題で悩んでいる方が。

・clangのエラーに困っています。
https://teratail.com/questions/164495
→ ここでの記載があるように、コンパイルオプションをつけると成功する

clang++ –target=i686–target=i686-pc-windows-gnu [ファイル名] →成功!!!
コンパイルオプションをつけることで、通った。

【4】結果成功した手順
compile_flags.txt に以下を記載

–target=i686–target=i686-pc-windows-gnu
※ちなみにwingw64bit版だとオプションの設定が違います。自分の環境でg++ -v してでてきたTargetの項目を–target=の後ろに書いてあげてください。

compile_flags.txt をソースファイルと同階層に配置

することで、解決しました。(includeでエラー表示がなくなった!)
もっと軽快に動いてくれればなーとは思いますけど、動かすまでに2日くらいかかってるので、しばらくはこれでいいかな。

lspの設定何できるかしらべよー。

競技プログラミング環境整備メモ

競技プログラミングを始めるにあたって、いろいろ設定を行ったのでメモ

■言語
JAVAGold取ったし、Rubyやりたいし、最近Python書いてるからどれかかなーと思ったけど、
自分の得手不得手を無視すれば、C++がほぼ一択で時点でJAVAらしい

■エディタ環境
いつものごとくVim

■プラグイン回り
QuickRun回りは下記を参考にした
https://wann.tokyo/notes/quickrun-for-cpp/

■コンパイラ
WSLを利用して入れたかったけれど、QuickRun側の修正か仲介プログラム必要そうだったので、以下を利用できず
https://qiita.com/AokabiC/items/e9312856f588dd9303ed
MinGWを使うことにしました。
https://gist.github.com/n-ari/6da3a8f03fff09b449130b01aa8b7e4d

■補完
LSPを入れた、Windows環境でclangdを入れる方法がわからなさすぎたが、LLVMのWindowsインストーラーでpathをいれてくれた。
・LLVM入れ先
http://releases.llvm.org/download.html
・LSPの設定参考
https://qiita.com/Quramy/items/bccf7b19919679541484

今日のところはここまで。追記していきます。

JavaGold資格、電子書籍で取るか、物理書籍で取るか

【前置き】
Java SE 8 Programmer II(Java SE8 Goldに合格してきました。

Gold取ろうと思ってからSilverの勉強初めて、10日程でSilver,30日程でGoldを取得しました。

前提知識としては、Java6は業務で使うこともあるんですけど、主に使うのは独自言語で、JAVA6といっても独自フレームワークの影響でJavaらしい書き方はしなかったため、具体的に言えば”static”が何か説明できない、DB接続回りはちょっと書いたことある程度からのスタートでした。

【今回のテーマ】
合格するコツ(DL版問題集やったほうがいいとか)や出題範囲などはネットにある優良な情報を参考にしてもらうとして、電子書籍と物理書籍どっちを買うか迷っている方にどっちも買った私から情報共有できればいいかなと思って今回記事を書きました。

【結論】
黒本は物理書籍がおすすめ
紫本は電子書籍がおすすめ
白本は買ってないからわからない

理由やレビューを下にもりもり書いていくよ。

【購入したもの】
Silver 黒本(電子・物理)
Gold 黒本(物理)
Gold 紫本(電子・物理)

ぷよぷよ15thとかPS4、DS、Wiiとマルチプラットフォームの全部買うアホなので、
今回もそんなノリで実質5冊購入しました。
電子書籍はkindleでの購入です。

■黒本
【総評】
おそらく最も人気の高い(当社調べ)書籍
問題 → 解説をとっていて、出題範囲の網羅性は紫本に劣る箇所もあったが、
「あ!これ黒本でやったやつだ!」と思わず試験中に叫びたくなるくらいの出題率を誇る。
Silverではまとめ問題が2つついているが、Goldでは1つが書籍について、もう1つは公式サイトからダウンロードが必要だった。

【電子書籍版】
この参考書の電子書籍の特徴は固定レイアウトであること。固定レイアウトとは参考書のページをそのままスキャンして、画像を載せる方式で、拡大すると画面から行がはみ出る。
ソースコードを読むときは固定レイアウトの方が便利に感じたが、スマホから移動中に読む分には不便に感じた。
また、 Q1を解く → Q1の答えを見に行く → Q2を解く → Q2の答えを見に行くといった特定のページ間を往復するのに電子書籍はあまり向いていないように感じた。
移動中に読みたいとかの用途があればいいが、個人的には「物理書籍を持っていて、2冊目として買う」ならありだと感じた。

【物理書籍版】
チェックボックスがついている点と黒本は出題率の高さから何週も問題を解くので、間違えた問題をわかるようにしておく上で、物理書籍に軍配があがった。
電子書籍版でも記載した「Q1を解く → Q1の答えを見に行く → Q2を解く → Q2の答え」といった動きは本だと指を挟むだけでよかった。

【黒本のまとめ】
黒本は物理書籍がおすすめ

■紫本
【総評】
出題範囲の解説 → 確認問題 の形式をとっている参考書
黒本は問題主体なのに対し、こちらは解説主体の本。
JAVAの理解度があまりない人はSilverでも購入して、ラムダ式とかNIO.2とかわかってるような人はGOLDでも購入しないような使い分けがされているように感じた。(ネット調べ)
黒本が難しいようならまずは購入がおすすめできる。

【電子書籍版】
黒本とは異なりこちらは可変レイアウトの書籍となる。(kindle版)
プログラムでなく文章を読む機会が多い紫本にとって、文字の大きさがデバイスや環境に応じて変更できるのはとても楽に感じた。
ただ、プログラミングが記載されている箇所に関してはタブレットやPCで読みたくなる(崩れていて読みにくい場合がある)ことがあった。
しかし、その欠点を差し置いても電子書籍版をお勧めしたくなる理由が3つある。

1つ目はマーカーの存在。
私の紫本での勉強方法は 

1. まず1周読む
2. 2周目で分からないところにマーカーを引く
3. 黒本と解いて、黒本で間違えたところのマーカーの色を変える
4. 3周目読みながら、「誰かに説明できるくらい理解した箇所」のマーカーを消す

といった勉強方法で行った。
電子書籍のメリットとして、マーカーの色を後から変えたり消したりでき、
またマーカーを付けたページの目次ができるため、試験日が近づくにつれて読む必要のない箇所を飛ばすことができた。
ちなみにPCkindleとスマホkindleの情報は連携されているため、スマホでマークしたところもPCからみてもマークされた状態になる。

2つ目は分からない単語に対する機能
英語やIT用語で分からないところがマウスオーバーするとWikiや辞典から参照してくれる機能がある。
また、好きな場所にメモを取ることができるので、書籍と同等かそれ以上に使い勝手が良かった。

3つ目は検索機能
これ、すごい重要で、紫本では特に問題だった(黒本でも多少はあった)ことがあって、
本の最後についている索引がポンコツだった。
しらないメソッドが問題で出てきて調べようとしても何ページにあったか索引に乗っていなかったり、どっかで読んだはずの機能を索引で調べてみようとすると乗っていないことがとても多い。
電子書籍では文字列検索ができるため、わからないメソッドが出てきたら検索をすることで、解説ページにとんだり、関連の問題をみたりすることができる。

【物理書籍】
プログラミングコードが読みやすい。
参考書読んでる感がある。

——————————————————————

そんなこんなで電子書籍と物理書籍を駆使してJavaGoldを獲得できました。

参考になれば幸いです。

【バトルトリニティ】戦士中級者の手引き

バトルトリニティも激強先輩方に囲まれてやっと中級者くらいには慣れたかなーと思うので、
戦士だんだん慣れてきた人と他の戦士(私)が何考えているのかを文章にして、シェアできたらなーと思います。これが正解ってことではないです。
(※追記:飽きて所々雑です。)

【中略】

戦士に特に必要なのは、状況判断能力と考えています。

勿論、魔法使いや武闘家にも状況判断する力は必要ですが、殆どの場合魔法使いや武闘家は周辺視野さえあれば正しい行動が明確な場合が多く、良い選択肢が複数ある場合に、目先のリターンで選択すれば良いのですが、戦士は中期的なリターンを考える必要があると考えています。

戦士は主に以下の判断が大切だと考えています。
・何処の拠点を守るか
・味方の魔法使いに近付くか離れるか
・拠点外で攻撃をするか
・中立化阻止を行うか
・占拠阻止を行うか
・魔法のリスキルをするか
・安全圏から縦振りぶんぶんするか

■何処の拠点を守るか
戦士の特有スキルのおかげで、占拠した拠点又は中立化した拠点の中では守備力が増えます。
ラスト45秒に占拠しているlv5拠点を一人でも人数不利でも守りきることが可能です。
攻撃を避けるか、宝玉の守りを使うか、アタッカーをたいあたりでダウンさせるか判断をして、生存時間をできるだけ長くします。
最後に一つ拠点を守ることが戦士にとっての使命だと思っています。

★判断が必要なポイント
・誰にたいあたりをいつ使うか
・閃光切りを使って倒すか、耐えきるか
・そもそも何処の拠点を守るか

★筆者はどう判断しているか
たいあたりは守りが切れるタイミングか、魔法使いのクールが完了する際にいれます。ダウンさせている時間と守りの時間は被ると勿体無いので、気をつける。
ラスト近くでは倒し切るプランは1:1のときか味方がいるときのみ行う。経験上、逃げ回っていた方が強い
守る拠点は2位または1位のチームとの間にある外側の拠点かゲージがある程度削れているか、4箇所制圧しないといけない場合は中立に立ってます。

★2拠点の間という選択肢、拠点の移動
時間的に”何があっても取られない残り時間”になったら、他の拠点に走っていいです。ゲージやばい拠点にいってもいいし、敵の占拠を阻止してもいいし、納品を邪魔してもいいです。
爆弾岩がまだ何処かに残っているのが分かっていても、設置から爆発までに16秒かかるため、16秒時点で設置されていなければ警戒する必要はないです。
ゲージが削られていなければ
また、2拠点を睨み、減った方にかけつければ間に合うようなポジションをとることもできます。

■味方の魔法使いに近付くか離れるか
戦士は攻撃するとき、仲間といると非常に強いです。
普通の戦闘では攻撃した際に反撃をされてしまいますが、戦士+仲間の場合は被ダメージ無しに倒し切ることもできます。
また、魔法使いが一人で行動していると戦士にかられやすいです。たいあたりは逃げる時間を作ったり、相手の戦士のたいあたり閃光コンボや魔法使いのラリホーママヒャドギラコンボを止めることができます。
またコロシアムと違い、単体タゲ技は近くの敵が優先されるため、魔法使いと敵との間に立つと魔法使いを守れるかもしれません。
ただ、近くで行動するデメリットとして、乱戦時の魔法の横槍が怖いのと、ジュエル回収がしにくくなります。

★判断ポイント
・どの仲間と行動するか
・一緒に行動するか、離れてジュエルを拾うか

★筆者はどう判断しているか
仲間は手隙なった際に周りをうろうろする。
ジュエルが体力に湧くタイミングでは基本的に別行動。仲間が取れそうなジュエルをかっさらいそうな敵にはたいあたり。

■拠点外で攻撃するか
拠点ではない通常フィールドで敵を攻撃するかどうか。
バトルトリニティはジュエルを集めるゲームなので、基本的には倒すよりもジュエルを拾ったほうが強いです。
拠点を守るため、拠点を取るために戦闘を行うことは必要ですが、強くない場面が多いです。
※お互いがダメージを受けると、戦闘に参加しなかったチームが有利になるからです。
しかし、戦士は一方的に攻撃も可能で(たいあたり逃げ、遠距離閃光、たいあたりから連携してキル)、自分がさほど不利にならずに1チームを不利にすることができます。
必要以上の戦闘が弱いゲームですが、戦士は多少前のめりでも良い職です。

また、たいあたりやラリホーマの音が聞こえるとバトルトリニティおじさんは身の回りを確認し、追撃をしてくれることが多いです。

戦士は拠点外で、攻撃の始点を作る職です。
拠点外では武闘家や魔法は単発で勝てる試合だけ拾っていきますが、戦士は無理矢理削りきったり、瀕死でない敵に致命傷を与えることができます。

★判断ポイント
・拠点外で出会った敵を攻撃するのか

★筆者の判断基準
拠点外であった魔法はレベルが勝っているなら周りに戦士がいなければ殴りかかる。
盗賊は周りに敵がいないなら殴りかかる。
ジュエル持った敵が近くに一人だけいて、味方が周りにいて追撃してくれそうなら殴りかかる。
戦士には遠距離閃光しかしない。たいあたりは仲間を守る目的でしか振らない。
誰を攻撃するかは戦士が決めることが多いです。
周りはそれにあわせる形になります。無駄な殺生やリスクある絡みをしないように注意する。

■中立化阻止を行うか
武闘家の場合、相手の拠点は簡単に奪えますが、拠点を守ることは難しいです。
しかし、戦士は異常な硬さにより、数が同数の場合は有利に戦えることが多いです。
特に盗賊は一方的に殴り勝ち、武闘家も微有利くらいです。

★判断ポイント
・中立化させてから奪う
・そもそも放置する
・中立化を阻止する

★筆者の判断ポイント
拠点の中立化をしようとしている職が戦士であれば、中立化前に止めに入りたいです。
中立化してしまうと相手の戦士が固くなってしまうためです。
また、対戦士の場合は長期戦になりがちなため、対面技術よりも仲間の支援がもらえるかどうかが大事になります。
支援してくれそうな仲間がいない場合、譲っています。
対武の場合は中立化させてから殴りに行ったほうが、味方の武闘家が援護に来た際に火力が上がること、再占拠時に経験値がもらえてゲージが回復するため、レベル3以下では中立化させることが多いです。逆に4.5でゲージが多いときはそのまま戦闘することがあります。

■占拠阻止を行うか
基本的には上の項であげた考えとあまり変わりません。
中立化阻止でもいえることですが、他の職にはあまりない戦士特有の考えを紹介します。

★判断ポイント
・負け戦をするかどうか

★筆者の判断基準
このゲームは基本的には負け戦をすることは少ないはずです。
魔法はタイムロスを嫌い、武はジュエルを回収していればhpが回復していくため、負けるなら戦わない方が良いことが多いです。
しかし戦士の場合は以下のメリットがあります。
・強力な硬さと高い火力の範囲攻撃があり、相手を大きく削ることができる
・時間を稼げるので第三のチームが混ざるかもしれないし、敵が群がると魔法が刺さりやすい
・HPが回復する

HP回復のために死んだり、自分が死ぬ代わりに複数人を瀕死にできる点から、負け戦でも仕掛けることごあります。
ラスト90秒くらいのとき、hp半分くらい減ってたら突撃して死にます。仲間に一言言っとかないと合わさてくれようとついてくるかもしれないので、一言言うと○
ジュエル持たないようにすることと、レベル2にやられにいかないように。

■魔法のリスキルをするか
魔法使いはレペルアップ前に2〜3回死ぬとその試合では活躍しにくく、逆転は魔法使いに依存しているゲームだと思います。
レベル3戦士はレベル2魔法使いが1コンボで各殺なので、ピンチのときに固まって動かない魔法使いを分からせることができます。
倒してから大体15秒くらいで目視でき、20秒くらいで孤立するので物陰からさくっとしましょう。
ただ、夢中になりすぎるとリスキルしなかったチームがかったり、防衛やジュエル回収が疎かになりがち。

★判断ポイント
・リスキルするか

★筆者の判断ポイント
見かけたら優先度高く倒すくらい。圧勝していて、かつ第三のチームに勝つ見込みがないとき、2位のチームの魔法使いをリスキルする。
テンション上がってると盗賊2も確定らしい。

■安全圏から縦振りぶんぶんするか
しよう(書くの飽きた)

しすぎると納品が疎かになる。

戦士メインの人何考えてやってるかTwitterでおしえて。

【バトルトリニティ】盗賊の立ち回りガイド

初心者で盗賊を始めようとしているみなさんこんにちは。
なんだかゴリ押せない盗賊を後回し後回しにしていたジュエルフルコン目指す勢が一斉に盗賊を始める時期が近づいてきました。
盗賊だらけオンライン(しかも他職はカンストしててやりたくない)をお楽しみください。

ちなみに私はランク3にしました。
盗賊をやるからには大衆を出し抜く力が必要ですよ(今年一番のドヤ顔)

盗賊は普通の事をしていると魔法使い以上に非常に弱い職です。

消える能力は無敵になるわけでなく、中立化のために拠点に突っ立ってるなら戦士のほうが強いです。
盗賊は一人で行動しますが、一人では勝てない職です。

相手を押さえ込み、仲間を活躍させ、終盤の詰めをする。
私はバトルトリニティの中で最も難しい職だと思っています。

そして盗賊に他職よりも必要なのは【バトルトリニティというゲームの仕様理解度】だと考えています。

撃破玉の取得条件や援軍玉湧く種類、ボーナスジュエルの法則など、ゲーム仕様に触れつつ、盗賊の立ち回りについて紹介します。

■最序盤 7分0秒〜6分0秒
比較的ジュエルを集めやすい盗賊は自陣のジュエルを回収するのは嫌がる人も多いです。
速攻で中央を取りに行く場合は速度があがるジュエルをとってもいいかもしれませんが、予め仲間に伝えたほうがいいでしょう。

序盤は火力がなくてもなんとかなる盗賊は足の速度に影響がありますが、仲間のレベルが早く上がったほうが盤面が強くなることが多いので基本的にはジュエルを譲ります。

周りに仲間がいないor敵にとられそう、中央付近のジュエルは回収してもかまいません。
ジュエルを二つ回収できれば、その後拠点を3つ取るとレベルがあがります。

■序盤 6分0秒〜5分0秒
開始時と崖を飛び降りるあたりで湧いたジュエル以外は6分20秒くらいにならないと湧きません。素直に拠点を奪いにいきましょう。
拠点を奪う行為は経験値でいえば、ジュエルを8個納品するのと同じ価値があります。
仲間にジュエル回収は任せて、拠点レベルが1の奪いやすい時に積極的に奪いましょう。
基本的に狙う拠点は自陣の左右にある拠点です。
仲間が周りにいるか、自陣制圧数が多い敵の拠点を奪いましょう。
拠点は奪ったら奪われてしまいますが、左右の陣営は奪われてしまって構いません。
なぜなら、奪われなければ奪い返す事ができないからです。
拠点レベル1の時は時間コストが安く奪うことができるため、拠点の奪い合いが多く発生します。
すると、【奪い合いに参加しなかったチームだけ】が経験値に遅れがでます。
自チームが4回拠点獲得、aチームが2回獲得、bチームが2回獲得したとすると、チーム全員経験値に100以上の差が出ます。
6分のボーナスジュエルは内側に湧きます。敵陣のが取れそうなら、狙いにいってもいいかもしれません。(私は拠点を奪う時間の都合上、無視してしまうことが多いです。)
拠点が奪えるようなら、5分の援軍玉は無視して良いです。(自陣側が誰も回収しなさそうならとりにいってもいいかもしれません。ただ、5分に湧く援軍玉は相手復活近くの拠点を奪ってゴーレムを置くとかでないかぎりあまり強くないです)
5分のボーナスジュエルは外側に湧くため、回収しつつ、拠点を奪うのもいいかもしれません。

拠点間の移動時や、敵陣にとれそうなジュエルがあれば回収します。
自陣側のジュエルは一旦落ち着いてマップを確認し、ジュエルに向かっている仲間の矢印がないか、近くに仲間がいないかを確認します。
仲間をジュエルは譲りましょう。
また自分のジュエルは可能であれば自陣に戻って納品しましょう。(特に中央がとれているときは)
自陣左右の拠点はレベルがあがらないほうが奪いやすく、最終的に敵も納品するためレベルが上がりやすく、味方に納品してもらったほうが味方のジュエル回収効率がよくなるため、最終的にレベルカンストさせたい自陣納品を意識します。

■中盤 5分0秒〜3分0秒
盗賊は基本的に自分から攻撃は仕掛けないです。
また、敵の近くも通過しません。魔法使いか盗賊の近くなら通ってもいいかもしれません。まだレベル3になるには遠いので、被弾はできるだけ避けたいです。
普通の職は1人分、盗賊は0.5人分と見積もって、人数有利になるなら戦闘に参加します。
盗賊は火力がないですが、このゲームは1対1でなぐっても同レベル帯だと1クールで落としきれないので、盗賊の打点補助があると落とせることが多いです。
盗賊は撃破玉の取得を選べる立場にあります。
どういうことかというと、仲間の攻撃は2回、自分は1回攻撃を振ることができます。
2回目の仲間の攻撃より前に攻撃するか、後に攻撃するかで撃破玉の渡される人が変わります。(戦士の縦斬りは手を上にあげたあたりで判定があるので、注意)
基本的にフィニッシュは仲間に譲ります。
なぜなら、フィニッシュを取ると経験値ボーナスが入るからです。
しかし、以下の場合は盗賊が取ったほうが良い場合が多いです。
・盗賊が赤や橙のジュエルを取得している、青いジュエルを二つ以上取得している
・仲間のHPが黄色い
・もうすぐボーナスジュエルが湧く
・敵が赤以上のジュエルを持っている

話を戻して、色が変わっている敵がいたら、ちょかいをだしにいってもいいです。

自分のレベルが2なら、閃光の打点は95です。
レベル2の魔法使いはHP100からオレンジになるため、ほとんどの場合落とすことができます。
オレンジの盗賊もHP110からオレンジになるため、殴れます。
盗賊も魔法も回復ジュエルを一回挟んでも2回目の攻撃で必ず落とせるため、覚えておきましょう。

オレンジ武闘家は70〜140、オレンジ戦士は80〜160の残HPのため、基本的には分が悪いです。戦士はまず落とせません。
武闘家と戦士は赤くなっていなければ触らないようにしましょう。

ドラクエの仕様とトリニティの仕様で追われている側は同速の攻撃は追いかけている側が判定が先になります。(位置表示の関係)
逃げるときはなんとしても逃げ切り、おいかけているときは倒せるのであれば反撃はされないと思っていいです。

仲間が多く、逃げる背中を攻撃、マヒャドを詠唱している魔法の背中を攻撃など、反撃をもらわないタイミングで殴ることは良いことですが、殴るのに夢中で4分に湧く内側のボーナスジュエルを逃さないようにしましょう。

4分に湧くボーナスジュエルは敵陣寄りのものを回収します。自チームを除いてリードしている陣営か、人が周りに少ない場所を選びましょう。
敵が周りにいるなら早めに、いないなら4分2秒くらいで姿を消します。ボーナスジュエルを回収する気のない甘えたチームがいたら二つ目のボーナスジュエルを回収しに真ん中を突っ切ってとりにいきます。hpの低い敵がボーナスジュエルを取ったら倒しにいってもいいです。盗賊は撃破時に相手の最高得点のジュエルを盗めます。ボーナスジュエルを盗めば撃破玉もついて12点、奪った敵との点差は20以上になります。

また、味方が近くにいてボーナスジュエルが取れそうなら、自分に撃破玉がないときはやはり譲ります。
他のボーナスジュエルを取りに行くか、ボーナスジュエルを奪った敵を倒しにいきます。自分がジュエルを保持していないなら、少しリスキーにボーナスジュエルを拾った敵を殴りにいってもいいです。
相手が反撃しようものなら、周りを巻き込んで倒せるかもしれません。また、反撃しないなら追いかけて追撃で倒せるかもしれません。奪えれば大勝利ですが、納品させないことができても、8点取得させなかったことになります。本当に強い行動になると思います。

ボーナスジュエル阻止のときもそうですが、多少リスキーに攻める時に絶対気にしておきたい仕様があります。
敵を倒した時に拾える撃破玉ですが、これは相手がジュエルを所持していないと貰えません。
倒されるということは、経験値25与え、自分が20秒くらい動けないだけでも大損失です。
さらに撃破玉を与えてしまうと目もあてられません。

撃破玉を与えることは8〜15点相手に与えてしまう行為です。さらに持っているジュエルを失います。
ジュエルを持っていなければ撃破玉を与えることもないので、突撃はジュエルを持たずにしましょう。
突撃はジュエルを持たずにしましょう。うっ

このあたりから早い魔法はレベル3になります。
レベル3魔法のマヒャドは220点でて、レベル2盗賊のHPは220です。ぴったり死にます。
魔法無敵をつけられて、足も早いのでひっかからないようにしましょう。
分かっている魔法はすぐマヒャドうってきます。
ストップ!よわいものいじめ!

3分にも援軍玉が湧きます。
ボーナスジュエルは外側です。
盤面がリードしているときはボーナスジュエル、自陣の援軍玉を確保、盤面が負けてるときは点数が一番でない敵陣の爆弾岩を盗みましょう。
援軍玉は一位の陣営にはゴーレム、二位以下には爆弾岩が配布されます。
不利なときにゴーレムが必要な場面はほとんどないので、盗むのは爆弾岩にしましょう。
また、敵陣の取得が難しいのであれば自陣の爆弾岩を運搬してもいいです。自陣のゴーレムは取られるくらいならとりますが、あまり盗賊がもたなくてよいです。

レベル3に到達した拠点は踏まなくていいです。
そのへんは戦士武闘家にまかせましょう。
というより、4分切ったあたりからは戦士や武闘家などレベル3に到達した人にまかせて、盗賊はジュエル集めを重視するとよいです。

■終盤 3分0秒〜1分0秒
終盤になると、拠点制圧の価値があがり、ジュエル納品の価値が下がっていきます。
私はこのタイミングでは2点のジュエルは納品しなくてよいと思います。
終盤に限らず、敵陣にいるときなどはジュエルをどんどん上書きしていいです。
過剰にもったジュエルは安いものから捨てられていくため、過剰ジュエル取得は自身の経験値獲得と敵に取らせない意味があるからです。
そして、終盤では2点を納品している時間もおしいため、納品しない選択肢があることを忘れないでください。
この段階でやることは敵のレベル5拠点のゲージを削る、高いジュエルを取る、自分がレベル3になったら、相手の魔法使いのHPを削るなどの役割があります。特にテンション閃光は210と打点も高いので有効活用しましょう。

拠点のゲージは拠点レベルをあげたときと取得した時にしか回復しません。
なので、中立化せずに削っておく行為は、ラスト一分にかけてものすごく強い行動です。削られたチームは回復する術はありません。

ただし、自陣の数が1〜2と少ない場合は拠点を奪いきってしまってもいいです。
ただ、終盤の拠点取りは時間がかかり、中立化してから奪われてしまうと時間だけが無駄になってしまうため、極力味方が近くにいる場面で行いましょう。

また、2分に湧くボーナスジュエルは内側です。最低一つは確保できるようにしましょう。

残り1分、ボーナスジュエルは外側、無理して取る必要はないですが、とれるなら取りましょう。

■最終盤
1位以外の拠点を奪う 52点の価値 
1位の拠点を奪う104点の価値
1位の拠点を中立化52点の価値
自拠点を防衛する52点or104点の価値
があります。
二人いる拠点で姿を消して時間稼ぎすることはこの貴重な1分間の中、二人の時間を縛っていることになります。
ゴーレムや爆弾岩を奪うか、または守るか拠点を奪うかは状況次第です。
点数差をつけられている場合はほとんどの場合、1位拠点を奪うか、中立化しないと勝てません。
接戦のときは納品によって点を増やしたり拠点レベルをあげる択もあります。
真面目にやってると復活地点の拠点レベルが3とかがとても弱いのが分かります。
終盤までに4にはしましょう。
先に記載した削っておく行動対策で4で止めておくのも強いですが、野良ならそこまでの動きは不要と考えています。

リードしているときは基本は防衛です。盗賊は敵を倒して防衛することはできません。
しかし、三対一でも防衛することのできる職です。
ラスト20秒、ゲージの少ない拠点を守るときは姿を消して陣地を踏みます。味方が数の暴力で守りきれなさそうなとき、姿を消して陣地を踏んでください。
ゲージに余裕があるなら範囲攻撃に合わせて外に出て戻ってもいいです。
数秒見えないことの強さがわかると思います。
敵の動きに合わせてくるくるまわってタゲられないようにしましょう。

また、2つの拠点の間に立ち、誰かが来たら姿をけして踏みに行くことで2つの拠点を睨むこともできます。

拠点を奪う際に気をつけることはレベル5は中立化に14秒、占有化に10秒かかります。爆弾岩は11秒くらいです。
拠点に25秒の時に入らないと占有まではできません。
間に合わない行動はやめましょう。
また、敵が来ることで間に合わなくなることが予想される場合は他にできることを探しましょう。
納品、敵の納品阻止、他の陣地を踏むなど。
逆に敵を間に合わなくさせることをできるため、ぎりぎり奪われそうな拠点は最後の二秒前に踏むだけでいいです。
入ったことになるのは自分の画面で入ってから1秒弱後なので、1秒早く計画をたてて動く必要があります。

■まとめ
盗賊は自陣側のジュエルをとらず、援軍玉もあまり使わず、仲間にジュエルを渡して、序盤と終盤は拠点に立ってます。
(敵のジュエルをとって収める行為は自分の陣地付近のジュエルを収める行動のリスクも伴い、倍価値がありますが、最後の得点は同じです。)
勝つための行動をしていると個人ポイントは稼げないです。
撃破玉納品も頻繁にできることでもなく、あまり点数が稼げないかもしれません。
盗賊はとても支援職であり、妨害職なので、そんなロールが好きな人にはおすすめです。

魔法使いガイドもあるんでそちらもどうぞ

■余談
今回は優勢な敵を主に妨害するなどはあえて記載してません。
また、明らかに強いとわかっているチームの魔法使いにちょっかいをかけるのも強いですが、記載してません。
それが勝利につながっているか、私自身に確信がないからです。
私自身魔法ほど勝てているわけでもないので、盗賊をやりこんでいる方には物足りない内容だったかもしれません。
ボーナスジュエル取得を意識した立ち回りですが、ボーナスジュエルを意識する人が増えると、難しくなります。敵陣の援軍玉も意識する人がいると簡単に盗むのは難しくなるでしょう。
敵がたくさんいるところの援軍玉を盗むのはリスキーです。どこかが手厚くなれば他が薄くなっています。どんなに相手がうまくても奇数分で湧く大量のジュエル、ボーナスジュエル、援軍玉、拠点は同時に睨めないのです。
盗賊は基本は逃げの一手で、味方にも敵にも譲り、ときに闇討ちをする職であるため、人のいないところ、敵や味方の抜けている部分にはいっていくような動きが必要になると思います。

このガイドは一つのやり方考え方であり、正解はptの数だけあります。
盗賊は目先の処理は苦手ですがどの職よりもゲーム全体に影響を与えることができます。必要なのはゲームの仕様を知り、適切な行動を目指すことです。
自分なりの戦い方を見つけたら、ぜひツイッターやブログなどで発信してみてください。

この文書や、この文書から生まれた情報からバトルトリニティをやる人が一人でも増えることを願って。

【バトルトリニティ】魔法使いで「いきる」ための手引き

バトルトリニティで魔法使いでソロかタッグで50勝くらいしてみて、魔法使いの立ち回りを調べてもなかなかでてこず、苦労したので自分なりの考えを共有します。

私自身、めっちゃ強いといったわけではないので、これが正しいから全部真似ようではなく、「こんな考え方あるんだな」「ここは真似てみよう。自分はこうしてみよう。」くらいの軽い気持ちでみていただければと思います。

こんな考えでやっているとかがあればぜひツイッターやブログで発信してください

■魔法使いとは
大器晩成型のジョブ。序盤は弱いが終盤は範囲、火力共にトップまで育つ職。
所持スキルはクールの早い直線範囲のメラ魔法の正面範囲のマヒャド魔法と範囲睡眠魔法の3つで、レベルがあがることで詠唱速度と火力が上昇する(クールタイムは変わらない)
また、火力は同レベルであれば マヒャド〉メラ。
ラリホーマ以外の魔法は詠唱キャンセルが可能。とりあえず詠唱しておいて当たらなさそうならキャンセルしても良い。

■基本指針
序盤は育成に専念し、火力補助も稀に行う。
残り90秒までにはレベル4に到達したい。
終盤は最強職として中央の防衛や優勢なチームの頭数を減らす。

終盤までは他のどの職よりも「なによりも死なないこと」を最優先とする。
中央を明け渡そうが、仲間がやられようが、そこに自身が死亡するリスクが絡むのであれば強力譲り、仲間を見捨ててでも魔法使いは生きなければならない。

魔法使いが1度死亡するごとにレベル4への到達が20〜30秒遅くなる。
相手の魔法使いが先に4になるだけでチームには圧力がかかる。自分が30秒早くレベル4に到達することはほとんどの場合、見捨てたものよりも価値がある。

また、レベル4への到達を優先するため、拠点の中立化や占拠は余程の理由がない限りは行わない。(もうすぐ占拠しそうな拠点に入って経験値をもらうことはする)
もし、魔法使いを使っていてレベル4に到達できていない場合は拠点占拠のために拠点に長時間立っていないか確認しよう。

次からはレベル別に立ち回りを紹介

■レベル1
レベル1の魔法使いはどうしようもなく弱い。
二拠点制覇と序盤のジュエルですぐに駆け抜けるため、レベル1の段階で敵と遭遇することはないはず。
開幕自陣付近の(せめて片側だけでも)ジュエルを回収しよう。
慣れていない盗賊や武闘家が前を走りジュエルを回収してしまった場合、枕を濡らそう。
もしフレンドや意志の疎通が可能である場合は以下の二点をお願いしよう。

1.序盤のジュエルは魔法使いにゆずること
2.魔法使いが近くにいる場合はジュエルを譲ること

どうしても敵に絡まれてしまった場合、ラリホーマを打ってとにかく自陣側や仲間がいる方向に逃げよう。

中央の奪い合いでもない限り、序盤の争いは「争いをしていないチーム」を有利にしてしまう。
※私は序盤の中央争いすら放棄してジュエルを集めるべきと考えている。

仲間が敵と戦っていて自分が混ざればほぼ勝てそうな盤面のときは火力補助を行う。

納品時は自陣に一番近い拠点を優先しよう。

■レベル2
やっとまともな詠唱速度でラリホーマを打てるようになる。
テンションがあがって早速殴りたいところだが、まずやるべきことはジュエルを回収すること。特にキラキラしたジュエル。
なぜなら、バトルトリニティでは「レベルが上がったときに最大HPは上昇するが、現HPは変化しない」からだ。
レベルが上がるメリットとして、耐久力の増加があげられるが、レベルがあがっただけではそれがいかせない。しかし火力はすぐにあがる。
魔法使いはしっかりとやればレベル2には最も早く到達するため、他の職がレベル2になる前にはHPを増やそう。

レベル2でもテンションがついていないときは原則戦わない。自分が合流したところで勝てるか分からない争いには参加しない。
ただし、レベルアップ時やジュエル効果でテンションが上がったときは横槍をいれて撃破玉回収のためにキルを取れるように常に意識はしておく。
ptで最もジュエルを納品する役目でもあるので、テンションの上がる機会の多い魔法使いは必要に応じて敵を倒す。(ジュエルを持っていない敵は倒しても撃破玉は得られないため、優先度はひくい)
しかし、レベル2では倒せる範囲も広くないので、慎重に。壁越しで攻撃できるときや、争ってるグループに横槍をいれるか、瀕死の敵を狙おう。
敵と遭遇したときはラリホーマを打って逃げる。盗賊以外の味方が近くにいるときは協力して倒してもいい。

一人でどうしても戦わなければいけないときはギラ→ラリホーマ→ギラ→マヒャドで乗り切ろう。

争いに近付かない事が生きるためになによりも大切なこと。

レベル2の後半あたりから敵の上手い盗賊は自陣側のジュエルを横取りしてきたり、少しずつ攻撃を刺してくる。
対盗賊はマホトラが5秒で切れることを覚えておくと、ラリホーマを刺したり仲間とトドメを指しやすいはず。
盗賊の邪魔が多めなら、中央を制圧していれば中央、していなければ「中央を制圧しているチームの陣営付近」はジュエルが残っているため、ラリホーマをかけて逃げながらジュエル集めをする。

自陣側拠点のレベルがあまりあがっていないようなら、魔法使いが活躍できていないのかもしれない。

■レベル3
ついに火力が驚異になるレベルに到達。
特にレベルアップ直後のテンションマヒャデドスは範囲と削り共に優秀。
レベル3到達時点で大きく劣勢の場合や、残り時間がすくない場合は仲間とキルを取る動きにかえていく。
目安としては残り60秒でレベル4魔法使いになれないのなら、レベル3から攻撃を多くしてもよい。

詠唱もはやくなり、威力もあがったため、キルをとる機会が増える。
ジュエルをもった敵を撃破したときにも経験値がはいるため、狙えそうなときは狙っていく。
特にラリホーマがクール中でなければ、ヘイトを稼ぎ過ぎない盤面には横槍を入れやすい。

レベル4を目指す場合は可能な限り死にたくない。
回復ジュエルでの回復量が相対的に下がっているため、被弾時は慎重に。

■レベル4
ついにレベルアップ。

マヒャデドスⅡを詠唱して、気付いたら敵がみんな倒れていた。
一対多とか余裕過ぎてな

えっ?あなたレベル3なんですか!?!?僕4!
範囲の即死呪文、超高速のギラ打てるけど、HP大丈夫?

単騎で来ようものならラリホーマすら必要ないわ。
我、盟友ぞ??

指一本でも触れたら錬金術師のにーちゃんが黙ってないからw

ちなみに学校ではホーローに似ているってよく言われる。

■次回予定(未定)
実数値からみる一歩踏み込んだ立ち回り
→レベルとテンションからみる落とせる敵、耐えられる攻撃など

【バトエン】私は優勢であるのか劣勢であるのか

■私は優勢であるか、劣勢であるか
バトエンに限らず、駆け引きがあるゲームでは基本的に優勢か劣勢かに状況が移り変わっていく。

バトエンで劣勢な状況とは
・総hpが低い
・チェンジの回数が少ない
・対面が不利
・残りの鉛筆が少ない
・アイテムが自分だけ利用済み
・自分だけが全ての鉛筆の種類が公開されている
・クライマックスが遠いのに攻撃出来る鉛筆がない
などがあげられ、総合的にみて、もっとも今試合において勝利から遠いほど劣勢であるといえる。

何故この話を出すかというと、対戦ゲームにおいて自分が優勢であるか、劣勢であるか判断できることは非常に重要であるからだ。

確率も選択肢もないゲームがもしあるとすれば優勢であるプレイヤーがそのままその試合の勝利者になる。

基本的に優勢であるプレイヤーは
・優勢の状態を維持する
・より優勢の状態を目指す
のどちらかを行うべきで、

劣勢のプレイヤーは
・いかにして優勢になるか考える
必要がある。

博打行為(ハイリスクハイリターン)を行って良いのは優勢のプレイヤー、劣勢のプレイヤー果たしてどちらだろうか。

詳しくは後述する。

■劣勢ボーナス
バトエンにおいて劣勢ボーナスが存在していない。
バトエンは優勢な者がそのまま勝利に近い。

劣勢ボーナスとは不利になったときまたは不利なプレイヤーに対して優勢のプレイヤーよりも有利になる要素だ。

例えばマリオカートなら順位が低いプレイヤーはより順位が高いプレイヤーを追い抜きやすくなるアイテムの確率があがる。

クイズ番組では後半にいくにつれて獲得点があがり追い抜きやすくなる。

某カードゲームでは攻撃を受けたプレイヤーの手札が増える。

バトエンには劣勢のプレイヤーに優しい要素が基本的にない。
一見逆転はしにくそうにみえる。

では劣勢なプレイヤーはどうすればいいのだろうか。

答えは博打行為(ハイリスクハイリターン)である。

■博打行為
盤面の有利さを点数で表現する手法がある。
優勢プレイヤーが25点、劣勢のプレイヤーが13点とする。
優勢プレイヤーは着実に3点づつ稼いでくるとき、劣勢プレイヤーは同じ手を打っていると勝つ事が出来無い。
40%で10点増え、60%で20点失うなどの手があればその中でもっとも良い博打行為をしなければならない。

優勢プレイヤーは優勢さを捨てるわけにはいかず、博打をうつことはできないが、劣勢プレイヤーは失うものはなにもない。
不利になればなるほどリスクを負ってでもリターンを勝ち取る。
現実世界においては全てをかけることはリスクが命や未来となるが、ゲームにおいてはどんなに負けても次の試合はまた0からだ。安心して全掛けをしよう。

■都合のいい未来、都合の悪い未来
優勢プレイヤー、劣勢プレイヤーにとって考えるべき要素の一つにどんな未来がくるかがある。

優勢プレイヤーはどのような驚異があり、小さくともどのようなリスクがあるのか把握し、潰すようにする。

劣勢プレイヤーは完全に積むその瞬間までもっとも現実的でありえる都合の良い未来を想像し、行動して逆転の機会を伺う。相手は6分の1を三あてて攻撃してこないかもしれないし、最後に出たきたチャッピー用のステーキはもっていないかもしれない。本当に完全に詰むその瞬間まで、投げ槍になってはだめだ。

優勢プレイヤーは「こうなったらマズイな」といった状況を回避し、劣勢プレイヤーは「こうなるかもしれないからそこにかけよう」と考えるべきだ。

■そもそもバトエンにどうつながるんだよこの話
バトエンをおいて盤面に出す鉛筆は
・敵に攻撃されないバトエン
・敵を攻撃できるバトエン
・この場面でしか使わないバトエン
を基準に考えて選んでいると思う。

私はここに上の優勢劣勢を考慮して以下の観点も考慮にいれている。
・図形(○☆)か盤面と揃えるか、孤立させるか
である。

もちろん☆しか殴れない○のみが場にいるときに☆を投げる意味はほとんどないが、他の考慮要素からみて自分のだす鉛筆の図形を○☆どちらか選べるとき、私は以下の考えで○か☆かを選んでいる。

・優勢の時は図形を揃える
・劣勢の時は図形を孤立させる

図形を孤立させる行為は基本的にハイリスクハイリターンだ。
自分以外の図形が攻撃されたとき自分はかなり有利になり、自分の図形が攻撃されたときは自分だけが著しく不利になる。

逆に図形が揃っている場合はどうだろうか。
攻撃者にはダメージが入らないが、攻撃者以外の三名にはダメージが入る。
攻撃者は有利になるが、攻撃された側は全体からみると柄を孤立させたときに比べて不利になっていない。

もちろん様々な条件が混じって選択は考えるべきだが、自分が優勢で自分以外が☆1体のみ、自分が○か☆か選んでだせるのならばベースの考えは☆から出すべきだと考える。○を先にだすと○分のアドバンテージがただ溶けてしまう可能性があるからだ。☆が先なら最悪○をだすとき、周りの☆は削れている。

逆に劣勢の時は図形を揃えている場合ではない。
誰かが攻撃を受けるとき自分も攻撃を受けてしまう。そのままだと巻き返すことはできない。
劣勢のときは自分の図形だけは出ない都合のいい攻撃がでる未来にかけて、自分の図形は孤立させよう。

劣勢時ほどリスクを抱えてでもリターンを取りに行く考え方は図形を揃える以外にも応用がきく

自分が優勢か劣勢か適切に判断し、選択を決めよう。

アイテムの利用先やバトエンの交換先を考えるときに応用していただければ幸いだ。

(C)2017 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.(C)SUGIYAMA KOBO(P)SUGIYAMA KOBO

oracleのUNIONでORA-01790が出まくった話

不慣れにもポチポチoracleのSQLを書いていたとき、ある壁が立ちはだかった。
もし、同じ問題に躓いている人の助けになれば幸いである。

あるテーブルとあるテーブルをUNION ALLし、総件数を求めるというもの
※ここでは最小限のSQLを記載している

SELECT count(*) FROM
(
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER
) UNION ALL (
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER_OLD
)

上記を実行すると下記エラーが発生するのだ。
ORA-01790 式には対応する式と同じData型を持つ必要があります

はて、さてはテーブル定義が違うなと調べてみても全く同じ。
USER_NAMEを別の列名に変更すると出来るものとできないものが・・・うむむ

いろいろいじってみて
SELECT count(*) FROM
(
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER
) UNION ALL (
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER
)
に変更しても同様のエラーが起きことが発覚。そんな馬鹿な。
そこで一つ思い付き試すとしっかりと通った。

結論としては以下のようにすると解決する。

SELECT count(*) FROM
((
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER
) UNION ALL (
SELECT
USER_NAME
FROM
SCHEMA.T_USER_MASTER_OLD
))

UNION ALLの上側のSQLがどこまで対象であるか明示されていなかった。
詳しい優先度はもっと詳しい人にお願いするとして、今回のケースでは
SCHEMA2.T_USER_MASTERのUSER_NAME(char型)とcount(数値型)をUNIONしようとしていたために発生していたようだ。