完)Advent of CodeをAlteryxでやってみた2022

Advent of code

ようやくすべてクリアできました。最後の問題で気球で脱出するので気球がぷかぷか浮いています(実はこれ動いています)。非常に時間かかったので、達成感が非常にあります。

2020年からこのシリーズに参加していますが、2020年は別のアカウントを使っていたので、★の数は残っていないのですが、昨年は35個の星を獲得しました。

今年は、12/1にスタートし、年末も新幹線で解きながら、正月も時間があれば解いて、、、ようやく1/8の3連休で25問すべて解き終わりました。

とはいえ、今年はAlteryxの拡張ツールであるそろばんツールなどを利用しなくてもすべて基本ツールだけで解けたのでよかったです。昨年の35から考えると大躍進です!

今年?学んだ?こと

  • 複数行フォーミュラ内で複数フィールドを扱うやり方が実用的に使えた
  • 改めて感じたこと:反復マクロの反復データは極力減らすこと(変化しないデータは反復しない)
  • 反復マクロ内でデータをわざとしぼらずにいることで、そこからすべてのパターンをそのままやらせる方法が有効(16日目、19日目、24日目)
  • 反復マクロ内でデータが増えすぎるような場合、すべてのデータを反復せず、5000レコードくらいに絞り込んで(多い方からとか、少ない方から、とか)反復することで全パターンは検証できなくなるが、最大値などがほしいだけであればそれなりの精度で取得可能(16日目、19日目)
  • 今年も反復マクロ大量に作りました!

今年作ったもの

AdventOfCodeInput

このクリスマスツリーのアイコンは、AoCのインプットデータを直接ダウンロードするものです。

設定画面にて、年、日付、クッキーを入力することでAoCのサイトからインプットデータを入力することができます。クッキーは、Chromeのデベロッパーツールを使って入手可能です。

なお、オプション入力にサンプルデータを入力すれば、使用データをドロップダウンで入力したサンプルデータと本番データと切り替えることができます(しかも、入力したサンプルデータのフィールド名は強制的に「Input」に書き換えるので、色々と手間が省けます)。

また、一度ダウンロードするとyxdb形式で保存しキャッシュ化するためワークフローの実行自体高速化されます。

AoC_LeaderBoard_fromAPI.yxmd

PrivateLeaderBoardからデータを抜くAPIを叩くワークフローです。これにより様々な統計データの取得が可能です。といっても、sessionID(cookie)を含めてJSONをダウンロードするだけです。

わざわざAoCのサイトを見なくてもワークフローを叩けば最新のデータが取得できます。ただし、このAPIで自動化する際は15分より取得時間を長くしてくれ、と注意書きがあるので頻繁にダウンロードしないようにする必要があります。

まだやったことのない人へ

最初の5~6問くらいは良い体操になるかと思います。一度試しにやっていただければと思います(それでも、Weekly Challengeの中級~上級レベルです)。

それを超えると結構難しくなってきます。10問超えると反復マクロは当たり前、問題を理解し、ロジックをいかにうまく作っていくか、という問題になります。ここまで来るとAlteryxもプログラミング言語も難易度的にそう変わらないと思います。

リアルタイムでやると、全世界のAlteryxユーザーとのスピード勝負的なところもあってなかなかスリリングです。前半はスプリント、後半はマラソン、といった感じです。

まとめ

ところで、Alteryxの世界を離れ、グローバルリーダーボード(様々な言語で競われています)の様子を見てますと、数分で解いたりしているので恐ろしい方もいますね・・・(Day1とかトップの方は1分切ってますね)。

最後に、私の統計情報です。Day1はAlteryxを触る時間がなくてリアルタイムにトライできなかったのが一番悔やめるポイントでした・・・。5分あれば解ける問題だったのですが・・・。

13,16,19、20はPart1で引っかかっている問題、さらに17、21,22はPart2で引っかかった問題のようです・・・。

去年に引き続き、ほんと反復マクロを作りまくりました。AoCやる人はたぶん一番反復マクロ作っている上位のメンバーだと思います(それだけ普段反復マクロの出番が無いので)。

なお、ブログ用にインプットだけ埋め込んだワークフローはブログにアップしていますが、GitHubの方にもオリジナル版をアップしています。

また来年お会いしましょう!

コメント

タイトルとURLをコピーしました