Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2024年15日目です。
※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方、1日目、2日目、3日目、4日目、5日目、6日目、7日目、8日目、9日目、10日目、11日目、12日目、13日目、14日目、15日目、16日目、17日目、18日目。
Day 19「Linen Layout」
タイトルは「リネンのレイアウト」。
ストーリー的には、なぜか歴史家が温泉に入ろうとしています。温泉には、色とりどりのタオルがあるのですが、そのタオルを組合せてデザインをしたいようです。
以下のようなインプットがあります。
r, wr, b, g, bwu, rb, gb, br
brwrr
bggr
gbbr
rrbgbr
ubwu
bwurrg
brgr
bbrgwb
一番上の行は、タオルの種類です。一行開けたその下の記号の羅列はデザインしたいパターンです。上のタオルを組み合わせて、下のデザインを作っていきたいのですが、いくつかは上のタオルのパターンでは作れないようです。
例えば、「brwrr」は、br、wr、rの組合せで作れますが、「bbrgwb」は、作ることができません。
Part1では、作れるデザインパターンの組合せは何パターンあるかを計算します。
Part2では、作れるデザインパターンの中で、そのパターンを作るためのタオルの組合せがいくつあるかを計算します。
・ネ
・
・タ
・
・バ
・
・レ
Part1,2を解いてみる
過去似たような問題はあったように思います。
タオルのパターンは447パターンあり、作りたいデザインは400個、ひとつのデザインは50文字くらいでだいたい構成されています。
ぱっと見だと、検索置換ツールで一発でできそうです。実際、テストデータではそれで通ります。しかし、本番データを使ってみると、組合せの順番がきっちり決まっており、変な順番だと作れないケースがあります。そのため、頭もしくは後ろからちゃんとパターンに一致するかどうかを見ていく必要があります。正規表現でもReplaceFirstでもいいのでフィールド付加ツールで、デザインパターンにタオルを結合し、前から(もしくは後ろから)置換していきます。
これ、途中でなるべく不要になったレコードを削除していかないと、どんどんレコードが増えて動かなくなります。例えば、通った(作ることができることがわかった)パターンがあれば、あとは捨てることができます。また、置換していくと、残りのパターンが一致するケースがあり、これをユニーク化することで大きくレコードを減らすことができます。
Part1のマクロ。
Part2は、Part1そのまま使ってるとハマるのでご注意を。Part2は、Part1と異なる視点でレコードを削っていく必要があります。むしろ、Part1よりも単純で、同じパターンのカウントを合計していくだけです。
Part2マクロ
まとめ
- 後半戦のオアシス問題。
- その割には苦戦しました・・・。Part1と2でがらっと頭を切り替える必要があるのに、全然だめでした・・・。
- Private LeaderboardではPart1は13位、Part2も13位ということで、完全に出遅れてしまいました・・・。ほんと一時間以内にさくっと終わらせたい問題です・・・。
コメント