形式的冪級数のライブラリをありがたく使ってAtcoderの問題を解く(つづき)
概要
感謝の続きです
gg-hogehoge.hatenablog.com
ABC159 F - Knapsack for All Segment
どういうDPを書いたらいいのかわからん...
atcoder.jp
ABC169 F - Knapsack for All Subsets
どういうDPを書いたらいいのかわからん...
atcoder.jp
概要
$A_1$, $A_2$, $\ldots$, $A_N$ の全ての部分集合$2^N -1$通りについて考える。
それぞれの部分集合について、
$$A_{x_1} + A_{x_2} + ... + A_{x_k} = S$$
を満たす$x_1, x_2, ..., x_k$の組の数を数えて、その和を求めよ。
立式
$f_i = (1 + T^{A_i})$として、$f_i$について考えるかどうか、$2^N$通りある、ですね。
$$ F = (1+f_1)(1+f_2)...(1+f_N) = (2 + T^{A_1})(2 + T^{A_2})...(2+T^{A_N}) $$
の、$T^{S}$の係数が答え。
ABC171 F - Strivore
コンテストで見た時は手も足も出なかった...
atcoder.jp
提出
F問題が7行くらいで解けました。嬉しい。
atcoder.jp
形式的冪級数のライブラリをありがたく使ってAtcoderの問題を解く (解けたら追記)
概要
競技プログラミングの強そうな人が使っている印象がある「形式的冪級数」。よくわかりませんが、名前がかっこいいので使ってみたいです。
形式的冪級数を使うにあたって、大変素晴らしいライブラリも公開していただけています。感謝しながら使っていきます。optさんありがとう。
opt-cp.com
問題リストもあります。すごい。これを参考にして形式的冪級数を使って問題を解きながら、理解を深めていこうと思います。
opt-cp.com
問題リストをAtcoder-problemsのVirtual contestに登録してみました。コンテストは2030年に終了しますので、それまでに頑張りましょう。
https://kenkoooo.com/atcoder/#/contest/show/ec28e88c-2bdf-468e-be30-ab0e599abcd7
本題
急に問題を見ても立式できないことが多かったので、以降にメモを残していきます。
各問題のメモ
TDPC-A コンテスト
準備運動。
atcoder.jp
概要
$N (\leq 100)$問ある問題の$i$番目は$p_i(\leq 100)$点。合計得点は何通りか。
立式
合計$k$点として、$T^k$の係数が非ゼロな$k$の個数を数えればいいです。
\begin{align}
(1 + T^{p_1})(1+T^{p_2})\ldots(1+T^{p_N})
\end{align}
↑を展開して、非ゼロの個数を数えます。
提出
これは簡単。
atcoder.jp
EDPC-M - Candies
これも準備運動。
概要
$N (\leq 100)$人に飴$K (\leq 10^5)$個を配る。$i$番目の人には$0\sim a_i$個配る。配り方は何通りか?
立式
$i$番目の人への配り方は、↓の多項式$f_i$に対応させます。
\begin{align}
f_i = 1 + T + T^2 + ... + T^{a_i} = \frac{1 - T^{a_i + 1}}{1 - T}
\end{align}
全員分を掛け算した$F = f_1 f_2 f_3 \ldots f_N $ の、$T^K$の係数が答えです。
提出
TDPC F-準急
これ、DPでも解きたいのですが、頭が混乱します。
atcoder.jp
概要、立式
optさんが書いてくれているので省略。賢い。
opt-cp.com
提出
スッキリです。
atcoder.jp
ABC179 D - Leaping Tak
DP+imos法で、区間更新的なことをする問題だった気がします。
atcoder.jp
概要
1マス目から$N(\leq 2 \times 10^5)$マス目まで進む。
1回の移動の際には、K個の区間 $[L_1, R_1]$, $[L_2, R_2]$, $\ldots$, $[L_K, R_K]$から1つ数字を選び、その数だけ進む。$N$マス目までの進み方は何通り?
立式
1回の移動を、↓の多項式$f$に対応させます。$[L_i, R_i]$の次数の項で、係数を1にします。
\begin{align}
f = T^{L_1} + T^{L_1+1} + ... + T^{R_1} + T^{L_2} + T^{L_2+1} + ... + T^{R_2} + ... + T^{L_K} + T^{L_K + 1} + ... + T^{R_K}
\end{align}
何回か移動するので、それを表す多項式$F$は↓。$N-1$マス進むので、$T^{N-1}$の係数が答え。簡単に表現できて嬉しい。
\begin{align}
F = 1 + f + f^2 + ... = \frac{1}{1-f}
\end{align}
元の問題には$K\leq 10$という制約がありますが、この解き方だと不要ですね。すごい。
提出
10行くらい。助かります。
atcoder.jp
ABC178 D - Redistribution
高校受験でよくやる、ボールと仕切りで考える問題ですよね。
atcoder.jp
概要
全ての項が3以上の整数である数列であって、その総和が Sであるような数列は、何通りあるか?($10^9+7$で割った余り)
立式
慣れてきました。1つの項に対応する多項式は、↓。
\begin{align}
f = T^3 + T^4 + ... = T^3 ( 1 + T + ...) = \frac{T^3}{1-T}
\end{align}
$f$, $f^2$, $f^3$, ... の、$T^S$の係数の和が答えになるので、まとめて考えればいいです。
\begin{align}
F = f + f^2 + f^3 + ... = \frac{f}{1-f}
\end{align}
$F$の$T^S$の係数が答え。
以降、解けたら追記する
問題
URL
立式
式を書く
提出
ACしたコードを貼る
AtCoderで緑色になるまでにやったこと
はじめに
ABC165でやっと緑色になりました。
競技プログラミングを割とちゃんと始めてから、これまでにやってみたことを書いておきます。
初心者が陥りがちなポイントをまとめておけば、これから始める人に役立てるかなと思いました。
目次
環境の話
いろいろ揃っていて、いい時代ですね。本当に。
[環境] けんちょんさんその他、先人のみなさまの記事を読む
競技プログラミング、けんちょん氏のいろいろな記事のおかげで進めやすい
— は た む (@gg_hatano) 2020年1月16日
4年前くらいに少しやったときは、すぐにやめちゃったなあ
情報が充実しています。大変助かりました。
10回くらい読みました。
この記事を読んで、とりあえず800問解こう!と思いました。あと350問(2020/05/02現在)です。
[環境] C++11の環境をつくる@macOS
仮想マシンで環境構築する用のスクリプトを置きました。 atcoder利用で戦う環境 · GitHub
便利に戦える様に、c++11以上を使って、bits/stdc++.hをインクルードしたくなります。
ローカルでやるには色々面倒でしたので、仮想マシンを使いました。
↑の内容を、vagrant 2.2.6 とvirtualbox6.0.4で動かしています。
VScodeでRemove Developしたりするといいと思います。
[環境] atcoder-toolsは便利なので使う
atcoder-tools、なぜ今まで使ってなかったのか 意味がわからない
— は た む (@gg_hatano) 2020年4月3日
使いましょう。便利です。
[環境] atcoder problemsは楽しいので使う
進捗が閲覧できて楽しいです。学校の勉強もこんな感じでやりたかった。 https://kenkoooo.com/atcoder/#/user/gghatano?userPageTab=Progress+Charts
[環境] atcoder problemsのバーチャルコンテストは楽しいので開催する
ns-競プロ-20200416 https://t.co/J0NmOCsKe3 #AtCoderProblems
— は た む (@gg_hatano) 2020年4月17日
社内バーチャルコンテスト、割と盛り上がった
たのしい!!!自分でコンテストを立てれば、自分がまだ解いていない問題を、指定した難易度の問題からランダムに選んでくれます。超絶便利です。
参加する時間が他の人とずれていても、パフォーマンスの数字で競えるのも良いですね。
社内では、バーチャルコンテスト実施->リモート会議で時間を合わせて感想戦、を繰り返しています。強い人たちと直接話して、何を考えながら解いているのかを聞けると学びが多いです。
C++の話
こういうことを書き出すとキリがありませんが、3つだけ書いておきます。
[C++] 大きな桁の数字の扱いに注意する
提出 #9947919 - AtCoder Beginner Contest 108 https://t.co/Jx6hkcuuZg
— は た む (@gg_hatano) 2020年2月8日
intはlongにしろって何回言えばわかるのか
普段の業務では、int, long, doubleくらいしか使っていなかったせいか、大きな桁に慣れていませんでした。積極的にlong longを使っています。
[C++] 出力する少数の桁に注意する
cout << setprecision(10); などとしておきましょう。 ちゃんと計算しても、欲しい精度で出力しないと正解できません。
[C++] powが遅いので自分で書く
TLEするので、↓を用意しました。標準で用意されたものが遅いってどういうことだ。
typedef long long ll; ll mypow(ll x, ll n){ if(n == 0) return 1; if(n % 2 == 0) return mpow(x * x, n / 2); else return x * mpow(x, n - 1); }
他にも、long long用のgcdとか、mod(109+7)上での組み合わせとか、いろいろ準備しておくと戦いやすいです。
競技プログラミング特有(?)の話
[競プロ] まずは全探索する
C - Candles https://t.co/jPD09x6VFE
— は た む (@gg_hatano) 2020年2月8日
解の候補である連続するK本はN-Kくらいしかないのだから、全探索する
そりゃそうか
最初はきれいな解法を探しがちでした。
最近は、まずは全探索前提で考える、ダメなら制約を見ながら工夫する、という手順で考えられるようになりました。
Atcoderの解説PDFもそういう流れで書いてあることが多いです。全探索最強です。
[競プロ] (a+b-1)/a する
B - Power Socket https://t.co/8A8ZjOgkc2
— は た む (@gg_hatano) 2020年1月8日
こういうのでif文書いている自分が嫌だったけど、@drken1215 の記事を思い出して解けた
>しかし実はこれをまとめて (a + b - 1) / b と簡潔に書くことができます。今後頻繁に使うことになるテクニックなので習得しておきたいところです。
こういう便利なものは知っておきましょう。
[競プロ] コーナーケースに気を付ける
あーーーーーーーー幅1のときは1かーーーーーーーー #atcoder
— は た む (@gg_hatano) 2020年3月14日
おそらく、↓の問題の話です。アホですね。 atcoder.jp
Atcoderはテストケースが親切で、色々気づかせてくれます。 とはいえ、際どいケースはケアしないと爆死します。↓とか。気をつけます。 atcoder.jp
[競プロ] 速く解く練習をする
gghatanoさんのAtCoder Beginner Contest 159での成績:2129位
— は た む (@gg_hatano) 2020年3月22日
パフォーマンス:1108相当
レーティング:369→502 (+133) :)
Highestを更新し、8 級になりました!#AtCoder https://t.co/xiElLvujbl
やっとこさ茶色になった
解ければいいやと思っていましたが、それだとレートが上がりません。
速く解くのは大事。
[競プロ] 過去の皆さんの実装を参考にする
これのことですね。めぐる式二分探索、いいね
— は た む (@gg_hatano) 2020年4月14日
この記事のことだと思います。提出 #11969706 - AtCoder Beginner Contest 098 https://t.co/DrpWMnwz5H
— は た む (@gg_hatano) 2020年4月16日
けんちょんフォーマットで尺取法を書いたら正解できた
アルゴリズムはわかっても、実装で詰まって進めないことがよくあります。今後もあります。 自分で考えるのと並行して、人の実装を参考にするようにしました。いろいろな工夫がつまっています。
さいごに
[競プロ] AtCoderはすごい
atcoder.jp ほぼ毎週、オンラインのコンテストを無料で開催して、教育的な問題と解説を準備してシステムを運用して...ってちょっと考えられません。
コロナ対応のStayHome生活は、Atcoderのおかげでかなり充実しています。
引き続きどうかよろしくお願いいたします。
メモ
企業コンで関われるといいな。社内に最適化マラソンマッチのネタがあるはず...
GSuiteを使って簡単にコンテストをやろう (学会運営 Advent Calendar 2019)
概要
この記事は、学会運営 Advent Calendar 2019の記事です。
私は、セキュリティのワークショップ Privacy Work Shopの運営に携わりました。
他のメンバの皆さん、ありがとうございました。引き続きどうかよろしくお願いいたします。
その中で、データの匿名加工と再識別の技術を競うコンテスト「PWS Cup」を開催しました。
こんなコンテストです。
学会の参加者どうしで交流する一手段として、コンテストはよく行われます。結構盛り上がります。
例えば、データ分析のKDD CUPは有名です。
www.kdd.org
ただ...運営は結構大変です。学会運営にあまりお金は出ませんし、時間もありません。
ルール設計も大変ですが、システム構築も大変です。ちゃんと作らないと、コンテストにならなくて楽しくないです。
今回は、GoogleのGsuiteを利用して、割と簡単にコンテストを実現するシステムについて、紹介します。
運営がやること
運営視点で、システムでやることは、
- アカウント管理:運営が参加者にコンテスト用アカウントを発行する
- データ配布 :運営が参加者のみにデータを配る
- データ受付 :参加者が投稿したデータを受け付ける
- データ評価 :投稿されたデータを運営が評価する
- 結果公開 :評価した結果を参加者に通知する
基本的にはこれだけです...これだけなのですが、ちゃんとやらないと、コンテストが成立しません。
各項目ごとに重要度を付けてみると、↓みたいな感じになりました。
アカウント管理。
今回は「セキュリティのワークショップ」のコンテストなので、そこでセキュリティの事故が起きたら面白すぎます。
極力、手で実装したくないです。どんな穴があるのかわからないので...。
データの配布。
参加者だけに渡したいです。特に、今回のコンテストは特別に、参加者毎に渡すデータが異なる、という要件がありました。
アカウント毎に、正しくデータが配布できるような仕組みが必要でした。
投稿データのフォーマットチェックの自動化、は結構重要です。
参加してもらって折角投稿したのに、フォーマットがダメで評価できません...は頻繁にあります。
個別に修正箇所を指摘するのは超絶大変です。
また、データ配布・受付のシステムダウンが起きないことも重要です。
特に締め切り間際に投稿が相次ぎます。投稿データが大量に降ってくるとシステムのパフォーマンスが落ちます。
「システムのせいで投稿できませんでした」はかなり興ざめです。
予算。人件費は出ません。ボランティアベースで参加していますし、実装の工数に費用は出てきません。
可能な限り、ありものを使うのが良さそうです。サービス利用費...としてなら、費用の請求はしやすいと思います。
実現手法
比較します どうやったらできるか。
- プロの力を借りる:コンテスト運営サービス
- 〇 kaggleやtopcoderやsignateなど、有名なコンテスト事業者に協力してもらいます。プロの力で、いい感じにやってもらえます。
- ✕ 予算感が分かりません...学術目的なら安くできたりするかな...?分かりません。(企業案件だと1千万円オーダーという声もあります)
- 既存のシステムを使う:EvalAI
- 〇 データ分析の予測モデル構築コンテスト...は、EVALAIというツールを使えば作れそうです
- ✕ 予測モデル構築コンテストではない場合、システム改修が必要です。これは大変そう。
- [今回採用] 既存のツールを組み合わせる : Gsuite
- 〇 ところどころ人力を入れながら、ある程度は自動化します 今回はこの内容を紹介します
- ✕ 規模が大きくなってくると、人力が無視できません。予算感も合わないかもしれません。
- 一から全部自分で作る
- 〇 何かを買う必要はありません。サーバ代くらいです。安く済みます。頑張れば、自分が欲しいものが作れます。
- ✕ 労力はかかります。労力は抑えたいです...。
EvalAIはかなりいい感じだったのですが、コンテストの仕様と合わなかったので止めました。
↓の記事が参考になります。AWSとかでEvalAIを動かしておしまい、にしたかった。
qiita.com
今回は、Gsuiteを使って、簡単にコンテストシステムを作りました。
理想
こんな感じです。
- Gsuiteでアカウント管理
- Google driveでデータを配布 (フォルダのアクセス権限をいい感じに設定しておく)
- Google Form + GAS で投稿時のフォーマットチェック
- GCEで評価して、結果をgithubにデプロイしてgithub-pagesで公開
現実
- Gsuiteでアカウント管理
- Google driveでデータを配布 (フォルダのアクセス権限をいい感じに設定しておく)
- Google Form + GAS で投稿時のフォーマットチェック
- [変更] 運営のローカル環境に投稿データをダウンロードして、評価用スクリプトを回して、結果をgithub pagesで公開
GCEからgoogle driveを見に行くのはちょっとアレなので、gcsに移して...とか考えるのが面倒なので、手元にダウンロードしてやりました。
投稿したらすぐに評価して表示したい場合は、いろいろ工夫が必要でしょうけど、今回は数日に1回評価すればよかったので、頑張りませんでした。
実装が必要なものは、
- google form のフォーマットチェック部分のGAS
- フォーマットエラーだったら、投稿者に通知する、という仕組みもGASなら簡単です。
- 投稿データの評価用スクリプト
くらいです。簡単ですよね。
費用
- Gsuite利用料は、1アカウント700円/月くらい
- 25チームが2か月やって、700 x 25 x 2 = 35,000円くらいでした。
まとめ
コンテストは楽しいです。学会は盛り上がります。
でもシステムは面倒です。お金を多少使って、労力を最小化しましょう。
来年はEvalAI使いたい...
おまけ
- 会社proxyのせいでGoogle Formが見られません、という参加者が...
- メールで提出してもらいました。お互い頑張りましょう
NBAのデータ分析がしたい(データ準備編)
はじめに
この記事は、R advent calendar 2016 12/18 の担当分です。
ですが、Rとかクリスマスとか、どうでもいいのです。NBAを観ましょうNBA。
12月26日の朝4時30分から、キャバリアーズvsウォリアーズの試合があるのです。
最近はこの試合を楽しみに生きています。寂しくないです。
2015-2016年シーズンファイナルの激闘は、みなさんの記憶にも新しいはずです。
最終第7戦の最後まで目が離せない、最高の戦いでした。
今年はウォリアーズに、2013-2014シーズンMVPであるケビン・デュラントが加わりました。
ステファン・カリー、クレイ・トンプソン、ドレイモンド・グリーンとデュラントのオールスター選手4人が所属しており、
史上最強の呼び声も高いです。12月17日現在で23勝4敗、ウェスタンで1位です。
一方キャバリアーズは、昨年パッとしなかったケビン・ラブの調子が良く、
レブロン・ジェームズ、カイリー・アービングと共にBIG3で立ち向かうことができそうです。
12月17日現在で18勝6敗、イースタンで1位です。
興奮してきました。NBAのデータ分析しましょう。
NBAのシーズンデータ
まずはNBAについてどのようなデータが取得できるか、調べてみました。
シーズンの選手別成績は、SportsAnalyticsパッケージの関数を使って取得できます。
library(dplyr) library(SportsAnalytics) ## データの取得 nbadata <- data.frame() for (year in 0:15){ ## シーズンを指定するための引数を作る ## 2015-2016シーズンだったら "15-16" fetch.nbadata.arg <- paste( sprintf("%02d", year), sprintf("%02d", year+1), sep="-" ) ## データの取得 nbadata.year <- fetch_NBAPlayerStatistics(fetch.nbadata.arg) ## シーズンを表す列を作る nbadata.year$Year <- 2000 + year ## 結合する nbadata <- rbind(nbadata, nbadata.year) }
## 内容確認 > nbadata %>% names [1] "League" "Name" "Team" "Position" [5] "GamesPlayed" "TotalMinutesPlayed" "FieldGoalsMade" "FieldGoalsAttempted" [9] "ThreesMade" "ThreesAttempted" "FreeThrowsMade" "FreeThrowsAttempted" [13] "OffensiveRebounds" "TotalRebounds" "Assists" "Steals" [17] "Turnovers" "Blocks" "PersonalFouls" "Disqualifications" [21] "TotalPoints" "Technicals" "Ejections" "FlagrantFouls" [25] "GamesStarted" "Year"
総得点の推移
シーズン別の総得点を集計してみます。
nbadata <- read.csv("nbadata_2015_2016.csv") library(ggplot2) ## 総得点 nbadata.points <- nbadata %>% group_by(Year) %>% summarise(Points = sum(TotalPoints)) ## 総得点の可視化 nbadata.points %>% ggplot(aes(x = Year, y = Points)) + geom_line() + geom_point() + ggtitle("Total Points")
NBAは1シーズン82試合なのですが、2011-2012シーズンは66試合しか行われませんでした。
その影響で、シーズン総得点は2011年に落ち込んでいます。
しかし、全体として得点は増加傾向にあります。
オフェンスの効率が上がっているのか、ディフェンス力が低下しているのか。
今回は、オフェンスに注目してみます。
3ポイントシュートの成功率、成功数
昨今、色々なチームがウォリアーズの真似をしているのか、3ポイントシュートの数が増えている気がします。
最近も、ロケッツが1試合で24本の3ポイントが決め、歴代記録が更新されました。
そこで、確認のために、3ポイントシュートの成功率、成功数の推移を調べてみます。
## 3ポイントの集計 nbadata.threepoints <- nbadata %>% group_by(Year) %>% summarise(ThreesAttempted = sum(ThreesAttempted), ThreesMade = sum(ThreesMade)) ## 3ポイントの成功率 nbadata.threepoints %>% mutate(ThreesRate = ThreesMade / ThreesAttempted) %>% ggplot(aes(x = Year, y = ThreesRate)) + geom_line() + geom_point() + ggtitle("Three Point Shot (Rate)")
## 3ポイントの成功数 nbadata.threepoints %>% ggplot(aes(x = Year, y = ThreesMade)) + geom_line() + geom_point() + ggtitle("Three Point Shot (Made)")
3ポイントの成功数は、増加傾向にありそうです。
また、3ポイントの成功率は、2015-2016シーズンには増加しています。
闇雲に3ポイントを狙っているのではない、ということでしょう。3ポイントは得点力向上に寄与していそうです。
NBAのplay-by-play データ
次は、シーズンのデータではなく、もっと細かい、試合中のデータも扱いたいです 。
ただ、バスケでそれができるでしょうか。
状態変化が離散的であるスポーツは、データが作りやすそうです。
例えば、野球のデータは、80年分くらいが公開されています。
しかし、連続的に変化するバスケの試合を表現するようなデータは、ちゃんとお金を払わないと使えなさそう...
探してみたら、ありました。
なんと、試合中の各時刻における全選手の座標を取得することができます。
library(RCurl) library(jsonlite) ## NBA_SportVUをクローンします。 ## system("git clone https://github.com/rajshah4/NBA_SportVu") source("./NBA_SportVu/_functions.R")
ここを参考にしながら、 昨年の12/24の、キャバリアーズvsウォリアーズの試合データを取得してみました。
Rで扱いやすいように、dataframeにします。
## all.movements <- sportvu_convert_json("../data/0021500438.json")
1試合分で13列256万行。すごい。220MBありました。内容を見てみます。
all.movements <- read.csv("movements.csv") all.movements %>% names [1] "X" "player_id" "lastname" "firstname" "jersey" "position" "team_id" [8] "x_loc" "y_loc" "radius" "game_clock" "shot_clock" "quarter" "event.id"
各時刻(0.04秒刻み?)で、コート上の全選手とボールの位置情報(x_loc, y_loc)がわかります。
...すごそう...
一旦、プレイを可視化してみます。
4Q3:30前後の、レブロンジェームズのダンクまでの動きを、プロットしてみます。動画だと、このプレイです。
サイドからセンターにドリブルで移動、そこからドライブインしてダンク、という動きでした。
## データの抽出 movements.493.lebron <- all.movements %>% filter(lastname == "James") %>% filter(event.id == 493) ## 可視化(y座標は、ビデオの向きに合わせて調整する) movements.493.lebron %>% ggplot(aes(x = x_loc, y= 50-y_loc, group = lastname)) + geom_path(aes(color = game_clock)) + ylim(c(0,50)) + ylab("y_loc")
すごい!ちゃんとできています。
総移動距離
座標が取れているので、色々なことが分かりそうです。
例えば、各選手が1試合でどれくらい移動したのか、見てみましょう。
## 総移動距離の計算 data.travelDist <- all.movements %>% group_by(firstname, lastname) %>% summarise(totalDist = travelDist(x_loc, y_loc)) ## kmに調整して、上位10人を出す data.travelDist %>% mutate(totalDist_km = totalDist * 30 / 100 / 1000) %>% select(-totalDist) %>% arrange(desc(totalDist_km)) %>% head(10) ## 上位10人 lastname firstname[f:id:gg_hatano:20161218110837p:plain] totalDist_km 1 NA ball 8.711633 2 Kevin Love 4.896590 3 LeBron James 4.668445 4 Draymond Green 4.631822 5 Stephen Curry 4.534497 6 Klay Thompson 4.498305 7 Matthew Dellavedova 4.075169 8 Iman Shumpert 3.820774 9 Andre Iguodala 3.736349 10 Tristan Thompson 3.676420
...ボールにもセンサーがついていたのですね。
ボールの総移動距離は8.7km。ケビンラブは4.9kmも移動した、とのことでした。
おわりに
今年のお正月はNBAのデータで遊びましょう!
ところでこの記事は、R advent calendar 2016 12/18 の担当分でした。
明日は@siero5335さんの「森をさまよう」です。
...なんでしょう。怖い話でしょうか。楽しみですね。
以上です。
Oracle Master 12c Silver合格しました
はじめに
あれから2ヶ月経ちまして、なんとか合格しました。
合格点67%のところを67%。ちょうどでした。
対策
受験を延期して、ソフトバンクから白い対策本が出版されるのを待つ方がいいと思います。
僕は何をしたらいいのか分からなすぎて、自転車を乗り回して筋トレをしたら合格できました。
みなさんも自転車に乗りましょう。
文句
3月に受験した時は2セクションあったのですが、今回は1セクションしかありませんでした。
試験形式変更のアナウンス、あったのかな。
試験問題内容も、3月の時と全然違いました。
expdpでダンプファイルの名前が被っていたらどうなるか?知らんがな。
おわりに
Goldまで頑張れる気がしません。これでOracleの試験は一区切りにします。
そろそろデータ分析します。NBAのデータをいじります。
以上です。
追記
2016年5月に合格ライン変更がありますよ、というニュースがありました。
2016年2月に。そんなん見ないよ...