Advent of Code is back! Unwrap daily challenges to sharpen your Alteryx skills and earn badges along the way! Learn more now.
Free Trial

General Discussions

Discuss any topics that are not product-specific here.

Advent of Code 2023 Day 15 (BaseA Style)

AlteryxCommunityTeam
Alteryx Community Team
Alteryx Community Team

Discussion thread for day 15 of the Advent of Code - https://adventofcode.com/2023/day/15

15 REPLIES 15
kelsey_kincaid
12 - Quasar
12 - Quasar

Today was a good confidence booster! I started by trying to avoid an iterative macro, but found the logic was more straightforward with a macro than without (at least to me). Now I want to go back and try a non-macro solution!

 

 

Spoiler

 

Part 1: 
The bulk of this logic was done in a simple multi-row formula tool with built-in Alteryx functions, which just felt so good. CharToInt() was so useful.



Part 2:
After rereading the instructions approximately 15 times, I finally felt like I understood the problem. It luckily sounded much more complicated than it ended up being in practice.

  • Re-apply the "HASHMAP" algorithm to just the lens label instead of the full string
  • Find the first line with a = operation and remove any records before that. My production data wasn't working in my iterative macro because the first 3 operations were removals, so this was my solve for that.
  • Find max iterations and use that to stop the macro
  • Use iterative macro to see if a label already existed in a box, and apply the operation. The workhorse of this macro is the join tool between the box map and the instruction set.

Workflow:

D15.png

 

Macro:

D15 Macro.png

 

 

CoG
14 - Magnetar

This was a fun one, once I figured out the instructions (which took me longer than I'd like to admit...). The method here is pretty much just brute force, so I won't share any further details as to algorithm. I think the workflow itself is a pretty cool use-case for creating conditional logic in Alteryx (i.e. update if row exists, add row if not)

 

Workflow:

 

Spoiler
Main Workflow:
_Main Workflow.png
Hash String (iterative macro):
_Hash String.png
Fill Boxes with Lenses (iterative macro):
_Fill Boxes.png

 

 

phottovy
13 - Pulsar
13 - Pulsar

I probably spent more time rereading the description than actually building my workflow.

 

Spoiler
15.png

P1:
15_P1.png

P2 (which also reuses the P1 macro:
15_P2.png
DaisukeTsuchiya
14 - Magnetar

P2 is hard to understand the problem.

Spoiler
I lost my way to find Box2 in P2 sample. @gawa gave me one sentence hint then I got it.
Thank you.

スクリーンショット 2023-12-15 174413.png
<Macro for P2>
スクリーンショット 2023-12-15 175709.png
gawa
16 - Nebula
16 - Nebula

It may take a bit long to understand what you are asked to solve in part2, but once you get it, logic would be simpler.

Spoiler

image.png
PangHC
12 - Quasar

I read part 2 for 20+ times. to find out how to allocate the box.

and today also a non macro day. 

 

Spoiler
Part1: token > multiple tool

part2:
1. use part one method for label only (note: input more that 2 characters, waste lot of time to found this)
2. sort descending RecordID
3. take first "=" for value, and take last "=" before "-" for RecordID
4. sort RecordID back to ascending and add sequence_num (slot) by box.
5. calculate as request and sum

recordIDlabelactionvalueboxtyperemark
10aa=51takefirst, for value
7aa=41takelast, for recordID
5aa- 1stop 
3aa=31stop 
1aa=21stop 

Screenshot 2023-12-15 172902.pngScreenshot 2023-12-15 172830.png

 

 

cgoodman3
14 - Magnetar
14 - Magnetar
Spoiler
I'm surprised with all of the macro based approaches, especially when there are not many macros for part 1.

Part 2 the trick is to group the values by the boxes and then you just need to work out if the operation is to add a new lens, replace an existing lens or take a lens out. So you can build out a string with the lens in order and make use of regex_replace functions to either replace or delete. 

day15_2023.png

Spoiler
Multi-row for part 2:
IF !Contains([Row-1:lensBox],[label]) AND [Operation] = "=" THEN
[Row-1:lensBox]+"["+[label]+" "+tostring([FocalLength])+"]"
ELSEIF
Contains([Row-1:lensBox],[label]) AND [Operation] = "="
THEN
REGEX_Replace([Row-1:lensBox], [label]+'(\s\d)', [label]+" "+tostring([FocalLength]))
ELSEIF
[Operation] = "-" AND contains([Row-1:lensBox],[label])
THEN
REGEX_Replace([Row-1:lensBox], '(\[)'+[label]+'(\s\d\])',"")
ELSE
[Row-1:lensBox]
ENDIF

(Ignore the lack of indentation!)
Chris
Check out my collaboration with fellow ACE Joshua Burkhow at AlterTricks.com
AkimasaKajitani
17 - Castor
17 - Castor

Part 1 is straightforward. But Part 2 question text was too difficult to understand. I continued to search the box number.

 

Spoiler
AoC_2023_15_07.png

AoC_2023_15_06.png

Raj
16 - Nebula

Had to spend a good amount of time reading the situation again and again. 
although the part 1 was not complicated as excepted 

 

Overall, a good challenge so far and got to know about the ASCII value

Formula use for part 1 - Mod(([Row-1:value] + CharToInt([data]))*17,256)


example if ASCII values 
a 97
b 98
c 99
d 100
e 101
f 102
= 61
- 45
1 49
5 53
t 116

Labels
Top Solution Authors