I could just link my solution for this Advent of Code day. But I wouldn't want to spoil part 2 for you, so here is the snippet: type Card = enum C2 = (2, "2"), C3 = "3", C4 = "4", C5 = "5", C6 = "6", C7 = "7", C8 = "8", C9 = "9", T, J, Q, K, A Hand = array[5, Card] Run
Enum values have a string and ordinal value associated to them. Here I am assigning string "2" and value 2 to enum C2. `C2 = (2, "2")` Notice how I only assign value to first item, because every item after it will have value 1 higher than previous. E3 = 3, E4 = 4, etc. etc. Also notice that I didn't change string values of T, J, K, A because by default string value of item is his name T = "T", J = "J", etc. etc. > But it's going to require a lot of boilerplate to convert Not really. Later in the code I parse input for hand string with a for loop and parseEnum(): func parseHand(hand: string): Hand = for i, c in hand: result[i] = parseEnum[Card]($c) Run And making a set of cards from array[5, Card] is just as easy as with strings: import std/setutils let setOfCards = [T, C8, K, Q, C5].toSet() Run > Also in an hypothetical where I have more than 5 cards, for example to > represent a 52 cards deck... Then you could just change `array[5, Card]` to `array[52, Card]`. If you need more context you can read full solution [here](https://codeberg.org/Archargelod/aoc23-nim/src/branch/master/day_07/solution.nim) .