• @drudoo
    link
    27 months ago

    I’m not proud but after 3 hours in part 2 I had to look up help. I was trying to do it using recursion and it was not working at all.

    Even after watching a couple of videos and reading code I’m not sure why part 2 works as it does 😭

    I don’t normally code so this is like my yearly training 😂

    • @hal9001OP
      link
      17 months ago

      Recursion probably made things a little trickier for you (but is totally possible). The special piece to notice in part 2 is that you are only forward creating cards and (most importantly) there are no decisions to optimize. Each card alway produces the same result.

      This problem reminded me of the lantern fish problem. The trick with this one was not tracking individual fish, instead you only need the number of each generation you have (and in today’s puzzle we just need to track how many of each card you have)

  • @[email protected]
    link
    fedilink
    1
    edit-2
    6 months ago

    In Factor:

    Here it is on GitHub with comments and imports.

    : line>cards ( line -- winning-nums player-nums )
      ":|" split rest
      [
        [ CHAR: space = ] trim
        split-words harvest [ string>number ] map
      ] map first2
    ;
    
    : points ( winning-nums player-nums -- n )
      intersect length
      dup 0 > [ 1 - 2^ ] when
    ;
    
    : part1 ( -- )
      "vocab:aoc-2023/day04/input.txt" utf8 file-lines
      [ line>cards points ] map-sum .
    ;
    
    : follow-card ( i commons -- n )
      [ 1 ] 2dip
      2dup nth swapd
      over + (a..b]
      [ over follow-card ] map-sum
      nip +
    ;
    
    : part2 ( -- )
      "vocab:aoc-2023/day04/input.txt" utf8 file-lines
      [ line>cards intersect length ] map
      dup length  swap '[ _ follow-card ]
      map-sum .
    ;
    
  • @hal9001OP
    link
    English
    17 months ago

    My clojure solution

    Ran into a couple gottchas today. Didn’t notice the tabular data at first. It got me twice, once on the numbers and then again on the card number (which I guess I didn’t actually need to use)

    The second gottcha was missing that in the second part it is the number of matching numbers not the score that I needed to use. My first attempt was a very very very big number