AlteryxユーザーのためのAdvent of Codeの始め方

Advent of Codeとは?

以前に書いた「Alteryxの技術を磨くには-上級者向け」という記事でも触れましたが、12月になると12/25まで1日1問問題が出てそれをプログラミングで解いていくAdvent of codeというイベントが始まります。

基本的にはプログラミング言語向けの問題ですが、Alteryxでももちろん解くことができます。そのため、英語のAlteryx Communityの方で、有志の方がチャレンジしているディスカッションが1問ごとに立ち上がります。

難易度的に、最初の数問はWeelky Challengeの中級レベルかと思いますが、それ以降は上級以上の問題で、かなり難易度的には高いです。

Alteryxならではのレギュレーション「BaseA」とは?

ところで、AlteryxではPythonツール、Rツール、コマンドラインツールといった外部の力を借りることができるツールがいくつかあります。Advent of Codeの世界でこれを使うと面白くないので、「BaseA」と呼ばれるルールがAlteryxの世界ではローカルルールとして決められています(もちろんこのレギュレーションを守らず、PythonやRを使うこともできますが)。

そのルールは以下のとおりです。

  • コマンドラインツール禁止
  • Pythonツール禁止
  • Rツール禁止
  • SDKベースのカスタムツール禁止(マクロはOK)
  • フォーミュラSDK拡張機能禁止
  • 問題のダウンロードのためのダウンロードツールはOK

Almost That Time of the Year – Advent of Code 2022! Join Us!より

ちなみに、BaseAでは解けない問題がいくつか出てくるかもしれません。過去intcodeと呼ばれる問題はBaseAではできませんでした。その場合はすっぱり諦めるか、BaseAではない方法に進むしかありません。

参加するには

Advent of Codeに参加するには、公式サイトにログインが必要です。ログインは以下のソーシャルメディアのアカウントが必要になります(連携ログインのみのようです)。ログインすることにより、単一のIDが生成され、それにより答えが一意となるようです(後ほど説明します)。

  • GitHub
  • Google
  • Twitter
  • Reddit

ちなみに、最初Googleでログインしましたが、名前が日本語だとリーダーボード(後述します)で文字化けします。例えば会社のアドレスとかですとログイン情報を変えることができなかったので、最終的にはGitHubのアカウントで2021年はやり直しました。GitHubのアカウントであれば、あとで他の方も参照できるように、ワークフローをアップすることも可能なので、個人的にはこちらをオススメします。とにかくアカウント名に日本語を使っていない必要があります。

Alteryx Communityでわいわいやりたい場合は、英語版コミュニティのディスカッションを見る必要があります。ディスカッションのGeneralカテゴリにディスカッションが立ち上がります。

CommunityParticipateDiscussionsGeneral

ぜひコミュニティもご覧いただければと思います。

リーダーボード

Advent of Codeにはリーダーボードというのがあり、早く解いた順番でポイントがもらえます。ただし先着100名です。つまり、1人目は100点、100人目は1点、101人目以降は0点です。グローバルは以上に早いです・・・(問題が公開されてから1分で解かれていますが、問題読むのにそれ以上にかかるのですが・・・)。

ただ、プライベートリーダーボードというものがあります。これが非常にいい感じに機能しているのですが、誰でもプライベートリーダーボードを作ることができます。つまり知り合い同士でリーダーボードを作ることができる、ということになるのですが、Alteryxユーザーのためのリーダーボードが存在します。

2022年からはBaseA専用のプライベートリーダーボードができました。コードは「908788-a11e85b1」です(Joshua Burkhowに感謝!)。

ちなみに、プライベートリーダーボードは200名までしか参加できないのでご注意を!

公開される時間帯

アメリカの東部時間の0時に公開されるので、日本は昼の2時です。休日だと非常にいい時間帯かと思います。平日だと、、、定時終わってからのスタートになるでしょうか・・・(中東が19時くらいなので有利?! もしくはヨーロッパも夜の自分の時間をたっぷり使えるかもしれません 思い切り嘘ついてましたね、、、ヨーロッパは早朝でかなり苦しく、アメリカは西海岸に近いほうが21時くらいで有利でしょうか・・・)。

どのように出題されるのか?

例えば、2021年の問題を見てみましょう。過去のAdvent of Codeも公開されています。2021年はこちら

すでに全問公開されているので、こちらのような画面になっていますが、1~25の数字がついているように、実際は上の1日目から順に公開されます。

例えば、1日目をクリックすると、問題文が書かれたページに移行します。

問題文の最後にインプットデータの取得先と、答えを入れるテキストボックスが配置されています。問題となるデータは、「get your puzzle input」から取得します。答えがわかったら、Answerのテキストボックスに入力してSubmitします。

ちなみに、Submitして答えがあっていれば次の問題が下に出現します。そう、Advent of codeは二段階の問題が1日に出題されるのです。

二問目も一番下にAnswerを入力して送信するテキストボックスがありますので、解いたらSubmitしましょう。1問目だけでも解けると★を一つもらえます。2問目まで解けるとさらに★がもらえますので、最終的には1日に★を2つもらえることができ、年に25日あるので50の★をもらえるようにがんばる、という形になっています。

話を戻しましょう。基本的に、1問目は準備となる問題で、2問目は1問目を拡張させた問題となります。2問目は1問目より条件が難解になるようなイメージです。1問目と同じ方向性で解けることもありますし、計算量的に問題があるような解き方をしていれば、根本的にロジックを考え直さないといけないようなこともあったりします。

ちなみに、問題となるデータはログインユーザーによって異なります。そのため、答えも変わるのでズルはできないようになっています(人の答えを見ても意味がありません。もちろん、コードがわかればそのまま利用可能ではありますが)。

参加することで得られるスキル

  • 繰り返しマクロの作製技術

途中から繰り返しマクロを使うのが普通になってきます・・・。

  • なるべく繰り返しマクロを使わずに進める技術・考え方

繰り返しマクロを使うと時間がかかるケースが多いので、なるべく繰り返しマクロを使わない方法が求められる場合があります。行生成ツールなどがキーとなります。

  • 力技(Brute Force)が通用しない場合はロジックで考えるという考え方

元のデータは少なくても、計算していくうちにデータ量が爆発する可能性があります(これは他のプログラミング言語でも同様です)。例えば、組み合わせがあまりにも多すぎるケースなど。このような場合はうまくロジックを考える必要があります。

なかなかデータ加工だけでここまでのテクニックは必要としないかと思いますが、プログラミング言語でできることと遜色ないことができる、というのはAlteryxを扱う上で大きな自信につながると思います。

また、繰り返しマクロは嫌というほど組む必要がありますし、行生成ツール、複数行フォーミュラツールなども使う必要があり、いつものワークフロー作成とは少し毛色が違うかと思います。

私も参加してますので、ぜひプライベートリーダーボードでお会いしましょう!

コメント

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